⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.cpp

📁 曲面加工程序源码,用C++编写的加工曲线曲面的程序
💻 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 + -