Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / С++Builder / Laba3 / Task3 / Unit1

.cpp
Скачиваний:
13
Добавлен:
17.04.2013
Размер:
2.69 Кб
Скачать
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Spline.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
CPoint *P0,*P1,*P2;
BSpline *bspl;
bool moving=false,pp0=false,pp1=false,pp2=false,selected=false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
P0=new CPoint(Image1->Canvas, 100, 200);
P1=new CPoint(Image1->Canvas, 300, 100);
P2=new CPoint(Image1->Canvas, 600, 300);
bspl=new BSpline(Image1->Canvas);
bspl->Draw(TPoint(P0->GetX(),P0->GetY()),TPoint(P1->GetX(),P1->GetY()),TPoint(P2->GetX(),P2->GetY()));
}
//---------------------------------------------------------------------------



//B=(0.5-t+0.5*t*t)*P0.x+(0.5+t-t*t)*P1.x+0.5*t*t*P2.x

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
moving=true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
moving=false;
selected=false;
pp0=false;
pp1=false;
pp2=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if (moving)
        {
        if (!selected)
                {
                if (pp0||sqrt((P0->GetX()-X)*(P0->GetX()-X)+(P0->GetY()-Y)*(P0->GetY()-Y))<=10) {pp0=true;selected=true;goto ex;}
                if (pp1||sqrt((P1->GetX()-X)*(P1->GetX()-X)+(P1->GetY()-Y)*(P1->GetY()-Y))<=10) {pp1=true;selected=true;goto ex;}
                if (pp2||sqrt((P2->GetX()-X)*(P2->GetX()-X)+(P2->GetY()-Y)*(P2->GetY()-Y))<=10) {pp2=true;selected=true;goto ex;}
                }
        ex:
        if (selected)
                {
                if (pp0) {P0->MoveTo(X,Y);P1->MoveTo(P1->GetX(),P1->GetY());P2->MoveTo(P2->GetX(),P2->GetY());}
                if (pp1) {P1->MoveTo(X,Y);P0->MoveTo(P0->GetX(),P0->GetY());P2->MoveTo(P2->GetX(),P2->GetY());}
                if (pp2) {P2->MoveTo(X,Y);P0->MoveTo(P0->GetX(),P0->GetY());P1->MoveTo(P1->GetX(),P1->GetY());}
                }
        if (pp0||pp1||pp2) bspl->Draw(TPoint(P0->GetX(),P0->GetY()),TPoint(P1->GetX(),P1->GetY()),TPoint(P2->GetX(),P2->GetY()));
        }
}
//---------------------------------------------------------------------------

Соседние файлы в папке Task3