RSS    

   Дипломная работа: Разработка программной системы, обеспечивающей отображение и сравнение в трехмерном пространстве исходных данных из двух матричных форм

vx:Array of Array of Extended;//массив вершин

nx:Array of Array of Array[1..3] of Extended;//массив нормалей

cx:Array of Array of Array[1..3] of GLfloat;//массив цветов

cc:Array of Array of Array[1..3] of GLfloat;//массив цветов

end;

PMatrix = ^TMatrix;

TMat = class(TForm)

Panel1: TPanel;

OpenPictureDialog1: TOpenPictureDialog;

Panel4: TPanel;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

UpDown1: TUpDown;

UpDown2: TUpDown;

Label3: TLabel;

Edit3: TEdit;

GroupBox2: TGroupBox;

Button2: TButton;

FoDialog: TOpenDialog;

Addons: TGroupBox;

SpeedButton1: TSpeedButton;

Button1: TButton;

Button3: TButton;

LBData: TListBox;

ListBox1: TListBox;

cb_Surface: TCheckBox;

progress: TPanel;

Label4: TLabel;

bar: TProgressBar;

ComboBoxMatrix: TComboBox;

BitBtnSave: TBitBtn;

SaveDialogMain: TSaveDialog;

procedure CalcNormals(x1,y1,z1,x2,y2,z2,x3,y3,z3:Extended; var nx,ny,nz:Extended);

procedure GL(var Matrix:TMatrix); //прорисовка матрицы на экран

procedure Init();

procedure SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

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

function LoadMatrixFromBitmap(filename:string; var Matrix:TMatrix):boolean;

function LoadMatrixFromDtFile(filename:string; var Matrix:TMatrix):boolean;

function MakeAnalysMatrixData(Matrix01,Matrix02:TMatrix; var Matrix03:TMatrix):boolean;

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

procedure bmp1Click(Sender: TObject);

procedure Panel4MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Panel4MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure Panel4MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit1Change(Sender: TObject);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit2Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure cb_SurfaceClick(Sender: TObject);

procedure ComboBoxMatrixChange(Sender: TObject);

procedure Edit3Change(Sender: TObject);

procedure BitBtnSaveClick(Sender: TObject);

private

MyPanels: TRenderPanel;

MCurrent: PMatrix;

myMatrix01:TMatrix; //первое изображение

myMatrix02:TMatrix; //второе изображение

myMatrix03:TMatrix; //наложение первого на второе

// w:Integer; //размерность матрицы

// vx:Array of Array of Extended;//массив вершин

// nx:Array of Array of Array[1..3] of Extended;//массив нормалей

// cx:Array of Array of Array[1..3] of GLfloat;//массив цветов

// cc:Array of Array of Array[1..3] of GLfloat;//массив цветов

mess:string;

bmp:TBitmap;

procedure InitOpenGL;

procedure SetDCPixelFormat(DC:HDC);

end;

var

yess: Boolean;

Mat: TMat;

MouseButton : Integer;

Xcoord, Ycoord, Zcoord : Integer;

YRot, XRot : integer;

Depth : integer;

LastCCX,LastCCY : Integer;

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

implementation

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

uses UAbout;

{$R *.dfm}

procedure TMat.InitOpenGL;

begin

MyPanels.DC:=GetDC(Panel4.Handle);

SetDCPixelFormat(MyPanels.DC);

MyPanels.HRC:=wglCreateContext(MyPanels.DC);

wglMakeCurrent(MyPanels.DC,MyPanels.HRC);

glEnable(GL_DEPTH_TEST);

glClearColor(0,0,0,1);

end;

procedure TMat.SetDCPixelFormat(DC:HDC);

var

pfd:TPixelFormatDescriptor;

nPixelFormat:Integer;

begin

FillChar(pfd,SizeOf(pfd),0);

pfd.dwFlags:=PFD_DOUBLEBUFFER or

PFD_DRAW_TO_WINDOW or

PFD_SUPPORT_OPENGL;

nPixelFormat:=ChoosePixelFormat(DC,@pfd);

SetPixelFormat(DC,nPixelFormat,@pfd);

end;

procedure TMat.FormCreate(Sender: TObject);

begin

MouseButton :=0;

bmp:=TBitmap.Create;

InitOpenGL;

Left:=0;

Top:=0;

LastCCX:=0;

LastCCY:=0;

self.MCurrent := @self.myMatrix01;

self.ComboBoxMatrix.ItemIndex := 0;

// Width:=Screen.Width;

// Height:=Screen.Height;

// WindowState:=wsMaximized;

// Timer1.Enabled:=True;

end;

