📄 dxfdlg.cpp
字号:
layer.LineTypeObjhandle = objhandle1; // Continuous
drawing.AddLayer(&layer);
// Layer4
ZeroMemory(&layer, sizeof(layer));
strcpy(layer.Name, "Layer4");
layer.Color = 4;
layer.LineTypeObjhandle = objhandle1; // Continuous
drawing.AddLayer(&layer);
// STYLE table type -------------------------
STYLE style;
ZeroMemory(&style, sizeof(style));
strcpy(style.Name, "Style1");
strcpy(style.PrimaryFontFilename, "TIMES.TTF");
style.LastHeightUsed = 0.3;
style.WidthFactor = 1;
objhandle1 = drawing.AddTextStyle(&style);
// DIMSTYLE table type ----------------------
DIMSTYLE dimstyle;
// DIM1
ZeroMemory(&dimstyle, sizeof(dimstyle));
strcpy(dimstyle.Name, "DIM1"); // DimStyle Name
dimstyle.dimclrd = 2; // Dimension line & Arrow heads color
dimstyle.dimdle = 0.0000; // Dimension line size after Extensionline
dimstyle.dimclre = 2; // Extension line color
dimstyle.dimexe = 0.1800; // Extension line size after Dimline
dimstyle.dimexo = 0.0625; // Offset from origin
strcpy(dimstyle.dimblk1, "ClosedFilled");// 1st Arrow head
strcpy(dimstyle.dimblk2, "ClosedFilled");// 2nd Arrow head
dimstyle.dimasz = 0.1800; // Arrow size
dimstyle.dimtxstyObjhandle = objhandle1;// Text style
dimstyle.dimclrt = 3; // Text color
dimstyle.dimtxt = 0.1800; // Text height
dimstyle.dimtad = 1; // Vertical Text Placement
dimstyle.dimgap = 0.0900; // Offset from dimension line
drawing.AddDimStyle(&dimstyle);
/*
// Entities Section ----------------------------------------
// set current textstyle to Style1
drawing.SetTextStyle("Style1");
// default current layer is 0
// draw text
result &= drawing.Text("Solid", 11.4, 4.6, 0.3) > 0;
// set current layer to Layer2
result &= drawing.SetLayer("Layer2");
// draw a line
result &= drawing.Line(1.8, 3.1, 8.1, 7.5) > 0;
// set current layer to Layer1 and linetype to DASHDOT2
result &= drawing.SetLayer("Layer1");
result &= drawing.SetLineType("DASHDOT2");
// draw a circle
result &= drawing.Circle(8.1, 4.4, 1.75) > 0;
// set current layer to Layer2
result &= drawing.SetLayer("Layer2");
// draw text
result &= drawing.Text("Circle", 7.5, 4.2, 0.3, 0) > 0;
// set current layer to Layer4
result &= drawing.SetLayer("Layer4");
// draw a solid
REALPOINT points[4];
points[0].x = 10.4; points[0].y = 7.2;
points[1].x = 13.6; points[1].y = 7.4;
points[2].x = 13.1; points[2].y = 4.9;
points[3].x = 10.9; points[3].y = 5.9;
result &= drawing.Solid(points[0], points[1], points[2], points[3]) > 0;
// draw polyline
/* result &= drawing.SetColor(3);
ENTVERTEX vertex[5];
ENTVERTEX vertex[5];
ZeroMemory(vertex, sizeof(ENTVERTEX)*5);
vertex[0].Point.x = 1.2125; vertex[0].Point.y = 5.1811;
vertex[1].Point.x = 2.5888; vertex[1].Point.y = 4.9520;
vertex[2].Point.x = 2.7910; vertex[2].Point.y = 7.1188;
vertex[3].Point.x = 4.7204; vertex[3].Point.y = 6.6414;
vertex[4].Point.x = 5.0015; vertex[4].Point.y = 8.0484;
result &= drawing.PolyLine(vertex, 5);
// draw text
result &= drawing.SetColor(3);
POSITION pos;
int i=m_dxfpline.GetCount();
pos=m_dxfpline.GetHeadPosition();
*/
// m=
/* if(pos!=NULL)
{
// result &= drawing.PolyLine(m_dxfpline.GetAt(pos)->y_vertex, 3);
TRACE("the date is %f,%f\n", m_dxfpline.GetAt(pos)->z_vertex[0].Point.x,m_dxfpline.GetAt(pos)->z_vertex[0].Point.y);
TRACE("the date is z %f\n", m_dxfpline.GetAt(pos)->z_vertex[0].Point.z);
TRACE("the date is %f,%f\n", m_dxfpline.GetAt(pos)->z_vertex[1].Point.x,m_dxfpline.GetAt(pos)->z_vertex[1].Point.y);
result &= drawing.PolyLine(m_dxfpline.GetAt(pos)->z_vertex, m_dxfpline.GetAt(pos)->y_pointnum);
result &= drawing.PolyLine(m_dxfpline.GetAt(pos)->y_vertex, m_dxfpline.GetAt(pos)->z_pointnum);
}
*/
result &= drawing.SetColor(3);
POSITION pos;
pos=m_dxfpline.GetHeadPosition();
int x_step=0;
int y_step=0;
int i=1;
while(pos!=NULL)
{
if(i<=10)
{
m_dxfpline.GetAt(pos)->ADD_COUNTDATE(x_step,y_step);
drawing.PolyLine(m_dxfpline.GetAt(pos)->y_vertex, m_dxfpline.GetAt(pos)->y_pointnum);
drawing.PolyLine(m_dxfpline.GetAt(pos)->z_vertex, m_dxfpline.GetAt(pos)->z_pointnum);
i++;
drawing.Line(x_step,y_step+5,x_step,y_step-5);
CString s;
s.Format("%.2f",m_dxfpline.GetAt(pos)->zhuanghao);
s.Replace(".00","");
drawing.Text(s, x_step-0.5,y_step, 1, 0);
y_step+=20;
}
else
{
i=0;
x_step+=200;
y_step=0;
m_dxfpline.GetAt(pos)->ADD_COUNTDATE(x_step,y_step);
drawing.PolyLine(m_dxfpline.GetAt(pos)->y_vertex, m_dxfpline.GetAt(pos)->y_pointnum);
drawing.PolyLine(m_dxfpline.GetAt(pos)->z_vertex, m_dxfpline.GetAt(pos)->z_pointnum);
drawing.Line(x_step,y_step+5,x_step,y_step-5);
}
m_dxfpline.GetNext(pos);
}
/*
CDXFPLINE *p=new CDXFPLINE;
ZeroMemory(p->y_vertex, sizeof(ENTVERTEX)*15);
p->y_vertex[0].Point.x=-2;
p->y_vertex[0].Point.y=5;
p->y_vertex[1].Point.x=6;
p->y_vertex[1].Point.y=12;
//TRACE("the date is %f,%f\n", p->z_vertex[0].Point.x,p->z_vertex[0].Point.y);
//TRACE("the date is %f,%f\n", p->z_vertex[1].Point.x,p->z_vertex[1].Point.y);
// p=m_dxfpline.GetAt();
m_dxfpline.AddTail(p);
POSITION pos=m_dxfpline.GetHeadPosition();
result &= drawing.PolyLine(m_dxfpline.GetAt(pos)->y_vertex, 2);
result &= drawing.SetColor(4);
result &= drawing.Text("Polyline", 2.97, 5.7, 0.3, 30) > 0;
// set current layer to Layer3
result &= drawing.SetLayer("Layer3");
result &= drawing.SetColor(COLOR_BYLAYER);
// draw text
result &= drawing.Text("Line", 6.5, 6.5, 0.3, 35) > 0;
// draw a dimension line
result &= drawing.SetDimStyle("DIM1");
result &= drawing.DimLinear(6.35, 3, 9.85, 3, 9.85, 2, 0, "3.50") > 0;
*/
// Save data to dxf file
if(!drawing.SaveDXFFile(DxfFileName))
{
result = FALSE;
MessageBox("Error while saving dxf file!", "Error", MB_ICONERROR | MB_OK);
}
// Initialize Drawing View Window
CRect r;
m_DrawingWindow.GetClientRect(r);
drawing.InitView(0, 0, r.Width(), r.Height());
drawing.ZoomExtents();
m_DrawingWindow.RedrawWindow();
// Destroy CDrawing and free allocated memory
// result &= drawing.Destroy();
if(result)
MessageBox("Writing dxf file done.", "Dxf Test (CDrawing)", MB_ICONINFORMATION | MB_OK);
else
MessageBox("Error!", "Error", MB_ICONERROR | MB_OK);
} // TODO: Add your control notification handler code here
}
else
{
AfxMessageBox("请先打开数据");
}
}
void CDXFDlg::OnZoomIN()
{
// TODO: Add your control notification handler code here
if(drawing.isOpen())
{
drawing.SetZoomLevel( drawing.GetZoomLevel() * 1.5 );
m_DrawingWindow.RedrawWindow();
}
}
void CDXFDlg::OnZoomOut()
{
// TODO: Add your control notification handler code here
if(drawing.isOpen())
{
drawing.SetZoomLevel( drawing.GetZoomLevel() / 1.5 );
m_DrawingWindow.RedrawWindow();
}
}
void CDXFDlg::OnExit()
{
// TODO: Add your control notification handler code here
drawing.Destroy();
m_DrawingWindow.RedrawWindow();
}
void CDXFDlg::OnZoomExtents()
{
// TODO: Add your control notification handler code here
if(drawing.isOpen())
{
drawing.ZoomExtents();
m_DrawingWindow.RedrawWindow();
}
}
BOOL CDXFDlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
if(drawing.isOpen())
{
if(zDelta>0)
drawing.SetZoomLevel( drawing.GetZoomLevel() * 1.5 );
else
drawing.SetZoomLevel( drawing.GetZoomLevel() / 1.5 );
m_DrawingWindow.RedrawWindow();
}
return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}
BOOL CDXFDlg::TURN_DATE_DXF()
{
POSITION pos;
pos=m_date.GetHeadPosition();
while(pos!=NULL)
{
CDXFPLINE *p=new CDXFPLINE;
p->zhuanghao=m_date.GetAt(pos)->zhuanghao;
int n1,n2;
n1=m_date.GetAt(pos)->you.GetSize();
if(n1>=2)
{
int j=1;
int n=0;
//p->y_vertex[0].Point.x=0;
for(int i=0;n1/2>i;i++)
{
p->y_vertex[j].Point.x=-m_date.GetAt(pos)->you[n];
n++;
p->y_vertex[j].Point.y=m_date.GetAt(pos)->you[n];
n++;
j++;
}
p->y_pointnum=j;
}
n2=m_date.GetAt(pos)->zuo.GetSize();
if(n2>=2)
{
int j=1;
int n=0;
for(int i=0;n2/2>i;i++)
{
p->z_vertex[j].Point.x=m_date.GetAt(pos)->zuo[n];
n++;
p->z_vertex[j].Point.y=m_date.GetAt(pos)->zuo[n];
TRACE("the date is %f,%f\n", p->z_vertex[j].Point.x,p->z_vertex[j].Point.y);
n++;
j++;
}
p->z_pointnum=j;
}
m_dxfpline.AddTail(p);
m_date.GetNext(pos);
}
return true;
}
void CDXFDlg::DeleteM_DATE(DUANMIAN &m_date)
{
POSITION pos=m_date.GetHeadPosition();
while(pos!=NULL)
{
DUANMIANDATE *p=m_date.GetNext(pos);
delete p;
}
m_date.RemoveAll();
}
void CDXFDlg::DeleteM_DXFPLINE(DXFPLINE &m_dxfpline)
{
POSITION pos=m_dxfpline.GetHeadPosition();
while(pos!=NULL)
{
CDXFPLINE *p=m_dxfpline.GetNext(pos);
delete p;
}
m_dxfpline.RemoveAll();
}
void CDXFDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
DeleteM_DATE(m_date);
DeleteM_DXFPLINE(m_dxfpline);
dlg.DoModal();
}
void CDXFDlg::OnOPENDXF()
{
static char szFilter[] = "DXF file format(*.dxf) |*.dxf|All Files (*.*)|*.*||";
CFileDialog OpenDlg( TRUE, NULL, NULL/*LastFilePath*/, OFN_HIDEREADONLY | OFN_EXPLORER, szFilter, NULL );
OpenDlg.m_ofn.lpstrTitle = "Open DXF File";
if(OpenDlg.DoModal()==IDOK)
{ // Openning sample dxf file
CString DxfFileName( OpenDlg.GetPathName() );
if(drawing.isOpen())
drawing.Destroy();
// Create Drawing
if(!drawing.Create())
{
MessageBox("Fatal error on creating CDrawing!", "Error", MB_ICONERROR | MB_OK);
return;
}
// Initialize Progressbar
CProgressDlg ProgDlg;
ProgDlg.Create(this);
ProgDlg.SetRange(0, 100);
// Load data from dxf file
if(!drawing.LoadDXFFile(DxfFileName, ProgDlg.m_hWnd))
{
ProgDlg.DestroyWindow();
MessageBox("Error while loading dxf file!", "Error", MB_ICONERROR | MB_OK);
return;
}
// Close Progress window
ProgDlg.DestroyWindow();
// Initiaze Drawing View Window
CRect r;
m_DrawingWindow.GetClientRect(r);
drawing.InitView(0, 0, r.Width(), r.Height());
drawing.ZoomExtents();
m_DrawingWindow.RedrawWindow();
}
}
//DEL BOOL CDXFDlg::DestroyWindow()
//DEL {
//DEL // TODO: Add your specialized code here and/or call the base class
//DEL
//DEL return CDialog::DestroyWindow();
//DEL }
void CDXFDlg::OnButton7()
{
// TODO: Add your control notification handler code here
//dlg.DoModal();
CAboutDlg dlg;
dlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -