home *** CD-ROM | disk | FTP | other *** search
- unit glctrolP;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,
- glAbsWin,glWin,opengl,GLFuncs, GLStereo, StdCtrls, ExtCtrls, Buttons, ComCtrls, Menus,
- ActnList, StdActns, Mask, Grids ;
-
- type
-
- TOpenGLWindow=class;
-
- glTestScene = (tsNone,tsBasicScene,tsColorTriangle,tsBlackWhite,tsRandomTerrain,tsScene3);
-
- TGLController = class(TForm)
- PC1: TPageControl;
- TS1: TTabSheet;
- TS2: TTabSheet;
- View: TRadioGroup;
- TS3: TTabSheet;
- MoveState: TRadioGroup;
- RM1: TRadioGroup;
- SpeedButton2: TSpeedButton;
- SpeedButton3: TSpeedButton;
- Perspective1: TCheckBox;
- TS4: TTabSheet;
- SpeedButton1: TSpeedButton;
- Select: TRadioGroup;
- SpeedButton7: TSpeedButton;
- MaxFR: TCheckBox;
- HUD: TCheckBox;
- Grid: TCheckBox;
- Gridtext: TCheckBox;
- Scene: TTabSheet;
- TestScene: TRadioGroup;
- Warning1: TLabel;
- aboutsheet: TTabSheet;
- SpeedButton5: TSpeedButton;
- LightingOn: TCheckBox;
- GrabFocus: TCheckBox;
- GroupBox1: TGroupBox;
- HA: TCheckBox;
- CPixelFormat: TStaticText;
- DB: TCheckBox;
- DW: TCheckBox;
- SC: TCheckBox;
- CBits: TStaticText;
- DBits: TStaticText;
- SBits: TStaticText;
- ABits: TStaticText;
- BM: TCheckBox;
- SE: TCheckBox;
- GL: TCheckBox;
- DeleteMeasure: TSpeedButton;
- Error: TTabSheet;
- errorgrid: TStringGrid;
- StaticText2: TStaticText;
- GetError: TBitBtn;
- ClearError: TBitBtn;
- StaticText3: TStaticText;
- StaticText4: TStaticText;
- StaticText5: TStaticText;
- Vendor: TStaticText;
- Renderer: TStaticText;
- Version: TStaticText;
- Extension: TMemo;
- Stereo: TCheckBox;
- Image1: TImage;
- TabSheet1: TTabSheet;
- Animateon: TCheckBox;
- AnimateP: TPanel;
- GD: TCheckBox;
- SpeedButton4: TSpeedButton;
- WBG: TCheckBox;
- SpeedButton6: TSpeedButton;
- Cursor3D: TCheckBox;
- SpeedButton8: TSpeedButton;
- SDL: TCheckBox;
- procedure ViewClick(Sender: TObject);
- procedure MoveStateClick(Sender: TObject);
- procedure SelectClick(Sender: TObject);
- procedure Perspective1Click(Sender: TObject);
- procedure SpeedButton2Click(Sender: TObject);
- procedure SpeedButton3Click(Sender: TObject);
- procedure SpeedButton4Click(Sender: TObject);
- procedure SpeedButton6Click(Sender: TObject);
- procedure SpeedButton1Click(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure RM1Click(Sender: TObject);
- procedure SpeedButton7Click(Sender: TObject);
- procedure ResetBtnClick(Sender: TObject);
- procedure MaxFRClick(Sender: TObject);
- procedure AnimateClick(Sender: TObject);
- procedure HUDClick(Sender: TObject);
- procedure PrintClick(Sender: TObject);
- procedure GridClick(Sender: TObject);
- procedure TestSceneClick(Sender: TObject);
- procedure GridtextClick(Sender: TObject);
- procedure SpeedButton5Click(Sender: TObject);
- procedure GrabFocusClick(Sender: TObject);
- procedure LightOnClick(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure DeleteMeasureClick(Sender: TObject);
- procedure measuredataClick(Sender: TObject);
- procedure GetErrorClick(Sender: TObject);
- procedure ClearErrorClick(Sender: TObject);
- procedure GDClick(Sender: TObject);
- procedure AnimateonClick(Sender: TObject);
- procedure WBGClick(Sender: TObject);
- procedure LightXChange(Sender: TObject);
- procedure LightXKeyPress(Sender: TObject; var Key: Char);
- procedure YLightExit(Sender: TObject);
- procedure Cursor3DClick(Sender: TObject);
- procedure SpeedButton8Click(Sender: TObject);
- procedure SDLClick(Sender: TObject);
- private
- { Private declarations }
- fGLControlledWindow:TOpenGLWindow ;
- fUpdating : Boolean;
- fMeasureData:tMeasureRecord;
-
- Procedure UpDateMeasure;
- public
- { Public declarations }
- Procedure AddWindow(aWin:TOpenGLWindow);
- // add a Window to the list
- Procedure UpDateControl;
- //Update the controller for the current window state
- Procedure Lock;
- //Lock all the controls while update happening
- Procedure UnLock;
- //UnLock all the controls while update happening
- end;
-
- TOpenGLController=Class(TAbstractOpenGLControl)
- Published
-
- Property RenderDC;
- Property PixelFormat;
-
- end;
-
- TOpenGLWindow=class(TCustomGLStereo)
- // All the bits for controlling
- Private
- fGLControl : TGLController;
- fControlStart : TObject;
- fSurfaceID : LongInt;
- // various test scenes
- Procedure DrawBasicScene;
- Procedure DrawColorTriangleScene;
- Procedure DrawRBStereo;
- Procedure DrawRandomGroundScene;
- Procedure DrawSelectScene;
-
- Procedure SetTestScene(val:glTestScene);
- Protected
-
- fTestScene : glTestScene;
-
- procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer); override;
-
- Procedure SetMoveMode(aMode:GLMoveMode); override;
- Procedure SetToolMode(aMode:GLToolMode); Override;
-
- Procedure Do3DRenderScene; override;
- {Render the scene}
- Protected
-
- Procedure DoCustomViewSetUp; Override;
- // handle the setup of the ModelView Matrix for vmCustomview
-
-
- Public
- constructor Create(AOwner: TComponent); Override;
- Procedure BuildDisplayLists; override;
-
- Procedure ShowGLControl(Sender:TObject);
- //Show the windows controller
- Procedure HideGLControl;
- //Hide the controller
- Procedure GLControlFreed;
- //Control freed self
- Published
- // publish all ancestor properties
- //TCustomWindow
- Property Align;
-
- Property OnPaint ;
- property OnMouseDown;
- property OnMouseMove;
- property OnMouseUp;
-
- //TAbstractOpenGL
- Property GrabFocus;
- Property ShareGL ;
- Property GenericGDI;
-
- //TCustomOpenGLWindow
- Property Cursor3D;
- Property Animate ;
- Property BackGround ;
- Property BoxSizeX ;
- Property BoxSizeY ;
- Property BoxSizeZ ;
- Property Grid ;
- Property GridText ;
- Property HUD ;
- Property MaxFrmRate;
- Property Perspective;
- Property SimpleAxis ;
- Property Scale ;
- Property ViewMode ;
- Property RenderState;
- Property StdDisplayList;
-
- {GL Specific RENDERING EVENTS}
-
- Property On2DForeGrnd;
- Property On3DRender ;
- Property On2DBackGrnd;
- Property OnAnimate ;
- Property OnBuildDisplayList;
- Property OnCustomView;
- Property OnHUDUpdate ;
- Property OnSelectDown;
- Property OnSelectMove;
- Property OnSelectUp ;
-
- // TCustomGLLightWindow
-
- Property HeadLightOn:Boolean Read fHeadLightState Write SetHeadLightOn;
- Property LightingOn:Boolean Read fLightingState Write SetLightingState;
-
- // TCustomGLStereo
-
- Property StereoOn;
- Property StereoState;
- //new property
- Property TestScene:glTestScene Read fTestScene Write SetTestScene;
- end;
-
- var
- GLController: TGLController;
-
- procedure Register;
-
- implementation
-
- {$R *.DFM}
- {$R *.dcr} // glwindow bitmaps for the components
-
- {*********************************************************}
- constructor TOpenGLWindow.Create(AOwner: TComponent);
- Begin
- Inherited Create(aOwner);
- fTestScene:=tsNone;
- end;
- {*********************************************************}
- Procedure TOpenGLWindow.ShowGLControl(Sender:TObject);
- //Show the windows controller
- Begin
- fControlStart:=Sender;
- If Animate then animate:=False;
- Application.Processmessages;
- Application.CreateForm(TGLController,fGLControl);
- With fGLControl do
- Begin
- AddWindow(Self);
- Show;
- end;
- end;
- {*********************************************************}
- Procedure TOpenGLWindow.HideGLControl;
- //Hide the controller
- Begin
- If assigned(fGLControl) then
- Begin
- fGLControl.Free;
- fGLControl:=Nil;
- end;
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.GLControlFreed;
- //Control freed self
- Begin
- fGLControl:=Nil;
- If Not assigned(fControlStart) then exit;
- If (fControlStart is TCheckBox) then
- TCheckBox(fControlStart).Checked:=False;
- If (fControlStart is TSpeedButton) then
- TSpeedButton(fControlStart).Down:=False;
- If (fControlStart is TMenuItem) then
- TMenuItem(fControlStart).Checked:=False;
- end;
- (*************************************************************)
- procedure TOpenGLWindow.MouseUp(Button: TMouseButton; Shift: TShiftState;
- X, Y: Integer);
- begin
- Inherited MouseUp(Button,Shift,X,Y);
-
- end;
- {*********************************************************}
- Procedure TOpenGLWindow.SetMoveMode(aMode:GLMoveMode);
- Begin
- If aMode=Movemode then exit;
- Inherited SetMoveMode(aMode);
- //settle everything down
- Application.Processmessages;
- If Assigned(fGLControl) then fGLControl.UpDateControl;
- end;
- (******************************************************)
- Procedure TOpenGLWindow.SetToolMode(aMode:GLToolMode);
- Begin
- If (aMode<>toolmode)and(MoveMode=mmNone) then
- Inherited SetToolMode(aMode);
- Application.ProcessMessages;
- If Assigned(fGLControl) then fGLControl.UpDateControl;
-
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.DrawRandomGroundScene ;
- Begin
- DrawBasicScene;
- CallList(fsurfaceID);
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.DrawSelectScene;
- var P1,P2,P3:tGLPoint;
- Begin
- DrawBasicScene;
- With glCanvas do
- Begin
- P1.X:=200;P1.Y:=150;P1.Z:=0;
- P2.X:=300;P2.Y:=250;P2.Z:=0;
- P3.X:=100;P3.Y:=150;P3.Z:=0;
- MoveTo(P1);
- DrawLockedSelectHandle(10);
- LineTo(P2);
- DrawLockedSelectHandle(20);
- LineTo(P3);
- DrawSelectHandle(10);
- end;
-
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.DrawColorTriangleScene;
- var pt,pt1,pt2:tGLPoint;
- c1,c2,c3:glColorVal;
- Begin
- pt.X:=200;pt.Y:=-200;pt.z:=0;
- pt1.X:=0;pt1.Y:=200;pt1.z:=0;
- pt2.X:=-200;pt2.Y:=-200;pt2.z:=0;
- With glCanvas do
- Begin
- Linewidth:=1;
- C1:=glRed;c2:=glBlue;c3:=glLime;
- DrawTriangle(pt,pt1,pt2,c1,c2,c3);
- Pt1.Y:=150;pt1.z:=20;
- TextOut3D(pt1,20,'Open GL - Colour Triangle');
- end;
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.DrawRBStereo;
- var pt,pt1,pt2:tGLPoint;
- c1,c2,c3:glColorVal;
- Begin
- callList(DisplayList+dlGridFront);
- callList(DisplayList+dlGridBack);
- {glCallList(fsurfaceID);}
- pt.X:=50;pt.Y:=-50;pt.z:=0;
- pt1.X:=-50;pt1.Y:=50;pt1.z:=0;
- pt2.X:=150;pt2.Y:=150;pt2.z:=0;
- With glCanvas do
- Begin
- LineWidth:=5;
- CircleXY(pt,50,50);
- CircleXZ(pt,50,50);
- CircleYZ(pt,50,50);
- Linewidth:=1;
- C1:=glGray20;c2:=glGray60;c3:=glwhite;
- DrawTriangle(pt,pt1,pt2,c1,c2,c3)
- end;
-
-
- end;
- (**************************************************************)
- Procedure TOpenGLWindow.SetTestScene(val:glTestScene);
- Begin
- If fTestScene=Val then exit;
- fTestScene:=val;
- repaint
- end;
- (**************************************************************)
- Procedure TOpenGLWindow.DoCustomViewSetUp;
- // handle the setup of the ModelView Matrix for vmCustomview
- Begin
- Inherited DoCustomViewSetUp;
- glTranslatef(100,100,100);
- end;
- (**************************************************************)
- Procedure TOpenGLWindow.BuildDisplayLists;
-
- const NoPts=50;
- MPt = 200;
- foffSet=300;
-
- Var TempPt1,TempPt2,TempPt3,TempPt4,N:tGLPoint;
- i,j:LongInt;
- ElevDat:Array[0..NoPts,0..noPts]of Double;
- ElevCol:glColorVal;
- Offset:Double;
-
- Procedure SetCol(tPt:tGLPoint);
- Begin
- ElevCol[1]:=(tPt.Z+foffSet)/MPt;
- ElevCol[2]:=(tPt.Z+foffSet)/MPt;
- ElevCol[3]:=(tPt.Z+foffSet)/MPt;
- glColor4fv(@ElevCol);
- end;
- Begin
- If assigned(fShareGL) or not fStdDisplayList then exit;
- Inherited;
- ElevCol[4]:=1;
- Randomize;
- For i:=0 to NoPts do
- For j:=0 to NoPts do
- ElevDat[i,j]:=Random(mPt)-foffset;
-
- Offset:= MPt*NoPts/2;
-
- fSurfaceID:=glGenLists(1);
- glNewList(fSurfaceID,GL_COMPILE);
- saveState(stDrawing);
- For i:=0 to NoPts-1 do
- Begin
- glBegin(gl_QUAD_STRIP);
- For j:=0 to NoPts-1 do
- Begin
- TempPt1.X:=(i*MPt)-offset;
- TempPt1.Y:=(j*MPt)-offset;
- TempPt1.Z:=ElevDat[i,j];
-
- TempPt2.X:=((i)*MPt)-offset;
- TempPt2.Y:=((j+1)*MPt)-offset;
- TempPt2.Z:=ElevDat[i,j+1];
-
- TempPt3.X:=((i+1)*MPt)-offset;
- TempPt3.Y:=((j)*MPt)-offset;
- TempPt3.Z:=ElevDat[i+1,j];
-
- TempPt4.X:=((i+1)*MPt)-offset;
- TempPt4.Y:=((j+1)*MPt)-offset;
- TempPt4.Z:=ElevDat[i+1,j+1];
-
-
- If CalcUnitNormal(tempPt1,tempPt2,tempPt3,N) then
- glNormal3Dv(@N);
-
- SetCol(TempPt1);
- glvertex3dv(@TempPt1);
- SetCol(TempPt2);
- glvertex3dv(@TempPt2);
- If CalcUnitNormal(tempPt2,tempPt3,tempPt4,N) then
- glNormal3Dv(@N);
- SetCol(TempPt3);
- glvertex3dv(@TempPt3);
- SetCol(TempPt4);
- glvertex3dv(@TempPt4);
- end;
- glEnd;
- end;
- RestoreState;
- glEndList;
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.DrawBasicScene;
- {Render the scene}
- var aPt,aPt1,apt2:tGLPoint;
- {Col1,Col2,amb:GLLightVal;}
- {Pos1:tGLPoint;}
-
- begin
- Inherited Do3DRenderScene;
- aPt.X:=0;aPt.Y:=0;aPt.Z:=0;
- glCanvas.DrawAxis(apt,50,RenderState);
- aPt1.X:=-200;aPt1.Y:=-200;aPt1.Z:=-200;
- aPt2.X:=200;aPt2.Y:=200;aPt2.Z:=200;
-
- glCanvas.linestyle:=stcontinous;
- (*gldisable(gl_Line_Stipple);*)
- glcolor3fv(@glBlack);
- (* CreateGrid(aPt1,apt2,gtFront,5);
- CreateGrid(aPt1,apt2,gtback,5);*)
-
- callList(DisplayList+dlGridFront);
- callList(DisplayList+dlGridBack);
- With glCanvas do
- Begin
- PointMode:=ptSimple;
- aPt2.X:=110;aPt2.Y:=110;aPt2.Z:=0;
- PointSize:=5;
- DrawPoint(aPt2);
- PointMode:=ptShpere;
- aPt2.X:=150;aPt2.Y:=150;aPt2.Z:=0;
- PointSize:=1;
- {DrawPoint(aPt2);}
- PointMode:=ptX;
- aPt2.X:=130;aPt2.Y:=130;aPt2.Z:=0;
- PointSize:= 10*UnitsPerPixel;
- DrawPoint(aPt2);
- PointMode:=ptShpere;
- aPt2.X:=140;aPt2.Y:=140;aPt2.Z:=0;
- DrawPoint(aPt2);
- PointMode:=ptCube;
- aPt2.X:=150;aPt2.Y:=150;aPt2.Z:=100;
- DrawPoint(aPt2);
- aPt2.X:=50;aPt2.Y:=50;aPt2.Z:=100;
- TextOut3D(apt2,20,'Open GL');
- end;
- end;
- (*************************************************************)
- Procedure TOpenGLWindow.Do3DRenderScene;
- Begin
- Inherited;
- Case ord(fTestScene) of
- 0:{do Nothing};
- 1:DrawBasicScene;
- 2:DrawColorTriangleScene;
- 3:DrawRBStereo;
- 4:DrawRandomGroundScene;
- 5:DrawSelectScene;
- 6:;
-
- end
- end;
- {*********************************************************}
- {*********************************************************}
-
- Procedure TGLController.AddWindow(aWin:TOpenGLWindow);
- // add a Window to the list
- Begin
- fGLControlledWindow:=aWin;
- If Assigned(fGLControlledWindow) then UpDateControl;
- end;
-
- {*********************************************************}
- Procedure TGLController.UpDateMeasure;
- begin
- end;
- {*********************************************************}
- Procedure TGLController.UpDateControl;
- //Update the controller for the current window state
- Begin
- fUpdating:=True;
- MoveState.ItemIndex:=ord(fGLControlledWindow.MoveMode);
- View.ItemIndex:=Ord(fGLControlledWindow.ViewMode);
- Select.ItemIndex:=ord(fGLControlledWindow.ToolMode);
- RM1.ItemIndex:=Ord(fGLControlledWindow.RenderState);
- Perspective1.Checked:=fGLControlledWindow.perspective;
- HUD.Checked:=fGLControlledWindow.HUD;
- Grid.Checked:=fGLControlledWindow.grid;
- LightingOn.Checked:=fGLControlledWindow.LightingOn;
- {HeadLight.Checked:=fGLControlledWindow.HeadLightOn;}
- GrabFocus.Checked:=fGLControlledWindow.GrabFocus;
- TestScene.ItemIndex:= ord(fGLControlledWindow.TestScene);
- GD.Checked:=fGLControlledWindow.GenericGDI;
- WBG.Checked:=fGLControlledWindow.BackGround=glWhiteBkgd;
- Cursor3D.Checked:= fGLControlledWindow.cursor3D;
- SDL.Checked:=fGLControlledWindow.StdDisplayList;
- UpDateMeasure;
-
- fUpdating:=False;
- end;
-
- {*********************************************************}
- Procedure TGLController.Lock;
- //Lock all the controls while update happening
- Begin
- Screen.Cursor:=crHourglass;
- TS1.Enabled:=False;
- TS2.Enabled:=False;
- TS3.Enabled:=False;
- TS4.Enabled:=False;
- Application.Processmessages;
- end;
- Procedure TGLController.UnLock;
- //UnLock all the controls while update happening
- Begin
- TS1.Enabled:=true;
- TS2.Enabled:=true;
- TS3.Enabled:=true;
- TS4.Enabled:=true;
- Screen.Cursor:=crDefault;
- Application.Processmessages;
- end;
-
- procedure TGLController.ViewClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.ViewMode:=GLViewMode(View.ItemIndex);
- UnLock;
- end;
-
- procedure TGLController.MoveStateClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- Begin
- fGLControlledWindow.MoveMode:=GLMoveMode(MoveState.ItemIndex);
- If (MoveState.ItemIndex=7) and not Perspective1.Checked then
- Perspective1.Checked:=True;
- end;
- Select.Enabled:=not (MoveState.ItemIndex>0);
- Warning1.Visible:=(MoveState.ItemIndex>0);
- UnLock;
- end;
-
- procedure TGLController.SelectClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.ToolMode:=glToolMode(Select.ItemIndex);
- UnLock;
- end;
-
- procedure TGLController.Perspective1Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.perspective:=Perspective1.Checked;
- UnLock;
- end;
-
- procedure TGLController.SpeedButton2Click(Sender: TObject);
- begin
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.DoZoomIn;
- UnLock;
- end;
-
- procedure TGLController.SpeedButton3Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.DoZoomOut;
- UnLock;
- end;
-
- procedure TGLController.SpeedButton4Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.MoveViewByDelta(-10,-10,-10);
- UnLock;
- end;
-
- procedure TGLController.SpeedButton6Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.MoveViewByDelta(10,10,10);
- UnLock;
- end;
-
-
- procedure TGLController.SpeedButton1Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.ClearSelectList;
- UnLock;
- end;
-
-
-
- procedure TGLController.FormClose(Sender: TObject;
- var Action: TCloseAction);
- begin
- fGLControlledWindow.GLControlFreed;
- Action:=caFree;
- end;
-
- procedure TGLController.RM1Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.RenderState:=GLRenderState(RM1.ItemIndex);
- UnLock;
- end;
-
- procedure TGLController.SpeedButton7Click(Sender: TObject);
- begin
- fGLControlledWindow.RestoreLastView;
- end;
-
- procedure TGLController.ResetBtnClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- With fGLControlledWindow do
- Begin
- ResetView(True);
- Repaint;
- end;
-
- UnLock;
- end;
- procedure TGLController.MaxFRClick(Sender: TObject);
- begin
- fGLControlledWindow.MaxFrmRate:=MaxFR.Checked;
- end;
-
- procedure TGLController.AnimateClick(Sender: TObject);
- begin
- end;
- (*************************************************************)
- procedure Register;
- begin
- RegisterComponents('OpenGL', [TOpenGLWindow]);
- end;
-
-
-
- procedure TGLController.HUDClick(Sender: TObject);
- begin
- fGLControlledWindow.HUD:=HUD.Checked;
- end;
-
- procedure TGLController.PrintClick(Sender: TObject);
- begin
- Screen.Cursor:=crHourglass;
- (* glPrinter.Begindoc;
- //printing of attached gl window
- {fGLControlledWindow.PrintWindow(Printer);}
-
- glprinter.EndDoc;*)
- Screen.Cursor:=crDefault;
- end;
-
- procedure TGLController.GridClick(Sender: TObject);
- begin
- fGLControlledWindow.Grid:=Grid.checked;
- end;
-
- procedure TGLController.TestSceneClick(Sender: TObject);
- begin
- fGLControlledWindow.TestScene:=glTestScene(TestScene.ItemIndex);
- fGLControlledWindow.Repaint;
- end;
-
- procedure TGLController.GridtextClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.GridText:=GridText.Checked;
- UnLock;
- end;
-
- procedure TGLController.SpeedButton5Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.CopyToClipboard;
- UnLock;
- end;
-
- procedure TGLController.GrabFocusClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.GrabFocus:=GrabFocus.Checked;
- Lock;
- UnLock;
- end;
-
- procedure TGLController.LightOnClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- {If Assigned(fGLControlledWindow) then
- fGLControlledWindow.LightOn:=HeadLight.Checked;}
- UpDateControl;
- UnLock;
- end;
-
- procedure TGLController.FormShow(Sender: TObject);
- Var St:String;
- Dt:TPixelFormatDescriptor;
- begin
- If not Assigned(fGLControlledWindow) then exit;
- Str(fGLControlledWindow.PixelFormat,St);
- CPixelFormat.Caption:=CPixelFormat.caption+' '+St;
- Vendor.Caption:=fGLControlledWindow.GetGLVendor;
- Renderer.Caption:=fGLControlledWindow.GetGLRenderer;
- version.Caption:=fGLControlledWindow.GetGLVersion;
- Extension.LInes[0]:=fGLControlledWindow.GetGLExtensions;
- DT:=fGLControlledWindow.PixelData;
-
- With fGLControlledWindow do
- Begin
- DW.Checked:= pfd_Win_Draw;
- BM.Checked:= fpfd_BitMap;
- HA.Checked:= fpfd_Accel;
- DB.Checked:= fpfdDoubleBuf;
- SC.Checked:= fpfd_Swap_Copy;
- SE.Checked:= fpfd_swap_exhg;
- GL.Checked:= fpfd_GL_sup;
- GD.Checked:= GenericGDI;
- stereo.checked:=fpfd_Stereo;
- end;
- Str(DT.cColorBits,St);
- CBits.Caption:=CBits.caption+' '+St;
- Str(DT.cDepthBits,St);
- DBits.Caption:=DBits.caption+' '+St;
- Str(DT.cStencilBits,St);
- SBits.Caption:=SBits.caption+' '+St;
- Str(DT.cAccumBits,St);
- ABits.Caption:=ABits.caption+' '+St;
-
- UpDateMeasure;
- end;
-
- (******* ******************************************************)
- procedure TGLController.DeleteMeasureClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.ClearMoveList;
- UnLock;
-
- end;
-
- procedure TGLController.measuredataClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then UpDatemeasure;
- UnLock;
-
- end;
-
- procedure TGLController.GetErrorClick(Sender: TObject);
- Var i:Longint;
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) Then
- If fGLControlledWindow.GetError then
- Begin
- If fGLControlledWindow.ErrorList.Count>0 then
- With ErrorGrid do
- Begin
- RowCount:=fGLControlledWindow.ErrorList.Count-1;
- For i:=0 to RowCount-1 do
- Cells[0,i]:=fGLControlledWindow.ErrorList.Strings[i];
- end;
- end else
- With ErrorGrid do
- Begin
- RowCount:=1;
- Cells[0,0]:='';
- end;
- UnLock;
- end;
-
- procedure TGLController.ClearErrorClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then fGLControlledWindow.ClearError;
- With ErrorGrid do
- Begin
- RowCount:=1;
- Cells[0,0]:='';
- end;
- UnLock;
- end;
-
- procedure TGLController.GDClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.GenericGDI:=GD.Checked;
- UpdateControl;
- UnLock;
- end;
-
- procedure TGLController.AnimateonClick(Sender: TObject);
- begin
- AnimateP.Visible:=AnimateOn.Checked;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.Animate:=Animateon.Checked;
- UpdateControl;
- end;
-
- procedure TGLController.WBGClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.BackGround:=GLBackground(not WBG.Checked);
- UnLock;
- end;
-
- procedure TGLController.LightXChange(Sender: TObject);
- Var aVal:Double;
- Code:Integer;
- aEdit:TMaskEdit;
- s:String;
- begin
- If (Sender is tMaskEdit) and TMaskEdit(Sender).Modified then
- Begin
- aEdit:=TMaskEdit(sender);
- s:= TMaskEdit(Sender).Text;
- If length(s)=0 then exit;
- If length(s)=1 then
- Begin
- If s='-' then exit;
- If s='+' then exit;
- If s=' ' then exit;
- If s='.' then exit;
- end;
- {$HINTS OFF}
- Val(s,aVal,code);
- If code<>0 then
- Begin
- MessageDlg('Invalid value',mtError,[mbok],0);
- aEdit.SetFocus;
- end;
- {$HINTS ON}
- end;
- end;
-
- procedure TGLController.LightXKeyPress(Sender: TObject; var Key: Char);
- begin
- Case Key of
- '0'..'9','-','+','.',#8:;
- else
- Begin
- Key:=#0;
- Beep;
- end;
-
- end;
- end;
-
- procedure TGLController.YLightExit(Sender: TObject);
- Var aVal:Double;
- Code:Integer;
- aEdit:TMaskEdit;
- s:String;
- begin
- If (Sender is tMaskEdit) and TMaskEdit(Sender).Modified then
- Begin
- aEdit:=TMaskEdit(sender);
- s:= TMaskEdit(Sender).Text;
- If length(s)=0 then exit;
- If length(s)=1 then
- Begin
- If s='-' then exit;
- If s='+' then exit;
- If s=' ' then exit;
- If s='.' then exit;
- end;
- Val(s,aVal,code);
- If code<>0 then
- Begin
- MessageDlg('Invalid value',mtError,[mbok],0);
- aEdit.SetFocus;
- end;
- end;
- end;
-
- procedure TGLController.Cursor3DClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.Cursor3D:=Cursor3D.Checked;
- UnLock;
- end;
-
- procedure TGLController.SpeedButton8Click(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.repaint;
- UnLock;
- end;
-
- procedure TGLController.SDLClick(Sender: TObject);
- begin
- Application.ProcessMessages;
- If fUpdating then exit;
- Lock;
- If Assigned(fGLControlledWindow) then
- fGLControlledWindow.StdDisplayList:=SDL.Checked;
- UnLock;
- end;
-
- end.
-