Поиск по базе сайта:
Пояснительная записка к дипломной работе на тему icon

Пояснительная записка к дипломной работе на тему




НазваПояснительная записка к дипломной работе на тему
Сторінка17/21
Дата конвертації08.07.2013
Розмір1.22 Mb.
ТипПояснительная записка
1   ...   13   14   15   16   17   18   19   20   21
^

ПРИЛОЖЕНИЕ 3

ТЕКСТ ПРОГРАММЫ




П.3.1. Текст модуля lineseg.h


//---------------------------------------------------------------------------


#ifndef LineSegH

#define LineSegH

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

class TfrmLineSeg : public TForm

{

__published: // IDE-managed Components

TStatusBar *sb1;

TPanel *Panel1;

TScrollBox *scb1;

TImage *Image1;

TImage *Image2;

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N3;

TMenuItem *N5;

TMenuItem *N4;

TMenuItem *N2;

TMenuItem *N6;

TMenuItem *N10;

TMenuItem *N11;

TMenuItem *N12;

TMenuItem *N1001;

TMenuItem *N10x1;

TMenuItem *N9;

TActionList *ActionList1;

TAction *actExit;

TAction *actOpenFile;

TAction *actSaveFile;

TAction *actNewFile;

TAction *actZoomIn;

TAction *actZoomOut;

TAction *actZoom1;

TAction *actZoom10;

TAction *actAnalyze;

TAction *actGridCheck;

TAction *actLightCheck;

TOpenDialog *OpenDialog1;

TSaveDialog *SaveDialog1;

TImageList *ImageList1;

TCoolBar *CoolBar1;

TToolBar *ToolBar1;

TToolBar *ToolBar2;

TToolBar *ToolBar3;

TToolButton *ToolButton1;

TToolButton *ToolButton2;

TToolButton *ToolButton3;

TToolButton *ToolButton4;

TToolButton *ToolButton5;

TToolButton *ToolButton6;

TToolButton *ToolButton7;

TToolButton *ToolButton8;

TToolButton *ToolButton13;

TToolButton *ToolButton14;

TAction *actLineLightCheck;

TToolButton *ToolButton11;

TToolButton *ToolButton10;

TAction *actSegLightCheck;

TSplitter *Splitter1;

TPanel *Panel2;

TMemo *MemoLog;

TMemo *MemoOut;

TSplitter *Splitter2;

TToolButton *ToolButton12;

TAction *actLockView;

TToolButton *ToolButton16;

TMenuItem *N8;

TMenuItem *N16;

TMenuItem *N17;

TMenuItem *N18;

TToolButton *ToolButton17;

TAction *actAnalyzeNode;

TAction *actAnalyzeSeg;

TToolButton *ToolButton9;

TAction *actMatchLines;

TToolButton *ToolButton18;

TToolButton *ToolButton20;

TAction *actZoomWnd;

TMenuItem *N19;

TToolButton *ToolButton21;

TAction *actMatchOut;

TMenuItem *N7;

TMenuItem *N22;

TAction *actOpenArray;

TAction *actSaveArray;

TMenuItem *N23;

TMenuItem *N24;

TToolButton *ToolButton22;

TToolButton *ToolButton23;

TMemo *mArray;

TAction *actOptions;

TMenuItem *N13;

TToolButton *ToolButton15;

TToolButton *ToolButton19;

TLabel *Label1;

TLabel *Label2;

TToolButton *ToolButton24;

TMenuItem *N14;

TAction *actSaveCode;

TMenuItem *N20;

TToolButton *ToolButton25;

TToolButton *ToolButton26;

TToolButton *ToolButton27;

TAction *actSegCodeOut;

TMenuItem *N15;

void __fastcall actExitExecute(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall actZoomInExecute(TObject *Sender);

void __fastcall actZoomOutExecute(TObject *Sender);

void __fastcall actOpenFileExecute(TObject *Sender);

void __fastcall actSaveFileExecute(TObject *Sender);

void __fastcall Image2MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y);

void __fastcall Image2MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall actZoom1Execute(TObject *Sender);

void __fastcall actAnalyzeExecute(TObject *Sender);

void __fastcall FormCanResize(TObject *Sender, int &NewWidth,

int &NewHeight, bool &Resize);

void __fastcall actNewFileExecute(TObject *Sender);

void __fastcall actGridCheckExecute(TObject *Sender);

void __fastcall actLightCheckExecute(TObject *Sender);

void __fastcall actZoom10Execute(TObject *Sender);

void __fastcall actLineLightCheckExecute(TObject *Sender);

void __fastcall actSegLightCheckExecute(TObject *Sender);

void __fastcall actLockViewExecute(TObject *Sender);

void __fastcall actAnalyzeNodeExecute(TObject *Sender);

void __fastcall actAnalyzeSegExecute(TObject *Sender);

void __fastcall actMatchLinesExecute(TObject *Sender);

void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);

