2
0

Unit1.cpp 5.9 KB

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