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

Лабы / Тельминов / набор_1 / LAB4 / 4 / V2 / UnitMain

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

#include <vcl.h>
#pragma hdrstop

#include "UnitMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	Image->Canvas->Draw(0,0,NULL);
	for(int i=0;i<maxc;i++)
  	p[i]=NULL;

	p[0] = new CComplex(Image, 0, 0,1,0);
	p[1] = new CComplex(Image, 20, 20,1,3.14/2);
	p[2] = new CComplex(Image, 40, 40,2,3.14/2);
  *p[2] = *p[0] = *p[1] / *p[2];

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
	for(int i=0;i<maxc;i++)
  	if(p[i])
    {
    	delete p[i];
      p[i]=NULL;
    }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ReDrawAll()
{
  for(int i=0; i<maxc; i++)
  	if(p[i])
    	p[i]->Draw();
}

void __fastcall TForm1::ImageMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //add object
	if (SpeedBtn1->Down)
	{
  	for(int i=0;i<maxc;i++)
			if(p[i]==NULL)
		  {

	    	for(int j=0;j<maxc;j++)
					if(p[j]!=NULL && i!=j)
  			  	if(p[j]->IsSelected(X,Y))
    			  	return;

        if(RadioButton1->Checked)
		    	p[i]=new CComplex(X, Y,Image,StrToFloat(Edit1->Text),StrToFloat(Edit2->Text));
        if(RadioButton2->Checked)
		    	p[i]=new CComplex(Image, X, Y,StrToFloat(Edit1->Text),StrToFloat(Edit2->Text));
        break;
  	  }
    ReDrawAll();
  	return;
  }

  //delete object
	if(SpeedBtn2->Down)
	{
  	for(int i=0; i<maxc; i++)
			if(p[i])
      	if(p[i]->IsSelected(X,Y))
  			{
        	delete p[i];
          p[i]=NULL;
          break;
        }
    ReDrawAll();
		return;
  }

  //Rotate
	if(SpeedButton1->Down)
  {
  	for(int i=0; i<maxc; i++)
			if(p[i])
      	if(p[i]->IsSelected(X,Y))
          p[i]->Rotate(StrToFloat(Edit3->Text));

    ReDrawAll();
		return;
  }

  //perform operations
  if(GroupBox4->Visible)
  {
  	for(int j=0; j<maxc; j++)
			if(p[j])
        if(p[j]->IsSelected(X,Y))
        {
          int i;
          CComplex *p1=NULL,*p2=NULL,*p3=NULL;
        	for(i=0; i<maxc; i++)
	      		if(p[i])
            	if(p[i]->Marked())
                {p1 = p[i];break;}
         	for(i++;i<maxc; i++)
    	  		if(p[i])
            	if(p[i]->Marked())
                {p2 = p[i];break;}
        	for(i++;i<maxc; i++)
	      		if(p[i])
            	if(p[i]->Marked())
                {p3 = p[i];break;}
          if(p1 && p2 && (!p3))
          {
            if(SpeedButton3->Down)
              *p[j] = *p1 + *p2;
            if(SpeedButton4->Down)
              *p[j] = *p1 - *p2;
            if(SpeedButton5->Down)
              *p[j] = *p1 * *p2;
            if(SpeedButton6->Down)
              *p[j] = *p1 / *p2;
          }
          break;
        }

  }

  //Save
  if(SpeedButton7->Down || SpeedButton8->Down)
  {
  	for(int j=0; j<maxc; j++)
			if(p[j])
        if(p[j]->IsSelected(X,Y))
        {
          if(SpeedButton7->Down)
          {
            ofstream oFile;
            oFile.open("z");
            if(!oFile) ShowMessage("Сохранение: ошибка");
            else
              oFile<<*p[j];
            oFile.close();
          }
          if(SpeedButton8->Down)
          {
            ifstream iFile;
            iFile.open("z");
            if(!iFile) ShowMessage("Загрузка: ошибка");
            else
              iFile>>*p[j];
            iFile.close();
          }
          break;
        }
  }

  //select
  if(!Shift.Contains(ssShift))
  {
	  for(int i=0; i<maxc; i++)
  		if(p[i])
      	p[i]->Mark(false);
  }
  for(int i=0; i<maxc; i++)
  	if(p[i])
    	if(p[i]->IsSelected(X,Y))
      	p[i]->Mark(true);

  //Angle
  {
    int i;
    CComplex *p1=NULL,*p2=NULL,*p3=NULL;
  	for(i=0; i<maxc; i++)
			if(p[i])
      	if(p[i]->Marked())
          {p1 = p[i];break;}
  	for(i++;i<maxc; i++)
			if(p[i])
      	if(p[i]->Marked())
          {p2 = p[i];break;}
  	for(i++;i<maxc; i++)
			if(p[i])
      	if(p[i]->Marked())
          {p3 = p[i];break;}
    if(p1 && p2 && (!p3))
      Edit4->Text = FloatToStr(p1->Angle(*p2));
    else
      Edit4->Text = "Выделите два вектора";
  }



}
void __fastcall TForm1::SpeedBtn1Click(TObject *Sender)
{
  GroupBox1->Visible = SpeedBtn1->Down;
  GroupBox2->Visible = SpeedButton1->Down;
  GroupBox3->Visible = SpeedButton2->Down;
  GroupBox4->Visible = SpeedButton3->Down ||
                       SpeedButton4->Down ||
                       SpeedButton5->Down ||
                       SpeedButton6->Down;
}
//---------------------------------------------------------------------------



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