procedure TMat.FormDestroy(Sender: TObject);

begin

wglMakeCurrent(0,0);

bmp.Destroy;

Finalize(myMatrix01.vx);

Finalize(myMatrix01.cx);

Finalize(myMatrix01.cc);

Finalize(myMatrix01.nx);

Finalize(myMatrix02.vx);

Finalize(myMatrix02.cx);

Finalize(myMatrix02.cc);

Finalize(myMatrix02.nx);

Finalize(myMatrix03.vx);

Finalize(myMatrix03.cx);

Finalize(myMatrix03.cc);

Finalize(myMatrix03.nx);

wglDeleteContext(MyPanels.HRC);

ReleaseDC(MyPanels.DC,Panel4.Handle);

DeleteDC(MyPanels.DC);

end;

procedure TMat.GL(var Matrix:TMatrix);

var

j,k,dw,dv : Integer;

ps : TPaintStruct;

av : Integer;

stroka:string;

begin

av:=0;

dw:=0;

dv:=0;

if (Yess=true) then

begin

GroupBox1.Enabled:=True;

dw:=Matrix.w div 2;

dv:=25 div 2;

BeginPaint(Panel4.Handle,ps);

wglMakeCurrent(MyPanels.DC,MyPanels.HRC);

glViewport(0,0,Panel4.Width,Panel4.Height);

glMatrixMode(GL_PROJECTION);

glLoadIdentity;

gluPerspective(30,Panel4.Width/Panel4.Height,1,10000);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity;

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glLoadIdentity;

glTranslatef(0,0,-Zcoord);

glRotatef(Xrot,1,0,0);

glRotatef(Yrot,0,1,0);

try

if (Matrix.w>5) then

If cb_Surface.Checked then av:=2 else av:=1;

case av of

1 : begin

glDisable(GL_LIGHTING);

glDisable(GL_LIGHT0);

glColor3f(1,1,1);

glBegin(GL_LINES);

for j:=0 to Matrix.w-2 do

for k:=0 to Matrix.w-2 do

begin

glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);

glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);

glColor3f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);

glVertex3f(j-dw,Matrix.vx[j,k+1]-dv,k+1-dw);

end;

for j:=0 to Matrix.w-2 do

for k:=0 to Matrix.w-2 do

begin

glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);

glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);

glColor3f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);

glVertex3f(j+1-dw,Matrix.vx[j+1,k]-dv,k-dw);

end;

glEnd;

end;

2 : begin

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glEnable(GL_COLOR_MATERIAL);

glColor3f(1,1,1);

glBegin(GL_TRIANGLES);

for j:=0 to Matrix.w-2 do

for k:=0 to Matrix.w-2 do

begin

glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);

glNormal3f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);

glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);

glColor3f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);

glNormal3f(Matrix.nx[j+1,k,1],Matrix.nx[j+1,k,2],Matrix.nx[j+1,k,3]);

glVertex3f(j-dw+1,Matrix.vx[j+1,k]-dv,k-dw);

glColor3f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);

glNormal3f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);

glVertex3f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);

end;

for j:=0 to Matrix.w-2 do

for k:=0 to Matrix.w-2 do

begin

glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);

glNormal3f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);

glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);

glColor3f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);

glNormal3f(Matrix.nx[j,k+1,1],Matrix.nx[j,k+1,2],Matrix.nx[j,k+1,3]);

glVertex3f(j-dw,Matrix.vx[j,k+1]-dv,k-dw+1);

glColor3f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);

glNormal3f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);

glVertex3f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);

end;

glEnd;

glDisable(GL_COLOR_MATERIAL);

end;

end;

except

Matrix.w:=0;

MessageBox(Handle,'Ошибка при прорисовке изображения',

'Ошибка',MB_OK or MB_ICONERROR);

end;

EndPaint(Panel4.Handle,ps);

glRotatef(120,1.0,0.0,0.0); // Rotate on x

glRotatef(120,0.0,1.0,0.0); // Rotate on y

glRotatef(120,0.0,0.0,1.0); // Rotate on z

SwapBuffers(MyPanels.DC);

//временная защита кода

// stroka := 'Это демонстрационная версия!!!';

// TextOut(myPanels.DC,300,200,PChar(stroka),Length(stroka));

// stroka := 'Программа сделана на заказ!!!';

// TextOut(myPanels.DC,300,220,PChar(stroka),Length(stroka));

// stroka := 'лоалофв аофоа длфыв а лдо';

// TextOut(myPanels.DC,300,240,PChar(stroka),Length(stroka));

end;

end;

procedure TMat.SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);

var

fx:Integer;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.