GBE.CylinderExtend.pas 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. unit GBE.CylinderExtend;
  2. interface
  3. uses
  4. System.SysUtils,
  5. System.Classes,
  6. FMX.Types,
  7. FMX.Controls3D,
  8. FMX.Objects3D,
  9. FMX.Types3D,
  10. FMX.MaterialSources,
  11. System.Math.Vectors;
  12. type
  13. TCustomMeshHelper = class(TCustomMesh);
  14. TGBECylinderExtend = class(TCylinder)
  15. private
  16. fDiskTop, fDiskBottom: TDisk;
  17. FMaterialSourceTop, FMaterialSourceBottom: TMaterialSource;
  18. procedure CreateGBECylinder;
  19. procedure SetMaterialSourceBottom(const Value: TMaterialSource);
  20. procedure SetMaterialSourceTop(const Value: TMaterialSource);
  21. protected
  22. public
  23. constructor Create(AOwner: TComponent); override;
  24. destructor Destroy; override;
  25. procedure Render; override;
  26. published
  27. property MaterialSourceTop: TMaterialSource read FMaterialSourceTop
  28. write SetMaterialSourceTop;
  29. property MaterialSourceBottom: TMaterialSource read FMaterialSourceBottom
  30. write SetMaterialSourceBottom;
  31. end;
  32. procedure Register;
  33. implementation // --------------------------------------------------------------
  34. // TMesh1
  35. constructor TGBECylinderExtend.Create(AOwner: TComponent);
  36. begin
  37. inherited;
  38. CreateGBECylinder;
  39. end;
  40. procedure TGBECylinderExtend.CreateGBECylinder;
  41. begin
  42. fDiskTop := TDisk.Create(nil);
  43. fDiskTop.Locked := true;
  44. fDiskTop.Stored := false;
  45. fDiskTop.SubdivisionsAxes := SubdivisionsAxes;
  46. fDiskTop.SubdivisionsCap := SubdivisionsCap;
  47. fDiskTop.Parent := self;
  48. fDiskTop.Position.Y := -fHeight * 0.5;
  49. fDiskTop.Height := fHeight;
  50. fDiskTop.Width := fWidth;
  51. fDiskTop.Depth := fDepth;
  52. fDiskTop.MaterialSource := MaterialSourceTop;
  53. fDiskBottom := TDisk.Create(nil);
  54. fDiskBottom.Locked := true;
  55. fDiskBottom.Stored := false;
  56. fDiskBottom.SubdivisionsAxes := SubdivisionsAxes;
  57. fDiskBottom.SubdivisionsCap := SubdivisionsCap;
  58. fDiskBottom.Parent := self;
  59. fDiskBottom.Position.Y := fHeight * 0.5 + 0.001;
  60. fDiskBottom.Height := fHeight;
  61. fDiskBottom.Width := fWidth;
  62. fDiskBottom.Depth := fDepth;
  63. fDiskBottom.MaterialSource := MaterialSourceBottom;
  64. end;
  65. destructor TGBECylinderExtend.Destroy;
  66. begin
  67. DoDeleteChildren;
  68. inherited;
  69. end;
  70. procedure TGBECylinderExtend.Render;
  71. begin
  72. inherited;
  73. fDiskTop.SubdivisionsAxes := SubdivisionsAxes;
  74. fDiskTop.SubdivisionsCap := SubdivisionsCap;
  75. fDiskTop.Position.Y := -fHeight * 0.5;
  76. fDiskTop.Height := fHeight;
  77. fDiskTop.Width := fWidth;
  78. fDiskTop.Depth := fDepth;
  79. fDiskBottom.SubdivisionsAxes := SubdivisionsAxes;
  80. fDiskBottom.SubdivisionsCap := SubdivisionsCap;
  81. fDiskBottom.Position.Y := fHeight * 0.5 + 0.001;
  82. fDiskBottom.Height := fHeight;
  83. fDiskBottom.Width := fWidth;
  84. fDiskBottom.Depth := fDepth;
  85. end;
  86. procedure TGBECylinderExtend.SetMaterialSourceBottom
  87. (const Value: TMaterialSource);
  88. begin
  89. FMaterialSourceBottom := Value;
  90. fDiskBottom.MaterialSource := FMaterialSourceBottom;
  91. end;
  92. procedure TGBECylinderExtend.SetMaterialSourceTop(const Value: TMaterialSource);
  93. begin
  94. FMaterialSourceTop := Value;
  95. fDiskTop.MaterialSource := FMaterialSourceTop;
  96. end;
  97. // ---------------------------------------------------------------------------
  98. procedure Register;
  99. begin
  100. RegisterComponents('GXScene GBE', [TGBECylinderExtend]);
  101. end;
  102. end.