2
0

fOdeMachine.pas 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. unit fOdeMachine;
  2. interface
  3. uses
  4. System.SysUtils,
  5. System.Classes,
  6. Vcl.Graphics,
  7. Vcl.Controls,
  8. Vcl.Forms,
  9. Vcl.Dialogs,
  10. GLS.Scene,
  11. GLS.Objects,
  12. GLS.SceneViewer,
  13. Physics.ODEManager,
  14. GLS.VectorGeometry,
  15. GLS.Cadencer,
  16. GLS.GeomObjects,
  17. GLS.HUDObjects,
  18. GLS.BitmapFont,
  19. GLS.WindowsFont,
  20. GLS.Coordinates,
  21. GLS.BaseClasses,
  22. Imports.ODE;
  23. type
  24. TFormOdeMachine = class(TForm)
  25. GLScene1: TGLScene;
  26. GLSceneViewer1: TGLSceneViewer;
  27. GLCamera1: TGLCamera;
  28. GLDummyCube1: TGLDummyCube;
  29. GLODEManager1: TGLODEManager;
  30. GLODEJointList1: TGLODEJointList;
  31. Machine: TGLDummyCube;
  32. Axle: TGLCylinder;
  33. GLLightSource1: TGLLightSource;
  34. Wheel: TGLCylinder;
  35. Pin1: TGLCylinder;
  36. Arm: TGLCube;
  37. Slider: TGLCube;
  38. Pin2: TGLCylinder;
  39. GLCadencer1: TGLCadencer;
  40. ODERenderPoint: TGLRenderPoint;
  41. GLHUDText1: TGLHUDText;
  42. GLWindowsBitmapFont1: TGLWindowsBitmapFont;
  43. procedure GLSceneViewer1MouseDown(Sender: TObject;
  44. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  45. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  46. X, Y: Integer);
  47. procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
  48. newTime: Double);
  49. private
  50. public
  51. mx, my: Integer;
  52. end;
  53. var
  54. FormOdeMachine: TFormOdeMachine;
  55. //---------------------------------------
  56. implementation
  57. //---------------------------------------
  58. {$R *.dfm}
  59. procedure TFormOdeMachine.GLSceneViewer1MouseDown(Sender: TObject;
  60. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  61. begin
  62. mx := X;
  63. my := Y;
  64. end;
  65. procedure TFormOdeMachine.GLSceneViewer1MouseMove(Sender: TObject;
  66. Shift: TShiftState; X, Y: Integer);
  67. begin
  68. if ssLeft in Shift then
  69. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  70. mx := X;
  71. my := Y;
  72. end;
  73. procedure TFormOdeMachine.GLCadencer1Progress(Sender: TObject; const deltaTime,
  74. newTime: Double);
  75. var
  76. velWheel,
  77. velPin2 : PdVector3;
  78. begin
  79. GLODEManager1.Step(deltaTime);
  80. velWheel := dBodyGetAngularVel(TGLODEDynamic(Wheel.Behaviours[0]).Body);
  81. velPin2 := dBodyGetLinearVel(TGLODEDynamic(Pin2.Behaviours[0]).Body);
  82. GLHUDText1.Text := Format('Wheel Angular Velocity (Y-Axis) = %.1f' + #13#10 +
  83. 'Pin2 Linear Velocity (X-Axis) = %.1f', [velWheel[1], velPin2[0]]);
  84. end;
  85. end.