2
// This unit is part of the GLScene Engine https://github.com/glscene
29
TVectorEditorForm = class(TForm)
41
SpeedButton1: TSpeedButton;
43
SpeedButton3: TSpeedButton;
45
SpeedButton5: TSpeedButton;
47
SpeedButton7: TSpeedButton;
49
SpeedButton9: TSpeedButton;
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);
67
procedure TestInput(edit : TEdit; imError : TImage; var dest : Single);
69
function Execute(var x, y, z : Single) : Boolean;
72
function VectorEditorForm : TVectorEditorForm;
73
procedure ReleaseVectorEditorForm;
75
// ------------------------------------------------------------------
76
// ------------------------------------------------------------------
77
// ------------------------------------------------------------------
79
// ------------------------------------------------------------------
80
// ------------------------------------------------------------------
81
// ------------------------------------------------------------------
84
vVectorEditorForm : TVectorEditorForm;
86
function VectorEditorForm : TVectorEditorForm;
88
if not Assigned(vVectorEditorForm) then
89
vVectorEditorForm:=TVectorEditorForm.Create(nil);
90
Result:=vVectorEditorForm;
93
procedure ReleaseVectorEditorForm;
95
if Assigned(vVectorEditorForm) then begin
96
vVectorEditorForm.Free; vVectorEditorForm:=nil;
102
function TVectorEditorForm.Execute(var x, y, z : Single) : Boolean;
104
// setup dialog fields
108
EDx.Text:=FloatToStr(vx);
109
EDy.Text:=FloatToStr(vy);
110
EDz.Text:=FloatToStr(vz);
112
Result:=(ShowModal=mrOk);
120
procedure TVectorEditorForm.TestInput(edit : TEdit; imError : TImage; var dest : Single);
122
if Visible then begin
124
dest:=StrToFloat(edit.Text);
125
imError.Visible:=False;
127
imError.Visible:=True;
129
BBOk.Enabled:=not (IMx.Visible or IMy.Visible or IMz.Visible);
133
procedure TVectorEditorForm.TBxClick(Sender: TObject);
135
EDx.Text:='1'; EDy.Text:='0'; EDz.Text:='0';
138
procedure TVectorEditorForm.TByClick(Sender: TObject);
140
EDx.Text:='0'; EDy.Text:='1'; EDz.Text:='0';
143
procedure TVectorEditorForm.TBzClick(Sender: TObject);
145
EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='1';
148
procedure TVectorEditorForm.TBnullClick(Sender: TObject);
150
EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='0';
153
procedure TVectorEditorForm.EDxChange(Sender: TObject);
155
TestInput(EDx, IMx, vx);
158
procedure TVectorEditorForm.EDyChange(Sender: TObject);
160
TestInput(EDy, IMy, vy);
163
procedure TVectorEditorForm.EDzChange(Sender: TObject);
165
TestInput(EDz, IMz, vz);
168
procedure TVectorEditorForm.SBmXClick(Sender: TObject);
170
EDx.Text:='-1'; EDy.Text:='0'; EDz.Text:='0';
173
procedure TVectorEditorForm.SBmYClick(Sender: TObject);
175
EDx.Text:='0'; EDy.Text:='-1'; EDz.Text:='0';
178
procedure TVectorEditorForm.SBmZClick(Sender: TObject);
180
EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='-1';
183
procedure TVectorEditorForm.SBUnitClick(Sender: TObject);
185
EDx.Text:='1'; EDy.Text:='1'; EDz.Text:='1';
188
procedure TVectorEditorForm.SpeedButton9Click(Sender: TObject);
192
SetVector(v, GLUtils.StrToFloatDef(EDx.Text, 0), GLUtils.StrToFloatDef(EDy.Text, 0), GLUtils.StrToFloatDef(EDz.Text, 0));
193
if VectorLength(v)=0 then
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]);
201
procedure TVectorEditorForm.SBInvertClick(Sender: TObject);
205
SetVector(v, GLUtils.StrToFloatDef(EDx.Text, 0), GLUtils.StrToFloatDef(EDy.Text, 0), GLUtils.StrToFloatDef(EDz.Text, 0));
207
EDx.Text:=FloatToStr(v.V[0]);
208
EDy.Text:=FloatToStr(v.V[1]);
209
EDz.Text:=FloatToStr(v.V[2]);
212
// ------------------------------------------------------------------
213
// ------------------------------------------------------------------
214
// ------------------------------------------------------------------
216
// ------------------------------------------------------------------
217
// ------------------------------------------------------------------
218
// ------------------------------------------------------------------
219
{$i FVectorEditor.lrs}
222
ReleaseVectorEditorForm;