fBendingD.pas 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. unit fBendingD;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.StdCtrls,
  12. Vcl.ExtCtrls,
  13. GLS.Scene,
  14. GLS.Objects,
  15. GLS.Extrusion,
  16. GLS.Cadencer,
  17. GLS.VectorGeometry,
  18. GLS.SceneViewer,
  19. GLS.Coordinates,
  20. GLS.BaseClasses;
  21. type
  22. TFormBendingCyl = class(TForm)
  23. GLScene1: TGLScene;
  24. GLSceneViewer1: TGLSceneViewer;
  25. GLCamera1: TGLCamera;
  26. GLLightSource1: TGLLightSource;
  27. Pipe1: TGLPipe;
  28. GLCadencer1: TGLCadencer;
  29. CBSpline: TCheckBox;
  30. DummyCube1: TGLDummyCube;
  31. CBFat: TCheckBox;
  32. Timer1: TTimer;
  33. PanelFPS: TPanel;
  34. procedure GLCadencer1Progress(Sender: TObject;
  35. const deltaTime, newTime: Double);
  36. procedure CBSplineClick(Sender: TObject);
  37. procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  38. Shift: TShiftState; X, Y: Integer);
  39. procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState;
  40. X, Y: Integer);
  41. procedure Timer1Timer(Sender: TObject);
  42. public
  43. mx, my: Integer;
  44. end;
  45. var
  46. FormBendingCyl: TFormBendingCyl;
  47. implementation
  48. {$R *.DFM}
  49. procedure TFormBendingCyl.GLCadencer1Progress(Sender: TObject;
  50. const deltaTime, newTime: Double);
  51. begin
  52. Pipe1.Nodes[2].X := 1 * Sin(newTime * 60 * cPIdiv180);
  53. if CBFat.Checked then
  54. TGLPipeNode(Pipe1.Nodes[1]).RadiusFactor :=
  55. 1 + Cos(newTime * 30 * cPIdiv180)
  56. else
  57. TGLPipeNode(Pipe1.Nodes[1]).RadiusFactor := 1;
  58. end;
  59. procedure TFormBendingCyl.CBSplineClick(Sender: TObject);
  60. begin
  61. if CBSpline.Checked then
  62. Pipe1.SplineMode := lsmCubicSpline
  63. else
  64. Pipe1.SplineMode := lsmLines;
  65. end;
  66. procedure TFormBendingCyl.GLSceneViewer1MouseDown(Sender: TObject;
  67. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  68. begin
  69. mx := X;
  70. my := Y;
  71. end;
  72. procedure TFormBendingCyl.GLSceneViewer1MouseMove(Sender: TObject;
  73. Shift: TShiftState; X, Y: Integer);
  74. begin
  75. if Shift <> [] then
  76. GLCamera1.MoveAroundTarget(my - Y, mx - X);
  77. mx := X;
  78. my := Y;
  79. end;
  80. procedure TFormBendingCyl.Timer1Timer(Sender: TObject);
  81. begin
  82. with GLSceneViewer1 do
  83. begin
  84. PanelFPS.Caption := Format('%d Triangles, %.1f FPS',
  85. [Pipe1.TriangleCount, FramesPerSecond]);
  86. ResetPerformanceMonitor;
  87. end;
  88. end;
  89. end.