Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
02.05.2014
Размер:
12.38 Кб
Скачать
//---------------------------------------------------------------------------
#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
  • #
    02.05.20144.87 Кб37Project1.bpr
  • #
    02.05.20141.06 Кб38Project1.cpp
  • #
    02.05.20143.93 Кб36Project1.dsk
  • #
    02.05.201417.75 Кб36Project1.obj
  • #
    02.05.2014876 б36Project1.res
  • #
    02.05.201412.38 Кб39Unit1.cpp
  • #
    02.05.201451 б36Unit1.ddp
  • #
    02.05.201430.06 Кб36Unit1.dfm
  • #
    02.05.20143 Кб36Unit1.h
  • #
    02.05.2014136.24 Кб36Unit1.obj