| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- //
- // This unit is part of the GLScene Engine, http://glscene.org
- //
- {
- Editor for a vector.
- }
- unit FVectorEditor;
- interface
- {$I GLScene.inc}
- uses
- System.Classes,
- System.SysUtils,
- VCL.Forms,
- VCL.ComCtrls,
- VCL.StdCtrls,
- VCL.ToolWin,
- VCL.ExtCtrls,
- VCL.Buttons,
- VCL.Graphics,
- VCL.Controls,
-
- GLVectorGeometry,
- GLUtils,
- GLVectorTypes;
- type
- TGLVectorEditorForm = class(TForm)
- EDx: TEdit;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- EDy: TEdit;
- EDz: TEdit;
- BBok: TBitBtn;
- BBcancel: TBitBtn;
- IMx: TImage;
- IMy: TImage;
- IMz: TImage;
- SpeedButton1: TSpeedButton;
- SBmX: TSpeedButton;
- SpeedButton3: TSpeedButton;
- SBmY: TSpeedButton;
- SpeedButton5: TSpeedButton;
- SBmZ: TSpeedButton;
- SpeedButton7: TSpeedButton;
- SBUnit: TSpeedButton;
- SpeedButton9: TSpeedButton;
- Bevel1: TBevel;
- SBInvert: TSpeedButton;
- procedure TBxClick(Sender: TObject);
- procedure TByClick(Sender: TObject);
- procedure TBzClick(Sender: TObject);
- procedure TBnullClick(Sender: TObject);
- procedure EDxChange(Sender: TObject);
- procedure EDyChange(Sender: TObject);
- procedure EDzChange(Sender: TObject);
- procedure SBmXClick(Sender: TObject);
- procedure SBmYClick(Sender: TObject);
- procedure SBmZClick(Sender: TObject);
- procedure SBUnitClick(Sender: TObject);
- procedure SpeedButton9Click(Sender: TObject);
- procedure SBInvertClick(Sender: TObject);
- private
- vx, vy, vz : Single;
- procedure TestInput(edit : TEdit; imError : TImage; var dest : Single);
- public
- function Execute(var x, y, z : Single) : Boolean;
- end;
- function GLVectorEditorForm : TGLVectorEditorForm;
- procedure ReleaseVectorEditorForm;
- // ------------------------------------------------------------------
- implementation
- // ------------------------------------------------------------------
- {$R *.dfm}
- var
- vGLVectorEditorForm : TGLVectorEditorForm;
- function GLVectorEditorForm : TGLVectorEditorForm;
- begin
- if not Assigned(vGLVectorEditorForm) then
- vGLVectorEditorForm:=TGLVectorEditorForm.Create(nil);
- Result:=vGLVectorEditorForm;
- end;
- procedure ReleaseVectorEditorForm;
- begin
- if Assigned(vGLVectorEditorForm) then begin
- vGLVectorEditorForm.Free; vGLVectorEditorForm:=nil;
- end;
- end;
- function TGLVectorEditorForm.Execute(var x, y, z : Single) : Boolean;
- begin
- // setup dialog fields
- vx:=x;
- vy:=y;
- vz:=z;
- EDx.Text:=FloatToStr(vx);
- EDy.Text:=FloatToStr(vy);
- EDz.Text:=FloatToStr(vz);
- // show the dialog
- Result:=(ShowModal=mrOk);
- if Result then begin
- x:=vx;
- y:=vy;
- z:=vz;
- end;
- end;
- procedure TGLVectorEditorForm.TestInput(edit : TEdit; imError : TImage; var dest : Single);
- begin
- if Visible then begin
- try
- dest:=StrToFloat(edit.Text);
- imError.Visible:=False;
- except
- imError.Visible:=True;
- end;
- BBOk.Enabled:=not (IMx.Visible or IMy.Visible or IMz.Visible);
- end;
- end;
- procedure TGLVectorEditorForm.TBxClick(Sender: TObject);
- begin
- EDx.Text:='1'; EDy.Text:='0'; EDz.Text:='0';
- end;
- procedure TGLVectorEditorForm.TByClick(Sender: TObject);
- begin
- EDx.Text:='0'; EDy.Text:='1'; EDz.Text:='0';
- end;
- procedure TGLVectorEditorForm.TBzClick(Sender: TObject);
- begin
- EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='1';
- end;
- procedure TGLVectorEditorForm.TBnullClick(Sender: TObject);
- begin
- EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='0';
- end;
- procedure TGLVectorEditorForm.EDxChange(Sender: TObject);
- begin
- TestInput(EDx, IMx, vx);
- end;
- procedure TGLVectorEditorForm.EDyChange(Sender: TObject);
- begin
- TestInput(EDy, IMy, vy);
- end;
- procedure TGLVectorEditorForm.EDzChange(Sender: TObject);
- begin
- TestInput(EDz, IMz, vz);
- end;
- procedure TGLVectorEditorForm.SBmXClick(Sender: TObject);
- begin
- EDx.Text:='-1'; EDy.Text:='0'; EDz.Text:='0';
- end;
- procedure TGLVectorEditorForm.SBmYClick(Sender: TObject);
- begin
- EDx.Text:='0'; EDy.Text:='-1'; EDz.Text:='0';
- end;
- procedure TGLVectorEditorForm.SBmZClick(Sender: TObject);
- begin
- EDx.Text:='0'; EDy.Text:='0'; EDz.Text:='-1';
- end;
- procedure TGLVectorEditorForm.SBUnitClick(Sender: TObject);
- begin
- EDx.Text:='1'; EDy.Text:='1'; EDz.Text:='1';
- end;
- procedure TGLVectorEditorForm.SpeedButton9Click(Sender: TObject);
- var
- v : TAffineVector;
- begin
- SetVector(v, GLUtils.StrToFloatDef(EDx.Text, 0), GLUtils.StrToFloatDef(EDy.Text, 0), GLUtils.StrToFloatDef(EDz.Text, 0));
- if VectorLength(v)=0 then
- v:=NullVector
- else NormalizeVector(v);
- EDx.Text:=FloatToStr(v.X);
- EDy.Text:=FloatToStr(v.Y);
- EDz.Text:=FloatToStr(v.Z);
- end;
- procedure TGLVectorEditorForm.SBInvertClick(Sender: TObject);
- var
- v : TAffineVector;
- begin
- SetVector(v, GLUtils.StrToFloatDef(EDx.Text, 0), GLUtils.StrToFloatDef(EDy.Text, 0), GLUtils.StrToFloatDef(EDz.Text, 0));
- NegateVector(v);
- EDx.Text:=FloatToStr(v.X);
- EDy.Text:=FloatToStr(v.Y);
- EDz.Text:=FloatToStr(v.Z);
- end;
- // ------------------------------------------------------------------
- initialization
- // ------------------------------------------------------------------
- finalization
- ReleaseVectorEditorForm;
- end.
|