fCsgC.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "fCsgC.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "GLS.BaseClasses"
  8. #pragma link "GLS.Coordinates"
  9. #pragma link "GLS.Material"
  10. #pragma link "GLS.Objects"
  11. #pragma link "GLS.Scene"
  12. #pragma link "GLS.VectorFileObjects"
  13. #pragma link "GLS.SceneViewer"
  14. #pragma link "GLS.File3DS"
  15. #pragma resource "*.dfm"
  16. TForm1 *Form1;
  17. //---------------------------------------------------------------------------
  18. __fastcall TForm1::TForm1(TComponent* Owner)
  19. : TForm(Owner)
  20. {
  21. }
  22. //---------------------------------------------------------------------------
  23. void __fastcall TForm1::FormCreate(TObject *Sender)
  24. {
  25. SetGLSceneMediaDir();
  26. // scaled 40
  27. GLFreeForm1->LoadFromFile("polyhedron.3ds");
  28. // scaled 20, position.x = 16
  29. GLFreeForm2->LoadFromFile("polyhedron.3ds");
  30. }
  31. //---------------------------------------------------------------------------
  32. void __fastcall TForm1::GLSceneViewer1MouseDown(TObject *Sender, TMouseButton Button,
  33. TShiftState Shift, int X, int Y)
  34. {
  35. Drag = true;
  36. }
  37. //---------------------------------------------------------------------------
  38. void __fastcall TForm1::GLSceneViewer1MouseUp(TObject *Sender, TMouseButton Button,
  39. TShiftState Shift, int X, int Y)
  40. {
  41. Drag = false;
  42. }
  43. //---------------------------------------------------------------------------
  44. void __fastcall TForm1::GLSceneViewer1MouseMove(TObject *Sender, TShiftState Shift,
  45. int X, int Y)
  46. {
  47. if (Drag)
  48. GLCamera1->MoveAroundTarget(my-Y, mx-X);
  49. mx = X;
  50. my = Y;
  51. }
  52. //---------------------------------------------------------------------------
  53. void __fastcall TForm1::FormMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos,
  54. bool &Handled)
  55. {
  56. GLCamera1->AdjustDistanceToTarget(1.1);
  57. }
  58. //---------------------------------------------------------------------------
  59. void __fastcall TForm1::FormMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos,
  60. bool &Handled)
  61. {
  62. GLCamera1->AdjustDistanceToTarget(1/1.1);
  63. }
  64. //---------------------------------------------------------------------------
  65. void __fastcall TForm1::ButtonClearClick(TObject *Sender)
  66. {
  67. GLFreeForm3->MeshObjects->Clear();
  68. GLFreeForm3->StructureChanged();
  69. GLFreeForm1->Material->PolygonMode = pmFill;
  70. GLFreeForm2->Material->PolygonMode = pmFill;
  71. }
  72. //---------------------------------------------------------------------------
  73. void __fastcall TForm1::Button2Click(TObject *Sender)
  74. {
  75. // Union
  76. TMeshObject *Mesh;
  77. ButtonClearClick(Sender);
  78. if (GLFreeForm3->MeshObjects->Count == 0)
  79. {
  80. //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
  81. Mesh = new (TMeshObject);
  82. Mesh->Mode = momFaceGroups;
  83. GLFreeForm3->MeshObjects->Add(Mesh);
  84. }
  85. CSG_Operation(GLFreeForm1->MeshObjects->Items[0],
  86. GLFreeForm2->MeshObjects->Items[0],
  87. CSG_Union,Mesh,'1','2');
  88. GLFreeForm3->StructureChanged();
  89. GLFreeForm1->Material->PolygonMode = pmLines;
  90. GLFreeForm2->Material->PolygonMode = pmLines;
  91. }
  92. //---------------------------------------------------------------------------
  93. void __fastcall TForm1::Button3Click(TObject *Sender)
  94. {
  95. // Subtract A-B
  96. TMeshObject *Mesh;
  97. ButtonClearClick(Sender);
  98. if (GLFreeForm3->MeshObjects->Count == 0)
  99. {
  100. //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
  101. Mesh = new (TMeshObject);
  102. Mesh->Mode = momFaceGroups;
  103. GLFreeForm3->MeshObjects->Add(Mesh);
  104. }
  105. CSG_Operation(GLFreeForm1->MeshObjects->Items[0],
  106. GLFreeForm2->MeshObjects->Items[0],
  107. CSG_Subtraction,Mesh,'1','2');
  108. GLFreeForm3->StructureChanged();
  109. GLFreeForm1->Material->PolygonMode = pmLines;
  110. GLFreeForm2->Material->PolygonMode = pmLines;
  111. }
  112. //---------------------------------------------------------------------------
  113. void __fastcall TForm1::Button4Click(TObject *Sender)
  114. {
  115. // Subtract B-A
  116. TMeshObject *Mesh;
  117. ButtonClearClick(Sender);
  118. if (GLFreeForm3->MeshObjects->Count == 0)
  119. {
  120. //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
  121. Mesh = new (TMeshObject);
  122. Mesh->Mode = momFaceGroups;
  123. GLFreeForm3->MeshObjects->Add(Mesh);
  124. }
  125. CSG_Operation(GLFreeForm2->MeshObjects->Items[0],
  126. GLFreeForm1->MeshObjects->Items[0],
  127. CSG_Subtraction,Mesh,'1','2');
  128. GLFreeForm3->StructureChanged();
  129. GLFreeForm1->Material->PolygonMode = pmLines;
  130. GLFreeForm2->Material->PolygonMode = pmLines;
  131. }
  132. //---------------------------------------------------------------------------
  133. void __fastcall TForm1::Button5Click(TObject *Sender)
  134. {
  135. // Intersect
  136. TMeshObject *Mesh;
  137. ButtonClearClick(Sender);
  138. if (GLFreeForm3->MeshObjects->Count == 0)
  139. {
  140. //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
  141. Mesh = new (TMeshObject);
  142. Mesh->Mode = momFaceGroups;
  143. GLFreeForm3->MeshObjects->Add(Mesh);
  144. }
  145. CSG_Operation(GLFreeForm1->MeshObjects->Items[0],
  146. GLFreeForm2->MeshObjects->Items[0],
  147. CSG_Intersection,Mesh,'1','2');
  148. GLFreeForm3->StructureChanged();
  149. GLFreeForm1->Material->PolygonMode = pmLines;
  150. GLFreeForm2->Material->PolygonMode = pmLines;
  151. }
  152. //---------------------------------------------------------------------------
  153. void __fastcall TForm1::CheckBox1Click(TObject *Sender)
  154. {
  155. if (CheckBox1->Checked)
  156. {
  157. GLMaterialLibrary1->Materials->Items[0]->Material->PolygonMode = pmFill;
  158. GLMaterialLibrary1->Materials->Items[1]->Material->PolygonMode = pmFill;
  159. }
  160. else
  161. {
  162. GLMaterialLibrary1->Materials->Items[0]->Material->PolygonMode = pmLines;
  163. GLMaterialLibrary1->Materials->Items[1]->Material->PolygonMode = pmLines;
  164. }
  165. GLFreeForm3->StructureChanged();
  166. }
  167. //---------------------------------------------------------------------------