📄 frmmain.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "Face.h"
#include "troidal.h"
#include "Parabo.h"
#include "frmMain.h"
#include "ReadErr.h"
#include "plane.h"
#include "Test.h"
#include "cylinder.h"
#include "ellipsoid.h"
#include "ellipsoid_conv.h"
#include "toric_spline.h"
#include "ellipsoid_ump.h"
#include "wolter.h"
#include "wolter_convex.h"
#include "xafs.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
cbShape->Items->Add("paraboloid");
cbShape->Items->Add("troidal");
cbShape->Items->Add("plane");
cbShape->Items->Add("cylinder");
cbShape->Items->Add("ellipsoid");
cbShape->Items->Add("ellipsoid_conv");
cbShape->Items->Add("toric_spline");
cbShape->Items->Add("ellipsoid_ump");
cbShape->Items->Add("wolter");
cbShape->Items->Add("xafs");
cbShape->Items->Add("wolter_convex");
//paraboloid *parabo1 = new paraboloid();
//face1 = parabo1;
//face1 = new paraboloid();
face1 = new wolter_convex();
//face1 = new wolter();
cbShape->ItemIndex=10;
TStringList *slist = new TStringList;
face1->GetParameter(slist);
PropertyMemo->Lines->Text = slist->Text;
cbZ->ItemIndex = 6;
cbZChange(this);
btnCalc->Hide();
btnSave->Hide();
btnErrorOpen->Hide();
initialize_err();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::CloseButtonClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnSaveClick(TObject *Sender)
{
if (dlgSave->Execute()){
//Save *.fly(Property)
PropertyMemo->Lines->SaveToFile(dlgSave->FileName);
}else{
return;
};
AnsiString temp = dlgSave->FileName;
if (temp.AnsiPos(AnsiString("."))!=0){
temp.Delete(temp.AnsiPos(AnsiString('.')),temp.Length()-temp.AnsiPos(AnsiString("."))+1);
};
temp += ".txt";
//Save *.txt(NC program)
Label1->Caption = "Now Calculating!";
Repaint();
face1->NCDataOut(temp.c_str());
Label1->Caption = "NC Program Writer";
/*dlgSaveNC->FileName = temp;
if (dlgSaveNC->Execute()){
};*/
//Save *.dat
if (temp.AnsiPos(AnsiString("."))!=0){
temp.Delete(temp.AnsiPos(AnsiString('.')),temp.Length()-temp.AnsiPos(AnsiString("."))+1);
};
temp += ".dat";
Label1->Caption = "Now Calculating!";
Repaint();
face1->FaceDataOut(temp.c_str());
Label1->Caption = "NC Program Writer";
/*dlgSaveDat->FileName = temp;
if (dlgSaveDat->Execute()){
};*/
//Save *.lat(Latticed points on machined face)
if (temp.AnsiPos(AnsiString("."))!=0){
temp.Delete(temp.AnsiPos(AnsiString('.')),temp.Length()-temp.AnsiPos(AnsiString("."))+1);
};
temp += ".lat";
face1->LatticeDataOut(temp);
/*dlgLatticeSave->FileName = temp;
if (dlgLatticeSave->Execute()){
};*/
Repaint();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnChangeClick(TObject *Sender)
{
Change();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::cbShapeChange(TObject *Sender)
{
switch (cbShape->ItemIndex){
case 0:
delete face1;
face1 = new paraboloid();
break;
case 1:
delete face1;
face1 = new troidal();
break;
case 2:
delete face1;
face1 = new plane();
break;
case 3:
delete face1;
face1 = new cylinder();
break;
case 4:
delete face1;
face1 = new ellipsoid();
break;
case 5:
delete face1;
face1 = new ellipsoid_conv();
break;
case 6:
delete face1;
face1 = new toric_spline();
break;
case 7:
delete face1;
face1 = new ellipsoid_ump();
break;
case 8:
delete face1;
face1 = new wolter();
break;
case 9:
delete face1;
face1 = new xafs();
break;
case 10:
delete face1;
face1 = new wolter_convex();
break;
};
TStringList *slist = new TStringList;
face1->GetParameter(slist);
PropertyMemo->Lines->Text = slist->Text;
btnChangeClick(Sender);
btnCalc->Hide();
btnSave->Hide();
btnErrorOpen->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnBrowseClick(TObject *Sender)
{
btnChangeClick(Sender);
//pbTop-----------------
int h = pbTop->Height;
int w = pbTop->Width;
TRect NewRect = Rect(0, 0, w, h);
pbTop->Canvas->Brush->Color = clBtnFace;
pbTop->Canvas->FillRect(NewRect);
double WorkDiameter = face1->GetWorkDiameter();
double WorkPosition = face1->GetWorkPosition();
vector center = vector (0,WorkPosition,face1->GetZ(0,WorkPosition));
double centerV = center.getX();
double centerH = center.getZ();
double zMax = cbZ->Items->Strings[cbZ->ItemIndex].ToDouble();
double PixelPerMilimeterH = (w/2.0)/(zMax);
double PixelPerMilimeterV = (h/2.0)/WorkDiameter;
//1:Work Area
NewRect = Rect(0, h/4., w, h*3./4.);
pbTop->Canvas->Brush->Color = clWhite;
pbTop->Canvas->FillRect(NewRect);
//2:Line
pbTop->Canvas->Pen->Color = clBlack;
pbTop->Canvas->MoveTo(w/2.,0);
pbTop->Canvas->LineTo(w/2.,h);
pbTop->Canvas->MoveTo(0,h/2.);
pbTop->Canvas->LineTo(w,h/2.);
//3:Caption
AnsiString temp;
temp = "("+AnsiString(centerV)+","+AnsiString(WorkPosition)+","+AnsiString(centerH)+")";
pbTop->Canvas->TextOut(w/2.,h/2.,temp);
temp = AnsiString(centerV+WorkDiameter/2);
pbTop->Canvas->TextOut(w/2.,h/4.,temp);
temp = AnsiString(centerV-WorkDiameter/2);
pbTop->Canvas->TextOut(w/2.,h*3./4.,temp);
temp = "X";
pbTop->Canvas->TextOut(w/2.,0,temp);
temp = "Z";
pbTop->Canvas->TextOut(w-30,h/2.,temp);
//4:Line
double x,z;
int px,pz;
pbTop->Canvas->Pen->Width=2;
for (int i=h; i>0; i--){
x = (h/2.-i)/PixelPerMilimeterV + centerV;
z = face1->GetZ(x,WorkPosition);
px= i;
pz= (z-centerH)*PixelPerMilimeterH+w/2.;
if (i==h) {pbTop->Canvas->MoveTo(pz,px);};
pbTop->Canvas->LineTo(pz,px);
};
pbTop->Canvas->Pen->Width=1;
//5: Tool
pbTop->Canvas->Brush->Style = bsDiagCross;
pbTop->Canvas->Brush->Color = clGreen;
pbTop->Canvas->Pen->Color = clGreen;
double ToolLargeRadius = face1->GetToolLargeRadius();
double ToolSmallRadius = face1->GetToolSmallRadius();
pbTop->Canvas->Ellipse( w/2.,h/2.-(ToolLargeRadius+ToolSmallRadius)*PixelPerMilimeterV , w/2.+2*(ToolLargeRadius+ToolSmallRadius)*PixelPerMilimeterH,h/2.+(ToolLargeRadius+ToolSmallRadius)*PixelPerMilimeterV);
pbTop->Canvas->Brush->Style = bsSolid;
//End of pbTop---------
//pbSide----------------
h = pbSide->Height;
w = pbSide->Width;
NewRect = Rect(0, 0, w, h);
pbSide->Canvas->Brush->Color = clBtnFace;
pbSide->Canvas->FillRect(NewRect);
WorkDiameter = face1->GetWorkSizeY();
// WorkPosition = face1->GetWorkPosition();
centerV = center.getY();
centerH = center.getZ();
zMax = cbZ->Items->Strings[cbZ->ItemIndex].ToDouble();
PixelPerMilimeterH = (w/2.0)/(zMax);
PixelPerMilimeterV = (h/2.0)/WorkDiameter;
//1:Work Area
NewRect = Rect(0, h/4., w, h*3./4.);
pbSide->Canvas->Brush->Color = clWhite;
pbSide->Canvas->FillRect(NewRect);
//2:Line
pbSide->Canvas->Pen->Color = clBlack;
pbSide->Canvas->MoveTo(w/2.,0);
pbSide->Canvas->LineTo(w/2.,h);
pbSide->Canvas->MoveTo(0,h/2.);
pbSide->Canvas->LineTo(w,h/2.);
//3:Caption
temp = "( 0,"+AnsiString(centerV)+","+AnsiString(centerH)+")";
pbSide->Canvas->TextOut(w/2.,h/2.,temp);
temp = AnsiString(centerV+WorkDiameter/2);
pbSide->Canvas->TextOut(w/2.,h/4.,temp);
temp = AnsiString(centerV-WorkDiameter/2);
pbSide->Canvas->TextOut(w/2.,h*3./4.,temp);
temp = "Y";
pbSide->Canvas->TextOut(w/2.,0,temp);
temp = "Z";
pbSide->Canvas->TextOut(w-30,h/2.,temp);
//4:Line
double y;
int py;
pbSide->Canvas->Pen->Width=2;
for (int i=h; i>0; i--){
y = (h/2.-i)/PixelPerMilimeterV + centerV;
if (i<0.75*h&&i>0.25*h){
z = face1->GetZ(0,y);
}else{
z=0;
}
py= i;
pz= (z-centerH)*PixelPerMilimeterH+w/2.;
if (i==h) {pbSide->Canvas->MoveTo(pz,py);};
pbSide->Canvas->LineTo(pz,py);
};
pbSide->Canvas->Pen->Width=1;
//5: Tool
pbSide->Canvas->Brush->Style = bsDiagCross;
pbSide->Canvas->Brush->Color = clGreen;
pbSide->Canvas->Pen->Color = clGreen;
// ToolLargeRadius = face1->GetToolLargeRadius();
ToolSmallRadius = face1->GetToolSmallRadius();
pbSide->Canvas->Ellipse( w/2.,h/2.-ToolSmallRadius*PixelPerMilimeterV , w/2.+2*ToolSmallRadius*PixelPerMilimeterH,h/2.+ToolSmallRadius*PixelPerMilimeterV);
pbSide->Canvas->Brush->Style = bsSolid;
//end of pbside---------
btnCalc->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::cbZChange(TObject *Sender)
{
lbZ->Caption = cbZ->Items->Strings[cbZ->ItemIndex];
btnBrowseClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnCalcClick(TObject *Sender)
{
Label1->Caption = "Now Calculating!";
Repaint();
face1->MakeFace();
Label1->Caption = "NC Program Writer";
Repaint();
btnChangeClick(Sender);
btnSave->Show();
btnErrorOpen->Show();
//FlagErrorComp 981028
face1->FlagErrorComp(false);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnOpenPropertyClick(TObject *Sender)
{
if (dlgOpenProperty->Execute()){
//PropertyMemo->Lines->LoadFromFile(dlgOpenProperty->FileName);
TStringList *slist = new TStringList;
slist->LoadFromFile(dlgOpenProperty->FileName);
for (int i=0; i<slist->Count; i++){
AnsiString temp;
temp = "FaceType";
if (slist->Names[i]==temp){
if (cbShape->Items->Strings[0]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 0;
}else if (cbShape->Items->Strings[1]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 1;
}else if (cbShape->Items->Strings[2]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 2;
}else if (cbShape->Items->Strings[3]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 3;
}else if (cbShape->Items->Strings[4]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 4;
}else if (cbShape->Items->Strings[5]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 5;
}else if (cbShape->Items->Strings[6]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 6;
}else if (cbShape->Items->Strings[7]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 7;
}else if (cbShape->Items->Strings[8]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 8;
}else if (cbShape->Items->Strings[9]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 9;
}else if (cbShape->Items->Strings[10]== slist->Values[slist->Names[i]]){
cbShape->ItemIndex = 10;
}else {
cbShape->ItemIndex = 0;
};
};
};
cbShapeChange(Sender);
PropertyMemo->Lines->Text = slist->Text;
btnChangeClick(Sender);
};
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::btnErrorOpenClick(TObject *Sender)
{
AnsiString filename=face1->GetErrorCompFileName();
if (filename.Length()>2)
dlgLaticedErrOpen->FileName=filename;
if (dlgLaticedErrOpen->Execute()){
filename = dlgLaticedErrOpen->FileName;
LatticedResultOpen(filename);
face1->FlagErrorComp(true);
face1->SetErrorCompFileName(filename);
Repaint();
//btnChangeClick(Sender);
//btnSave->Show();
//btnErrorOpen->Show();
};
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormPaint(TObject *Sender)
{
TStringList *slist = new TStringList;
PropertyMemo->Clear();
slist->Clear();
face1->GetParameter(slist);
PropertyMemo->Lines->Text = slist->Text;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PropertyMemoKeyPress(TObject *Sender, char &Key)
{
btnCalc->Hide();
btnSave->Hide();
btnErrorOpen->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::TestButtonClick(TObject *Sender)
{
TestForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormDestroy(TObject *Sender)
{
delete face1;
finalize_err();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormShow(TObject *Sender)
{
Top=(Screen->Height-Height)/2;
Left=(Screen->Width-Width)/2;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::CenterLineButtonClick(TObject *Sender)
{
if(CenterLineSaveDialog->Execute()){
AnsiString filename=CenterLineSaveDialog->FileName;
face1->CenterLine(filename);
};
}
//---------------------------------------------------------------------------
void TMainForm::Change()
{
//TODO: 偙偺壓偵僐乕僪傪捛壛偟偰偔偩偝偄
TStringList *slist = new TStringList;
slist->Text = PropertyMemo->Lines->Text ;
face1->SetParameter(slist);
PropertyMemo->Clear();
slist->Clear();
face1->GetParameter(slist);
PropertyMemo->Lines->Text = slist->Text;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -