LZScene

Форк
0
/
FVectorEditor.pas 
224 строки · 5.8 Кб
1
//
2
// This unit is part of the GLScene Engine https://github.com/glscene
3
//
4
{
5
   Editor for a vector.
6
}
7

8
unit FVectorEditor;
9

10
interface
11

12
{$I GLScene.inc}
13

14
uses  
15
  lresources,
16
  Classes, 
17
  SysUtils,
18
  Forms, 
19
  StdCtrls, 
20
  ExtCtrls, 
21
  Buttons, 
22
  Graphics, 
23
  Controls,
24
  GLVectorGeometry, 
25
  GLUtils;
26

27

28
type
29
  TVectorEditorForm = class(TForm)
30
    EDx: TEdit;
31
    Label1: TLabel;
32
    Label2: TLabel;
33
    Label3: TLabel;
34
    EDy: TEdit;
35
    EDz: TEdit;
36
    BBok: TBitBtn;
37
    BBcancel: TBitBtn;
38
    IMx: TImage;
39
    IMy: TImage;
40
    IMz: TImage;
41
    SpeedButton1: TSpeedButton;
42
    SBmX: TSpeedButton;
43
    SpeedButton3: TSpeedButton;
44
    SBmY: TSpeedButton;
45
    SpeedButton5: TSpeedButton;
46
    SBmZ: TSpeedButton;
47
    SpeedButton7: TSpeedButton;
48
    SBUnit: TSpeedButton;
49
    SpeedButton9: TSpeedButton;
50
    Bevel1: TBevel;
51
    SBInvert: TSpeedButton;
52
    procedure TBxClick(Sender: TObject);
53
    procedure TByClick(Sender: TObject);
54
    procedure TBzClick(Sender: TObject);
55
    procedure TBnullClick(Sender: TObject);
56
    procedure EDxChange(Sender: TObject);
57
    procedure EDyChange(Sender: TObject);
58
    procedure EDzChange(Sender: TObject);
59
    procedure SBmXClick(Sender: TObject);
60
    procedure SBmYClick(Sender: TObject);
61
    procedure SBmZClick(Sender: TObject);
62
    procedure SBUnitClick(Sender: TObject);
63
    procedure SpeedButton9Click(Sender: TObject);
64
    procedure SBInvertClick(Sender: TObject);
65
  private
66
    vx, vy, vz : Single;
67
    procedure TestInput(edit : TEdit; imError : TImage; var dest : Single);
68
  public
69
    function Execute(var x, y, z : Single) : Boolean;
70
  end;
71

72
function VectorEditorForm : TVectorEditorForm;
73
procedure ReleaseVectorEditorForm;
74

75
// ------------------------------------------------------------------
76
// ------------------------------------------------------------------
77
// ------------------------------------------------------------------
78
implementation
79
// ------------------------------------------------------------------
80
// ------------------------------------------------------------------
81
// ------------------------------------------------------------------
82

83
var
84
  vVectorEditorForm : TVectorEditorForm;
85

86
function VectorEditorForm : TVectorEditorForm;
87
begin
88
	if not Assigned(vVectorEditorForm) then
89
      vVectorEditorForm:=TVectorEditorForm.Create(nil);
90
	Result:=vVectorEditorForm;
91
end;
92

93
procedure ReleaseVectorEditorForm;
94
begin
95
	if Assigned(vVectorEditorForm) then begin
96
	   vVectorEditorForm.Free; vVectorEditorForm:=nil;
97
	end;
98
end;
99

100
// Execute
101
//
102
function TVectorEditorForm.Execute(var x, y, z : Single) : Boolean;
103
begin
104
   // setup dialog fields
105
   vx:=x;
106
   vy:=y;
107
   vz:=z;
108
   EDx.Text:=FloatToStr(vx);
109
   EDy.Text:=FloatToStr(vy);
110
   EDz.Text:=FloatToStr(vz);
111
   // show the dialog
112
   Result:=(ShowModal=mrOk);
113
   if Result then begin
114
      x:=vx;
115
      y:=vy;
