123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <tchar.h>
- #pragma hdrstop
- #include "Unit1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "GLBaseClasses"
- #pragma link "GLCadencer"
- #pragma link "GLCoordinates"
- #pragma link "GLCrossPlatform"
- #pragma link "GLGeomObjects"
- #pragma link "GLGraph"
- #pragma link "GLObjects"
- #pragma link "GLScene"
- #pragma link "GLWin32Viewer"
- #pragma resource "*.dfm"
- TForm1 *Form1;
- const int SizePos = 10;
- const int ScaleSize = 3;
- const int TrigRect = 10;
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- Randomize;
- BoxScale = XYZVector;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::MakeRandomData()
- {
- int i;
- // Change position.
- if (CheckBox1->Checked)
- BoxPos = AffineVectorMake( Random()*SizePos -SizePos/2,
- Random()*SizePos -SizePos/2,
- Random()*SizePos -SizePos/2 );
- // Change scale.
- if (CheckBox2->Checked)
- BoxScale = AffineVectorMake( Random()*ScaleSize +ScaleSize/2,
- Random()*ScaleSize +ScaleSize/2,
- Random()*ScaleSize +ScaleSize/2 );
- // Change triange.
- if (CheckBox3->Checked)
- for (i = 0; i < 2; i++)
- TriangePos[i] = AffineVectorMake(Random()*TrigRect -TrigRect/2,
- Random()*TrigRect -TrigRect/2,
- Random()*TrigRect -TrigRect/2 );
- // Calc extends.
- MinExtend = VectorSubtract(BoxPos, VectorScale(BoxScale, 0.5));
- MaxExtend = VectorAdd(BoxPos, VectorScale(BoxScale, 0.5));
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::DrawResult()
- {
- int i;
- GLPolygon1->Nodes->Clear();
- GLPolygon1->AddNode(TriangePos[0]);
- GLPolygon1->AddNode(TriangePos[1]);
- GLPolygon1->AddNode(TriangePos[2]);
- GLPoints1->Positions->Clear();
- GLPoints1->Colors->Add(1, 0, 0, 1);
- for (i = 0; i < 2; i++)
- GLPoints1->Positions->Add(TriangePos[i]);
- GLLines2->Nodes->Clear();
- GLLines2->Nodes->AddNode(TriangePos[0]);
- GLLines2->Nodes->AddNode(TriangePos[1]);
- GLLines2->Nodes->AddNode(TriangePos[2]);
- GLLines2->Nodes->AddNode(TriangePos[0]);
- DCCamTarget->Position->SetPoint(BoxPos);
- DCCamTarget->Scale->SetVector(BoxScale);
- GLCube1->Position->SetPoint(BoxPos);
- GLCube1->Scale->SetVector(BoxScale);
- }
- void __fastcall TForm1::Button1Click(TObject *Sender)
- {
- int IterCnt;
- bool Res1;
- IterCnt = 0;
- while (Res1)
- {
- MakeRandomData();
- Res1 = IntersectTriangleBox( TriangePos[0], TriangePos[1], TriangePos[2],
- MinExtend, MaxExtend);
- IterCnt++;
- if (IterCnt >= 10000)
- {
- DrawResult();
- ShowMessage("Intersection not found!");
- exit;
- }
- }
- DrawResult();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Button2Click(TObject *Sender)
- {
- int IterCnt;
- bool Res1;
- IterCnt = 0;
- while (!Res1)
- {
- MakeRandomData();
- Res1 = IntersectTriangleBox(TriangePos[0], TriangePos[1], TriangePos[2],
- MinExtend, MaxExtend);
- IterCnt++;
- if (IterCnt >= 10000)
- {
- DrawResult();
- ShowMessage("Intersection not found!");
- exit;
- }
- }
- DrawResult();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::CheckBox4Click(TObject *Sender)
- {
- GLCube1->Visible = CheckBox4->Checked;
- GLXYZGrid1->Visible = CheckBox6->Checked;
- GLLines1->Visible = CheckBox5->Checked;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::GLCadencerProgress(TObject *Sender, const double deltaTime,
- const double newTime)
- {
- if (Form1->Active)
- Viewer->Invalidate();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::ViewerMouseMove(TObject *Sender, TShiftState Shift, int X,
- int Y)
- {
- if (Shift.Contains(ssLeft))
- GLCamera1->MoveAroundTarget(mdy -Y, mdx -X);
- mdx = X;
- mdy = Y;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta,
- TPoint &MousePos, bool &Handled)
- {
- GLCamera1->AdjustDistanceToTarget(Power(1.02, WheelDelta/120));
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormResize(TObject *Sender)
- {
- GLCamera1->FocalLength = MinInteger(Height, Width) / 10;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormKeyPress(TObject *Sender, System::WideChar &Key)
- {
- if (Key = 0x27)
- Close();
- }
- //---------------------------------------------------------------------------
|