void __fastcall actZoomWndExecute(TObject *Sender);

void __fastcall actMatchOutExecute(TObject *Sender);

void __fastcall actOpenArrayExecute(TObject *Sender);

void __fastcall actSaveArrayExecute(TObject *Sender);

void __fastcall actOptionsExecute(TObject *Sender);

void __fastcall actSaveCodeExecute(TObject *Sender);

void __fastcall actSegCodeOutExecute(TObject *Sender);

private: // User declarations

void ZoomTo(double z);

void DrawGrid();

void ShowInfo(int X, int Y);

int __fastcall NeigCount(int x, int y);

int VectMove(int &x, int &y, int vect);

void wlog(AnsiString s);

AnsiString VectToStr(int v);

void ValidateView();

double plDistance(double x,double y,double x1,double y1,double x2,double y2);

// plDistance вычисляет расстояние (минимальное) от точки (x,y)

// до прямой, заданной точками (x1,y1) и (x2,y2)

AnsiString StrToLen(AnsiString str, int len);

// StrToLen возвражает строку длины len

// заполняя пробелями недостающие символы в начале строки str

void __fastcall NeigNode(int x, int y, int n);

// NeigSeg обрабатывает соседей точки (x,y)

// на принадлежность узлу n

// является рекурсивной

void __fastcall NeigLine(int x,int y, int n);

// NeigLine обрабатывает соседей точки (x,y)

// на продолжение линии n

// является рекурсивной

void __fastcall GetLineVect(int x,int y, int n);

// GetLineVect обрабатывает линию в код

// рекурсивная

TPoint NodeCentre(int n);

// NodeCentre возвращает центр узла n (координаты узловой точки)

void __fastcall FillLine(int n1, int n2);

// FillLine присваивает линии n2 пикселы линии n1 (объединение двух линий)

TPoint __fastcall FindMatch(int x, int y);

// FindMatch возвращает точку, соответствующую точке x,y

void __fastcall CodeLine(int x1,int y1,int x2,int y2);

// CodeLine добавляет в глобальную переменную linecode код для отрезка (x1,y1)-(x2,y2)

void __fastcall GetLineVect2(int x,int y, int n);

// GetLineVect2 обрабатывает линию в код

// рекурсивная

public:// User declarations