116
      z:=vz;
117
   end;
118
end;
119

120
procedure TVectorEditorForm.TestInput(edit : TEdit; imError : TImage; var dest : Single);
121
begin
122
   if Visible then begin
123
      try
124
         dest:=StrToFloat(edit.Text);
125
         imError.Visible:=False;
126
      except
127
         imError.Visible:=True;
128
      end;
129
      BBOk.Enabled:=not (IMx.Visible or IMy.Visible or IMz.Visible);
130
   end;
131
end;
132

133
procedure TVectorEditorForm.TBxClick(Sender: TObject);
134
begin
135
   EDx.Text:='1'; EDy.Text:='0'; EDz.Text:='0';
136
end;
137

138
procedure TVectorEditorForm.TByClick(Sender: TObject);
139
begin
140
   EDx.Text:='0'; EDy.Text:='1'; EDz.Text:='0';
141
end;
142

143
procedure TVectorEditorForm.TBzClick(Sender: TObject);
144
begin
145
   EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='1';
146
end;
147

148
procedure TVectorEditorForm.TBnullClick(Sender: TObject);
149
begin
150
   EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='0';
151
end;
152

153
procedure TVectorEditorForm.EDxChange(Sender: TObject);
154
begin
155
   TestInput(EDx, IMx, vx);
156
end;
157

158
procedure TVectorEditorForm.EDyChange(Sender: TObject);
159
begin
160
   TestInput(EDy, IMy, vy);
161
end;
162

163
procedure TVectorEditorForm.EDzChange(Sender: TObject);
164
begin
165
   TestInput(EDz, IMz, vz);
166
end;
167

168
procedure TVectorEditorForm.SBmXClick(Sender: TObject);
169
begin
170
   EDx.Text:='-1'; EDy.Text:='0'; EDz.Text:='0';
171
end;
172

173
procedure TVectorEditorForm.SBmYClick(Sender: TObject);
174
begin
175
   EDx.Text:='0'; EDy.Text:='-1'; EDz.Text:='0';
176
end;
177

178
procedure TVectorEditorForm.SBmZClick(Sender: TObject);
179
begin
180
   EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='-1';
181
end;
182

183
procedure TVectorEditorForm.SBUnitClick(Sender: TObject);
184
begin
185
   EDx.Text:='1'; EDy.Text:='1'; EDz.Text:='1';
186
end;
187

188
procedure TVectorEditorForm.SpeedButton9Click(Sender: TObject);
189
var
190
   v : TAffineVector;
191
begin
192
   SetVector(v, GLUtils.StrToFloatDef(EDx.Text, 0), GLUtils.StrToFloatDef(EDy.Text, 0), GLUtils.StrToFloatDef(EDz.Text, 0));
193
   if VectorLength(v)=0 then
194
      v:=NullVector
195
   else NormalizeVector(v);
196
   EDx.Text:=FloatToStr(v.V[0]);
197
   EDy.Text:=FloatToStr(v.V[1]);
198
   EDz.Text:=FloatToStr(v.V[2]);
199
end;
200

201
procedure TVectorEditorForm.SBInvertClick(Sender: TObject);
202
var
203
   v : TAffineVector;
204
begin
205
   SetVector(v, GLUtils.StrToFloatDef(EDx.Text, 0), GLUtils.StrToFloatDef(EDy.Text, 0), GLUtils.StrToFloatDef(EDz.Text, 0));
206
   NegateVector(v);
207
   EDx.Text:=FloatToStr(v.V[0]);
208
   EDy.Text:=FloatToStr(v.V[1]);
209
   EDz.Text:=FloatToStr(v.V[2]);
210
end;
211

212
// ------------------------------------------------------------------
213
// ------------------------------------------------------------------
214
// ------------------------------------------------------------------
215
initialization
216
// ------------------------------------------------------------------
217
// ------------------------------------------------------------------
218
// ------------------------------------------------------------------
219
  {$i FVectorEditor.lrs}
220
finalization
221

222
   ReleaseVectorEditorForm;
223

224
end.
225

226

227

228

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.