123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include "fCsgC.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLS.BaseClasses"
- #pragma link "GLS.Coordinates"
- #pragma link "GLS.Material"
- #pragma link "GLS.Objects"
- #pragma link "GLS.Scene"
- #pragma link "GLS.VectorFileObjects"
- #pragma link "GLS.SceneViewer"
- #pragma link "GLS.File3DS"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- SetGLSceneMediaDir();
- // scaled 40
- GLFreeForm1->LoadFromFile("polyhedron.3ds");
- // scaled 20, position.x = 16
- GLFreeForm2->LoadFromFile("polyhedron.3ds");
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewer1MouseDown(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- Drag = true;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewer1MouseUp(TObject *Sender, TMouseButton Button,
- TShiftState Shift, int X, int Y)
- {
- Drag = false;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLSceneViewer1MouseMove(TObject *Sender, TShiftState Shift,
- int X, int Y)
- {
- if (Drag)
- GLCamera1->MoveAroundTarget(my-Y, mx-X);
- mx = X;
- my = Y;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos,
- bool &Handled)
- {
- GLCamera1->AdjustDistanceToTarget(1.1);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos,
- bool &Handled)
- {
- GLCamera1->AdjustDistanceToTarget(1/1.1);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::ButtonClearClick(TObject *Sender)
- {
- GLFreeForm3->MeshObjects->Clear();
- GLFreeForm3->StructureChanged();
- GLFreeForm1->Material->PolygonMode = pmFill;
- GLFreeForm2->Material->PolygonMode = pmFill;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button2Click(TObject *Sender)
- {
- // Union
- TMeshObject *Mesh;
- ButtonClearClick(Sender);
- if (GLFreeForm3->MeshObjects->Count == 0)
- {
- //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
- Mesh = new (TMeshObject);
- Mesh->Mode = momFaceGroups;
- GLFreeForm3->MeshObjects->Add(Mesh);
- }
- CSG_Operation(GLFreeForm1->MeshObjects->Items[0],
- GLFreeForm2->MeshObjects->Items[0],
- CSG_Union,Mesh,'1','2');
- GLFreeForm3->StructureChanged();
- GLFreeForm1->Material->PolygonMode = pmLines;
- GLFreeForm2->Material->PolygonMode = pmLines;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button3Click(TObject *Sender)
- {
- // Subtract A-B
- TMeshObject *Mesh;
- ButtonClearClick(Sender);
- if (GLFreeForm3->MeshObjects->Count == 0)
- {
- //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
- Mesh = new (TMeshObject);
- Mesh->Mode = momFaceGroups;
- GLFreeForm3->MeshObjects->Add(Mesh);
- }
- CSG_Operation(GLFreeForm1->MeshObjects->Items[0],
- GLFreeForm2->MeshObjects->Items[0],
- CSG_Subtraction,Mesh,'1','2');
- GLFreeForm3->StructureChanged();
- GLFreeForm1->Material->PolygonMode = pmLines;
- GLFreeForm2->Material->PolygonMode = pmLines;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button4Click(TObject *Sender)
- {
- // Subtract B-A
- TMeshObject *Mesh;
- ButtonClearClick(Sender);
- if (GLFreeForm3->MeshObjects->Count == 0)
- {
- //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
- Mesh = new (TMeshObject);
- Mesh->Mode = momFaceGroups;
- GLFreeForm3->MeshObjects->Add(Mesh);
- }
- CSG_Operation(GLFreeForm2->MeshObjects->Items[0],
- GLFreeForm1->MeshObjects->Items[0],
- CSG_Subtraction,Mesh,'1','2');
- GLFreeForm3->StructureChanged();
- GLFreeForm1->Material->PolygonMode = pmLines;
- GLFreeForm2->Material->PolygonMode = pmLines;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button5Click(TObject *Sender)
- {
- // Intersect
- TMeshObject *Mesh;
- ButtonClearClick(Sender);
- if (GLFreeForm3->MeshObjects->Count == 0)
- {
- //Delphi: TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
- Mesh = new (TMeshObject);
- Mesh->Mode = momFaceGroups;
- GLFreeForm3->MeshObjects->Add(Mesh);
- }
- CSG_Operation(GLFreeForm1->MeshObjects->Items[0],
- GLFreeForm2->MeshObjects->Items[0],
- CSG_Intersection,Mesh,'1','2');
- GLFreeForm3->StructureChanged();
- GLFreeForm1->Material->PolygonMode = pmLines;
- GLFreeForm2->Material->PolygonMode = pmLines;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::CheckBox1Click(TObject *Sender)
- {
- if (CheckBox1->Checked)
- {
- GLMaterialLibrary1->Materials->Items[0]->Material->PolygonMode = pmFill;
- GLMaterialLibrary1->Materials->Items[1]->Material->PolygonMode = pmFill;
- }
- else
- {
- GLMaterialLibrary1->Materials->Items[0]->Material->PolygonMode = pmLines;
- GLMaterialLibrary1->Materials->Items[1]->Material->PolygonMode = pmLines;
- }
- GLFreeForm3->StructureChanged();
- }
- //---------------------------------------------------------------------------
|