/
SergeyGerasimov
/
VRLabs
Обзор
Документация
Войти
/
SergeyGerasimov
/
VRLabs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab1_BaseObjects/fcBaseObjects.cpp
169 строк
6 KB
SergeyGerasimov
Загрузка всех лабораторных работ
01 май 2026, 15:32
01 май 2026, 15:32
83d1a16
Код
Авторство
О чём код?
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "fcBaseObjects.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "GLS.BaseClasses" #pragma link "GLS.Blur" #pragma link "GLS.Coordinates" #pragma link "GLS.GeomObjects" #pragma link "GLS.HUDObjects" #pragma link "GLS.Mirror" #pragma link "GLS.Objects" #pragma link "GLS.Scene" #pragma link "GLS.SceneViewer" #pragma link "GLS.LensFlare" #pragma link "GLS.ParticleFX" #pragma link "GLS.SimpleNavigation" #pragma link "GLS.Material" #pragma resource "*.dfm" TFormBaseObjects *FormBaseObjects; //--------------------------------------------------------------------------- __fastcall TFormBaseObjects::TFormBaseObjects(TComponent* Owner) : TForm(Owner) { } void __fastcall TFormBaseObjects::Button1Click(TObject *Sender) { if (ColorDialog1->Execute()) { TGLPolygon* Face = Pentagon0; Face->Material->MaterialLibrary = GLMaterialLibrary1; TGLLibMaterial* mat = GLMaterialLibrary1->Materials->Add(); mat->Name = "Polygon1Mat"; mat->Material->FrontProperties->Diffuse->AsWinColor = ColorDialog1->Color; Face->Material->LibMaterialName = "Polygon1Mat"; GLSceneViewer1->Refresh(); } } //--------------------------------------------------------------------------- void __fastcall TFormBaseObjects::FormCreate(TObject *Sender) { Containers[0] = dcPolyTet; Containers[1] = dcPolyHex; Containers[2] = dcPolyOct; Containers[3] = dcPolyDod; Containers[4] = dcPolyIco; FaceCounts[0] = 4; FaceCounts[1] = 6; FaceCounts[2] = 8; FaceCounts[3] = 12; FaceCounts[4] = 20; TColor TetraStartColors[4] = {clRed, clLime, clBlue, clYellow}; TColor HexaStartColors[6] = {clRed, clLime, clBlue, clYellow, clFuchsia, clAqua}; TColor OctaStartColors[8] = {clRed, clLime, clBlue, clYellow, clFuchsia, clAqua, clMaroon, clOlive}; TColor DodecaStartColors[12] = {clRed, clLime, clBlue, clYellow, clFuchsia, clAqua, clMaroon, clOlive, clNavy, clPurple, clTeal, clSilver}; TColor IcosaStartColors[20] = {clRed, clLime, clBlue, clYellow, clFuchsia, clAqua, clMaroon, clOlive, clNavy, clPurple, clTeal, clSilver, clGray, clMoneyGreen, clSkyBlue, clCream, clMedGray, clWebRosyBrown, clWebOrange, clWebOrchid}; for (int i = 0; i < 5; i++) { Containers[i]->Visible = (i == 0); } currentFigure = 0; for (int fig = 0; fig < 5; fig++) { int faceCount = FaceCounts[fig]; for (int f = 0; f < faceCount; f++) { String matName = "Fig" + IntToStr(fig) + "_Face" + IntToStr(f); TGLLibMaterial* mat = GLMaterialLibrary1->Materials->Add(); mat->Name = matName; TColor startColor; String polyName; switch (fig) { case 0: polyName = "TetTriangle" + IntToStr(f); startColor = TetraStartColors[f]; break; case 1: polyName = "Quadrangle" + IntToStr(f); startColor = HexaStartColors[f]; break; case 2: polyName = "OctTriangle" + IntToStr(f); startColor = OctaStartColors[f]; break; case 3: polyName = "Pentagon" + IntToStr(f); startColor = DodecaStartColors[f]; break; case 4: polyName = "IcoTriangle" + IntToStr(f); startColor = IcosaStartColors[f]; break; } mat->Material->FrontProperties->Diffuse->AsWinColor = startColor; TGLPolygon* poly = dynamic_cast<TGLPolygon*>(FindComponent(polyName)); if (poly) { poly->Material->MaterialLibrary = GLMaterialLibrary1; poly->Material->LibMaterialName = matName; } switch (fig) { case 0: TetraMaterials[f] = mat; break; case 1: CubeMaterials[f] = mat; break; case 2: OctaMaterials[f] = mat; break; case 3: DodecaMaterials[f] = mat; break; case 4: IcosaMaterials[f] = mat; break; } } } UpdateFaceList(0); } //--------------------------------------------------------------------------- void __fastcall TFormBaseObjects::UpdateFaceList(int figureIndex) { ComboBox1->Items->Clear(); for (int i = 1; i <= FaceCounts[figureIndex]; i++) { ComboBox1->Items->Add(IntToStr(i)); } ComboBox1->ItemIndex = 0; } void __fastcall TFormBaseObjects::ChangeFaceColor(int figureIndex, int faceIndex, TColor color) { switch (figureIndex) { case 0: TetraMaterials[faceIndex]->Material->FrontProperties->Diffuse->AsWinColor = color; break; case 1: CubeMaterials[faceIndex]->Material->FrontProperties->Diffuse->AsWinColor = color; break; case 2: OctaMaterials[faceIndex]->Material->FrontProperties->Diffuse->AsWinColor = color; break; case 3: DodecaMaterials[faceIndex]->Material->FrontProperties->Diffuse->AsWinColor = color; break; case 4: IcosaMaterials[faceIndex]->Material->FrontProperties->Diffuse->AsWinColor = color; break; } } void __fastcall TFormBaseObjects::ComboBox1Change(TObject *Sender) { if (ColorDialog1->Execute()) { int faceIndex = ComboBox1->ItemIndex; ChangeFaceColor(currentFigure, faceIndex, ColorDialog1->Color); GLSceneViewer1->Refresh(); } } //--------------------------------------------------------------------------- void __fastcall TFormBaseObjects::RadioGroup1Click(TObject *Sender) { int fig = RadioGroup1->ItemIndex; if (fig == currentFigure) return; for (int i = 0; i < 5; i++) { Containers[i]->Visible = (i == fig); } currentFigure = fig; UpdateFaceList(fig); } //---------------------------------------------------------------------------