
Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа1 / Lr3 / Unit1
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include"matbase.h"
#include"drawshape1.h"
#include <stdlib.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
Tf1 *f1;
shape *shar[15];
int X1;
int Y1;
void clkoord();
void koordline(int x,int y);
TCheckBox *cb[6];
circle *c1=new class circle(438,300,25,25,clScrollBar);
polygon *p1=new class polygon(385,300,438,210,491,300,clCream);
polygon *p2=new class polygon(385,300,385,500,491,300,clCream);
polygon *p3=new class polygon(385,500,491,300,491,500,clCream);
polygon *p4=new class polygon(491,350,521,400,521,500,clCream);
polygon *p5=new class polygon(521,500,491,450,491,350,clCream);
polygon *p6=new class polygon(385,350,355,400,355,500,clCream);
polygon *p7=new class polygon(355,500,385,450,385,350,clCream);
polygon *p8=new class polygon(385,500,420,575,445,500,clRed);
polygon *p9=new class polygon(420,500,445,600,456,500,clRed);
polygon *p10=new class polygon(445,500,456,575,491,500,clRed);
//TColor k=0x28a6ec;
circle *c2=new class circle(70,70,70,70,clYellow);
circle *c3=new class circle(650,300,70,70,clBlue);
circle *c4=new class circle(625,260,120,25,clGray);
circle *c5=new class circle(625,250,40,15,clAqua);
void check()
{if(cb[0]->Checked!=true)
{ shar[12]=NULL;
}
else
{shar[12]=c1;
}
if(cb[1]->Checked!=true)
{ shar[0]=NULL;
shar[1]=NULL;
}
else
{shar[0]=c2;
shar[1]=c3;
}
if(cb[2]->Checked!=true)
{ shar[2]=NULL;
shar[3]=NULL;
shar[4]=NULL;
}
else
{ shar[2]=p1;
shar[3]=p2;
shar[4]=p3;
}
if(cb[3]->Checked!=true)
{ shar[5]=NULL;
shar[6]=NULL;
shar[7]=NULL;
}
else
{ shar[5]=p8;
shar[6]=p9;
shar[7]=p10;
}
if(cb[5]->Checked!=true)
{ shar[8]=NULL;
shar[9]=NULL;
shar[10]=NULL;
shar[11]=NULL;
}
else
{shar[8]=p4;
shar[9]=p5;
shar[10]=p6;
shar[11]=p7;
}
if(cb[4]->Checked!=true)
{shar[13]=NULL;
shar[14]=NULL;
}
else
{shar[13]=c4;
shar[14]=c5;
}
}
void redraw()
{
if(cb[1]->Checked!=true)
{c2->draw();
c3->draw();
}
if(cb[2]->Checked!=true)
{ p1->draw();
p2->draw();
p3->draw();
}
if(cb[0]->Checked!=true)
{ c1->draw();
}
if(cb[3]->Checked!=true)
{ p8->draw();
p9->draw();
p10->draw();
}
if(cb[4]->Checked!=true)
{c4->draw();
c5->draw();
}
if(cb[5]->Checked!=true)
{p4->draw();
p5->draw();
p6->draw();
p7->draw();
}
}
void circle::draw()
{
f1->im->Canvas->Pen->Color=col;
f1->im->Canvas->Brush->Color=col;
f1->im->Canvas->Ellipse(center.x-radiusx,center.y-radiusy,center.x+radiusx,center.y+radiusy);
}
void polygon::draw()
{ f1->im->Canvas->Pen->Color=c;
f1->im->Canvas->Brush->Color=c;
f1->im->Canvas->Polygon(p,2);
}
void polygon::move()
{for(int i=0;i<3;i++)
{
mat1X3m[0]=p[i].x;
mat1X3m[1]=p[i].y;
movemat();
p[i].x=vect[0];
p[i].y=vect[1];
obn();
}
}
void polygon::rotate(int d)
{
for(int i=0;i<3;i++)
{ if(p[i].x>=X1)
{ mat1X3m[0]=p[i].x-X1;
}
else
{ mat1X3m[0]=-(X1-p[i].x)+1;
}
if(p[i].y>=Y1)
{ mat1X3m[1]=-(p[i].y-Y1)+1;
}
else
{mat1X3m[1]=Y1-p[i].y;
}
rotatemat(d);
p[i].x=X1+vect[0];
p[i].y=Y1-vect[1];
obn();
}
}
void polygon::resize()
{
for(int i=0;i<3;i++)
{ if(p[i].x>=X1)
{ mat1X3m[0]=p[i].x-X1;
}
else
{ mat1X3m[0]=-(X1-p[i].x)+1;
}
if(p[i].y>=Y1)
{ mat1X3m[1]=-(p[i].y-Y1)+1;
}
else
{mat1X3m[1]=Y1-p[i].y;
}
resizemat();
p[i].x=X1+vect[0];
p[i].y=Y1-vect[1];
obn();
}
}
void circle::rotate(int d)
{
if(center.x>=X1)
{ mat1X3m[0]=center.x-X1;
}
else
{ mat1X3m[0]=-(X1-center.x)+1;
}
if(center.y>=Y1)
{ mat1X3m[1]=-(center.y-Y1)+1;
}
else
{mat1X3m[1]=Y1-center.y;
}
rotatemat(d);
center.x=X1+vect[0];
center.y=Y1-vect[1];
obn();
}
void circle::resize()
{ mat1X3m[0]=radiusx;
mat1X3m[1]=radiusy;
resizemat();
radiusx=vect[0];
radiusy=vect[1];
obn();
bool f=true;
for(int i=0;i<6;i++)
{if(cb[i]->Checked==false)
{f=false;
}
}
if(f==true)
{
if(center.y>=Y1)
{ mat1X3m[1]=-(center.y-Y1);
}
else
{mat1X3m[1]=Y1-center.y;
}
if(center.x>=X1)
{ mat1X3m[0]=center.x-X1;
}
else
{ mat1X3m[0]=-(X1-center.x);
}
resizemat();
center.y=Y1-vect[1];
center.x=X1+vect[0];
obn();
}
}
void circle::move()
{
mat1X3m[0]=center.x;
mat1X3m[1]=center.y;
movemat();
center.x=vect[0];
center.y=vect[1];
obn();
}
void clkoord()
{ f1->im->Canvas->Brush->Color=clWhite;
f1->im->Canvas->FloodFill(0,0,clLime,fsBorder);
}
void razmpx(int m,int y)
{ int j=m+50;
for(;j<=f1->im->Width;j=j+50)
{f1->im->Canvas->MoveTo(j,y+3);
f1->im->Canvas->LineTo(j,y-3);
f1->im->Canvas->TextOutA(j,y+4,IntToStr(j-X1));
}
}
void razmpy(int x,int m)
{ int j=m-50;
for(;j>=0;j=j-50)
{f1->im->Canvas->MoveTo(x+3,j);
f1->im->Canvas->LineTo(x-3,j);
f1->im->Canvas->TextOutA(x+4,j,IntToStr(Y1-j));
}
}
void razmmx(int m,int y)
{ int j=m-50;
for(;j>=0;j=j-50)
{f1->im->Canvas->MoveTo(j,y+3);
f1->im->Canvas->LineTo(j,y-3);
f1->im->Canvas->TextOutA(j,y+4,IntToStr(-(X1-j)));
}
}
void razmmy(int x,int m)
{ int j=m+50;
for(;j<=f1->im->Height;j=j+50)
{f1->im->Canvas->MoveTo(x+3,j);
f1->im->Canvas->LineTo(x-3,j);
f1->im->Canvas->TextOutA(x+4,j,IntToStr(-(j-Y1)));
}
}
void koordline(int x,int y)
{f1->im->Canvas->Pen->Color=clBlack;
f1->im->Canvas->Brush->Color=clWhite;
f1->im->Canvas->MoveTo(0,y);
f1->im->Canvas->LineTo(f1->im->Width,y);
f1->im->Canvas->MoveTo(x,0);
f1->im->Canvas->LineTo(x,f1->im->Height);
f1->im->Canvas->Font->Color=clBlack;
f1->im->Canvas->TextOutA(X1+4,Y1+4,"0");
razmpx(x,y);
razmpy(x,y);
razmmx(x,y);
razmmy(x,y);
}
//---------------------------------------------------------------------------
__fastcall Tf1::Tf1(TComponent* Owner)
: TForm(Owner)
{ im->Canvas->Font->Color=clWhite;
X1=im->Width/2.0f;
Y1=im->Height/2.0f;
shar[0]=c2;
shar[1]=c3;
shar[12]=c1;
shar[2]=p1;
shar[3]=p2;
shar[4]=p3;
shar[5]=p4;
shar[6]=p5;
shar[7]=p6;
shar[8]=p7;
shar[9]=p8;
shar[10]=p9;
shar[11]=p10;
shar[13]=c4;
shar[14]=c5;
p1->draw();
p2->draw();
p3->draw();
p4->draw();
p5->draw();
p6->draw();
p7->draw();
p8->draw();
p9->draw();
p10->draw();
c1->draw();
c2->draw();
c3->draw();
c4->draw();
c5->draw();
koordline(X1,Y1);
cb[0]=f1->h1;
cb[1]=f1->h2;
cb[2]=f1->h3;
cb[3]=f1->h4;
cb[4]=f1->h5;
cb[5]=f1->h6;
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn5Click(TObject *Sender)
{
f1->Cursor=crCross;
}
void run()
{ check();
clkoord();
for(int k=0;k<15;k=k+1)
{if(shar[k]!=NULL)
{ shar[k]->move();
shar[k]->draw();
}
}
koordline(X1,Y1);
redraw();
}
void runsize()
{ check();
clkoord();
for(int k=0;k<15;k=k+1)
{if(shar[k]!=NULL)
{ shar[k]->resize();
shar[k]->draw();
}
}
koordline(X1,Y1);
redraw();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::imMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(f1->Cursor==crCross)
{ X1=X;
Y1=Y;
if(X>=438)
{edcx->Text=IntToStr(X-438);
}
else
{edcx->Text=IntToStr(-(438-X));
}
if(Y>=370)
{edcy->Text=IntToStr(370-Y);
}
else
{edcy->Text=IntToStr(-(Y-370));
}
clkoord();
for(int k=0;k<15;k=k+1)
{if(shar[k]!=NULL)
{ shar[k]->draw();
}
}
redraw() ;
koordline(X,Y);
}
f1->Cursor=crDefault;
}
//---------------------------------------------------------------------------
void __fastcall Tf1::imMouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{ if(X>=X1)
{Edit1->Text=IntToStr(X-X1);
}
else
{Edit1->Text=IntToStr(-(X1-X));
}
if(Y>=Y1)
{Edit2->Text=IntToStr(Y1-Y);
}
else
{Edit2->Text=IntToStr(-(Y-Y1));
}
}
//---------------------------------------------------------------------------
void __fastcall Tf1::imDblClick(TObject *Sender)
{ if(MessageDlg("Перенести центр координат в центр холста?",mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes)
{
X1=im->Width/2;
Y1=im->Height/2;
edcx->Text="0";
edcy->Text="0";
clkoord();
for(int k=0;k<15;k=k+1)
{if(shar[k]!=NULL)
{ shar[k]->draw();
}
}
}
redraw();
koordline(X1,Y1);
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn2Click(TObject *Sender)
{ mat3X3m[0][2]=0;
mat3X3m[1][2]=(double)(0.0f-StrToInt(f1->yed->Text));
run();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn8Click(TObject *Sender)
{ mat3X3m[1][2]=(double)(StrToInt(f1->yed->Text));
mat3X3m[0][2]=0;
run();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn4Click(TObject *Sender)
{ mat3X3m[0][2]=(double)(0.0f-StrToInt(f1->xed->Text));
mat3X3m[1][2]=0;
run();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn6Click(TObject *Sender)
{ mat3X3m[0][2]=(double)(StrToInt(f1->xed->Text));
mat3X3m[1][2]=0;
run();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn7Click(TObject *Sender)
{ mat3X3mh[0][0]=(double)(StrToInt(f1->masx->Text)+100)/100.0f;
mat3X3mh[1][1]=(double)(StrToInt(f1->masy->Text)+100)/100.0f;
runsize();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::xedChange(TObject *Sender)
{
if(xed->Value<0)
{xed->Value=0;}
}
//---------------------------------------------------------------------------
void __fastcall Tf1::yedChange(TObject *Sender)
{ if(yed->Value<0)
{yed->Value=0;}
}
//---------------------------------------------------------------------------
void __fastcall Tf1::masxChange(TObject *Sender)
{ if(masx->Value<0)
{masx->Value=0;}
}
//---------------------------------------------------------------------------
void __fastcall Tf1::masyChange(TObject *Sender)
{
if(masy->Value<0)
{masy->Value=0;}
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn9Click(TObject *Sender)
{
double mx=(double)StrToInt(f1->masx->Text) ;
double my=(double)StrToInt(f1->masy->Text) ;
{if((mx!=0)||(my!=0))
{ if(mx==0)
{ mat3X3mh[0][0]=1;
mat3X3mh[1][1]=1-my/100.0f;
}
else
{
if(my==0)
{ mat3X3mh[1][1]=1;
mat3X3mh[0][0]=1-mx/100.0f;
}
else
{
mat3X3mh[0][0]=1-mx/100.0f;
mat3X3mh[1][1]=1-my/100.0f;
}
}
}
}
runsize();
}
void runrotate(int d)
{ check();
if(d!=0)
{clkoord();
for(int k=0;k<15;k=k+1)
{if(shar[k]!=NULL)
{ shar[k]->rotate(d);
shar[k]->draw();
}
}
koordline(X1,Y1);
}
redraw();
}
//---------------------------------------------------------------------------
void __fastcall Tf1::arcedChange(TObject *Sender)
{ if(arced->Value<0)
{arced->Value=0;}
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn3Click(TObject *Sender)
{
int y=StrToInt(arced->Text);
runrotate(-y);
}
//---------------------------------------------------------------------------
void __fastcall Tf1::BitBtn1Click(TObject *Sender)
{
int y=StrToInt(arced->Text);
runrotate(y);
}
//---------------------------------------------------------------------------
Соседние файлы в папке Lr3