__fastcall TfrmLineSeg(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TfrmLineSeg *frmLineSeg;

//---------------------------------------------------------------------------

#endif

П.3.2. Текст модуля lineseg.cpp

//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "LineSeg.h"

#include "lsImgSize.h"

#include "lsOptions.h"

#include

#include

#include

#include

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "PERFGRAP"

#pragma resource "*.dfm"

#define min(a, b) (((a) < (b)) ? (a) : (b))

#define max(a, b) (((a) > (b)) ? (a) : (b))

TfrmLineSeg *frmLineSeg;

double zoom,dzoom,maxzoom;

int w,h,def,defh,selline,selnode,oldselline,oldselnode,isnode;

const int maxw=1024,maxh=1024;

TColor c0,c1,c2,c3,c4,c21,c5;

bool logs; // вести журнал вычислений

int nodescnt,xs1,ys1,xs2,ys2,xs3,ys3;

AnsiString linecode; // содержит код текущей линии

// apix[i][j][0] - массив точек

// apix[i][j][1] - массив линий, номер линии

// apix[i][j][2] - массив узлов, номер узла

// -1 - пиксел не обработан, 0 - нет точки, >0 - номер линии, кот. принадлежит точка

// apix[i][j][3] - массив врЕменных атрибутов

int apix[maxw][maxh][4];

//---------------------------------------------------------------------------

__fastcall TfrmLineSeg::TfrmLineSeg(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actExitExecute(TObject *Sender)

{

frmLineSeg->Close();

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::FormCreate(TObject *Sender)

{

scb1->Enabled=false;

logs=true;

zoom=1.0f; dzoom=1.0f;

maxzoom=100.0f;

selline=-1;

Image1->Left=0; Image1->Top=0;

Image2->Left=0; Image2->Top=0;

w=0; h=0;

c0=TColor(RGB(0,0,0)); c1=TColor(RGB(255,255,255));

c2=TColor(RGB(0,255,0)); c3=TColor(RGB(0,0,255));

c4=TColor(RGB(255,0,0)); c21=TColor(RGB(255,255,0));

c5=TColor(RGB(200,200,200));

for(int i=0;i<=maxw-1;i++)

for(int j=0;j<=maxh-1;j++)

{

apix[i][j][0]=0;

apix[i][j][1]=apix[i][j][2]=apix[i][j][3]=-1;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::FormCloseQuery(TObject *Sender, bool &CanClose)

{

CanClose=MessageBox(Handle,"Выход ?", "ЛС", MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2)==ID_YES;

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actZoomInExecute(TObject *Sender)

{

zoom+=dzoom;

ZoomTo(zoom);

DrawGrid();

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actZoomOutExecute(TObject *Sender)

{

if(zoom>dzoom) zoom-=dzoom;

ZoomTo(zoom);

DrawGrid();

}

//---------------------------------------------------------------------------

void TfrmLineSeg::DrawGrid()

{

if(Image2->Visible)

{

Image2->Picture->Bitmap->Width=Image1->Width;

Image2->Picture->Bitmap->Height=Image1->Height;

Image2->Width=Image1->Width;

Image2->Height=Image1->Height;

Image2->Canvas->Pen->Color=c5;

Image2->Canvas->FillRect(Image2->ClientRect);

if(actGridCheck->Checked)

{

for(int i=1;i<=Image2->Height;i++)

{

Image2->Canvas->MoveTo(int(zoom*i),0);

Image2->Canvas->LineTo(int(zoom*i),Image2->Height);

}

for(int i=1;i<=Image2->Width;i++)

{

Image2->Canvas->MoveTo(0,int(zoom*i));

Image2->Canvas->LineTo(Image2->Width,int(zoom*i));

}

}

} // Image2->Visible

}

void __fastcall TfrmLineSeg::actOpenFileExecute(TObject *Sender)

{

OpenDialog1->Title="Открыть изображение";

OpenDialog1->Filter="Файлы изображений (*.bmp)|*.bmp|Все файлы (*.*)|*.*";

if(OpenDialog1->Execute())

{

sb1->SimplePanel=true; sb1->SimpleText="Открытие файла ...";

Image1->Picture->LoadFromFile(OpenDialog1->FileName);

Image1->Width=Image1->Picture->Bitmap->Width;

Image1->Height=Image1->Picture->Bitmap->Height;

w=Image1->Picture->Width;

h=Image1->Picture->Height;

scb1->Enabled=true;

ZoomTo(zoom);

for(int i=0;i<=w-1;i++) // maxw-1

for(int j=0;j<=h-1;j++) // maxh-1

{

apix[i][j][0]=Image1->Canvas->Pixels[i][j]==c0?1:0;

apix[i][j][1]=apix[i][j][2]=apix[i][j][3]=-1;

}

sb1->SimpleText=""; sb1->SimplePanel=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actSaveFileExecute(TObject *Sender)

{

SaveDialog1->Filter="Файлы изображений (*.bmp)|*.bmp|Все файлы (*.*)|*.*";

SaveDialog1->DefaultExt="*.bmp";

SaveDialog1->Title="Сохранить изображение";

if(SaveDialog1->Execute())

{

Image1->Picture->SaveToFile(SaveDialog1->FileName);

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::Image2MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

if (actLockView->Checked) return;

int ix=int(X/zoom),iy=int(Y/zoom);

if(Button==mbLeft)

{

if(Image1->Canvas->Pixels[ix][iy]!=c0)

{

Image1->Canvas->MoveTo(ix,iy);

Image1->Canvas->Pixels[ix][iy]=c0;

apix[ix][iy][0]=1;

}

}

else if(Button==mbRight)

{

if(Image1->Canvas->Pixels[ix][iy]!=c1)

{

Image1->Canvas->MoveTo(ix,iy);

Image1->Canvas->Pixels[ix][iy]=c1;

apix[ix][iy][0]=0;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::Image2MouseMove(TObject *Sender,

TShiftState Shift, int X, int Y)

{

ShowInfo(X,Y);

if (actLockView->Checked) return;

int ix=int(X/zoom),iy=int(Y/zoom);

oldselline=selline;

oldselnode=selnode;

selline=apix[ix][iy][1];

selnode=apix[ix][iy][2];

TPoint p=NodeCentre(selnode);

if(Shift.Contains(ssLeft))

{

if(apix[ix][iy][0]!=1)

{

apix[ix][iy][0]=1;

Image1->Canvas->Pen->Color=c0;

Image1->Canvas->Pixels[ix][iy]=c0;

}

else

Image1->Canvas->MoveTo(ix,iy);

}

else if(Shift.Contains(ssRight))

{

if(apix[ix][iy][0]!=0)

{

apix[ix][iy][0]=0;

Image1->Canvas->Pen->Color=c1;

Image1->Canvas->Pixels[ix][iy]=c1;

}

else

Image1->Canvas->MoveTo(ix,iy);

}

if(actLineLightCheck->Checked && selline!=oldselline)

{

if(apix[ix][iy][1]>0) // есть линия

{

DrawGrid();

Image2->Canvas->Pen->Color=c2;

for(int i=0;i
{

for(int j=0;j
1   ...   13   14   15   16   17   18   19   20   21



Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації