Builder. Canvas
ճ
1
: : Unit1.cpp Ris.cpp, Project1.bpr Malunok. bpr.
Panel ( Standard) Edit ( Standard), Button ( Standard), SpeedButton ( Additional) Label ( Standard).
. 1:
. 1.
:
Name | |||
Form1 | MainForm | Caption | 3D Rotation |
Height | |||
Width | |||
KeyPreview | true | ||
Panel1 | Panel1 | Caption | |
Align | alLeft | ||
Width | |||
Button1 | Button1 | Caption | DRAW |
SpeedButton1 | SBxccw | Caption | < |
SpeedButton2 | SBxcw | Caption | > |
SpeedButton3 | SByccw | Caption | < |
SpeedButton4 | SBycw | Caption | > |
SpeedButton5 | SBzcw | Caption | < |
SpeedButton6 | SBzcw | Caption | > |
Label1 | Label1 | Caption | Size: |
Label2 | Label2 | Caption | X: |
Label3 | Label3 | Caption | Y: |
Label4 | Label4 | Caption | Z: |
Edit1 | edSize | Text |
. . 2:
. 2.
Ris.h , , : //---------------------------------------------------------
const float cw = 1 * 3.1415926535 / 180;
const float ccw = -cw;
struct tpointr { float x, y, z; };
class TMainForm: public TForm
{
__published: // IDE-managed Components
private: // User declarations
void __fastcall myline(float x1, float y1, float z1, float x2, float y2, float z2);
void __fastcall Draw_Cube(void);
void __fastcall Rotate(float rad,AnsiString coord);
tpointr box[9];
public: // User declarations
__fastcall TMainForm(TComponent* Owner);
};
//--------------------------------------------------------
Ris.cpp #include <math.h> : //----------------------------------------------------------
void __fastcall TMainForm::myline(float x1, float y1, float z1, float x2, float y2, float z2)
{
Canvas->MoveTo(floor(x1) + ClientWidth / 2 + Panel1->Width / 2, floor(y1) + ClientHeight / 2);
Canvas->LineTo(floor(x2) + ClientWidth / 2 + Panel1->Width / 2, floor(y2) + ClientHeight / 2);
}
//----------------------------------------------------------
void __fastcall TMainForm::Draw_Cube(void)
{
int i, j=3;
for (i=0; i<4; i++)
{
myline(box[j].x, box[j].y, box[j].z, box[i].x, box[i].y, box[i].z);
myline(box[j+4].x, box[j+4].y, box[j+4].z, box[i+4].x, box[i+4].y, box[i+4].z);
myline(box[i].x, box[i].y, box[i].z, box[i+4].x, box[i+4].y, box[i+4].z);
|
|
j=i;
}
myline(box[0].x, box[0].y, box[0].z, box[5].x, box[5].y, box[5].z);
myline(box[1].x, box[1].y, box[1].z, box[4].x, box[4].y, box[4].z);
}
//----------------------------------------------------------
void __fastcall TMainForm::Rotate(float rad,AnsiString coord)
{
Canvas->Pen->Color=clBtnFace;
Draw_Cube();
for (int i=0; i<9; i++)
{
if (coord == "x")
{
box[i].y = box[i].y * cos(rad) + box[i].z * sin(rad);
box[i].z = -box[i].y * sin(rad) + box[i].z * cos(rad);
}
if (coord == "y")
{
box[i].x = box[i].x * cos(rad) + box[i].z * sin(rad);
box[i].z = -box[i].x * sin(rad) + box[i].z * cos(rad);
}
if (coord == "z")
{
box[i].x = box[i].x * cos(rad) + box[i].y * sin(rad);
box[i].y = -box[i].x * sin(rad) + box[i].y * cos(rad);
}
}
Canvas->Pen->Color=clRed;
Draw_Cube();
}
//----------------------------------------------------------
Button1 䳿 OnClick: //--------------------------------------------------------
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
int size;
size = StrToInt(edSize->Text);
Canvas->Pen->Color=clBtnFace;
Draw_Cube();
box[0].x = -size; box[0].y = -size; box[0].z = -size;
box[1].x = size; box[1].y = -size; box[1].z = -size;
box[2].x = size; box[2].y = size; box[2].z = -size;
box[3].x = -size; box[3].y = size; box[3].z = -size;
box[4].x = -size; box[4].y = -size; box[4].z = size;
box[5].x = size; box[5].y = -size; box[5].z = size;
box[6].x = size; box[6].y = size; box[6].z = size;
box[7].x = -size; box[7].y = size; box[7].z = size;
Canvas->Pen->Color=clRed;
Draw_Cube();
}
//---------------------------------------------------------
SBxccw 䳿 OnClick: //---------------------------------------------------------
void __fastcall TMainForm::SBxccwClick(TObject *Sender)
{
Rotate(ccw, "x");
}
//---------------------------------------------------------
SBxcw 䳿 OnClick: //--------------------------------------------------------
void __fastcall TMainForm::SBxcwClick(TObject *Sender)
{
Rotate(cw, "x");
}
//--------------------------------------------------------
SByccw 䳿 OnClick: //--------------------------------------------------------
void __fastcall TMainForm::SByccwClick(TObject *Sender)
{
Rotate(ccw, "y");
}
//--------------------------------------------------------
SBycw 䳿 OnClick: //--------------------------------------------------------
void __fastcall TMainForm::SBycwClick(TObject *Sender)
{
Rotate(cw, "y");
}
//--------------------------------------------------------
SBzccw 䳿 OnClick: //--------------------------------------------------------
void __fastcall TMainForm::SBzccwClick(TObject *Sender)
{
Rotate(ccw, "z");
}
//---------------------------------------------------------
SBzcw 䳿 OnClick: //---------------------------------------------------------
|
|
void __fastcall TMainForm::SBzcwClick(TObject *Sender)
{
Rotate(cw, "z");
}
//---------------------------------------------------------
MainForm 䳿 OnKeyDown: //-----------------------------------------------------
void __fastcall TMainForm::FormKeyDown (TObject *Sender, WORD &Key, TShiftState Shift)
{
switch (Key){
case VK_NUMPAD1:
Rotate(ccw, "z");
SBzccw->GroupIndex=666;
SBzccw->Down=true; break;
case VK_NUMPAD2:
Rotate(cw, "z");
SBzcw->GroupIndex=666;
SBzcw->Down=true; break;
case VK_NUMPAD4:
Rotate(ccw, "y");
SByccw->GroupIndex=666;
SByccw->Down=true; break;
case VK_NUMPAD5:
Rotate(cw, "y");
SBycw->GroupIndex=666;
SBycw->Down=true; break;
case VK_NUMPAD7:
Rotate(ccw, "x");
SBxccw->GroupIndex=666;
SBxccw->Down=true; break;
case VK_NUMPAD8:
Rotate(cw, "x");
SBxcw->GroupIndex=666;
SBxcw->Down=true; break;
}
}
//--------------------------------------------------
MainForm 䳿 OnKeyUp: //--------------------------------------------------
void __fastcall TMainForm::FormKeyUp (TObject *Sender, WORD &Key, TShiftState Shift)
{
SBxccw->GroupIndex=0;
SBxcw->GroupIndex=0;
SByccw->GroupIndex=0;
SBycw->GroupIndex=0;
SBzccw->GroupIndex=0;
SBzcw->GroupIndex=0;
SBxccw->Down=false;
SBxcw->Down=false;
SByccw->Down=false;
SBycw->Down=false;
SBzccw->Down=false;
SBzcw->Down=false;
}
//--------------------------------------------------
.
. ³ . 3:
. 3.