400上位机VC MFC实现DXF文件读取及保存
实现DXF文件读取及保存
功能展示
DXF 是Autodesk公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的文件(Drawing Exchange Format),激光打印设备中经常要载入DXF文件进行图形打印,当前例程实现DXF文件打开修改与保存功能,效果如图。点击<打开DXF文件>可以打开根目录的测试dxf文件,点击保存,可以保存当前编辑的图形文件为DXF文件或G文件
要点提示
dxf文件共有六个区:HEADER,CLASSES,TABLES,BLOCKS,ENTITIES,OBJECTS;
42个图元:3DFACE,3DSOLID,ACAD_PROXY_ENTITY,ARCATTDEF,ATTRIB,BODY,CIRCLE,DIMENSION,ELLIPSE,HATCH,HELIX,IMAGE,INSERT,LEADER,LIGHT,LINE,LWPOLYLINE,MLINE,MTEXT,OLEFRAME,OLE2FRAME,POINT,POLYLINE,RAY,
REGION,SECTION,SEQEND,SHAPE,SOLID,SPLINE,SUN,SURFACE,TABLE,TEXT,TOLERANCE,TRACE,UNDERLAY,VERTEX,VIEWPORT,WIPEOUT,XLINE;
例程为激光刻划设备dxf文件部分代码,支持实用图元:ENT_ELLIPSE,CIRCLE,ARC,LINE,POLYLINE,POINT,TEXT,DIMENSION,INSERT,VERTEX,SOLID;及三个区: TABLES ,BLOCKS,ENTITIES;
例程使用了项目中的动态库,动态库的工程源代码在根目录DXFIO.zip内。例程还包含有dxf文件格式用户手册,acad_dxf.chm及测试用dxf文件 ,手机触屏文件.dxf ,测试文件.dxf
实现功能
1.新建基于对话框的应用程序
2.复制例程根目录动态库文件DXFIO.dll(可运行DXFIO.zip内工程生成)及文件夹DXF及到自己工程根目录,并载入文件夹DXF下DxfLib.cpp ,DxfLib.h文件到工程;
3.在主对话框类中包含头文件#include “.\DXF\DxfLib.h“ ,并添加变量CDrawing m_DxfRead; 在资源文件中添加位图控件IDC_PANEL,用于显示打开的DXF文件内容,添加两个按钮控件<打开DXF文件><保存DXF文件>关联点击函数,实现dxf文件的打开与保存功能
void CGkbc8Dlg::OnOpen()
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle = "选择DXF文件";
fileDlg.m_ofn.lpstrFilter = "DXF Files (*.dxf)\0*.dxf\0";
fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
//><
if(IDOK==fileDlg.DoModal())
{
CString FilePath = fileDlg.GetPathName();
::SetWindowText(this->m_hWnd, FilePath);
if(!m_DxfRead.LoadDXFFile(FilePath,m_hWnd) )
MessageBox("打开失败");
}
Invalidate();
}
void CGkbc8Dlg::OnSave()
{
CFileDialog fileDlg(FALSE,"dxf","fage.dxf");
fileDlg.m_ofn.lpstrTitle = "选择保存路径";
fileDlg.m_ofn.lpstrFilter = "DXF Files (*.dxf)\0*.dxf\0G File (*.G)\0*.G\0";
fileDlg.m_ofn.lpstrDefExt="dxf";
fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
//><
if(IDOK==fileDlg.DoModal())
{
CString FilePath = fileDlg.GetPathName();
CString sTemp=fileDlg.GetFileExt();
if(sTemp == "G"|| sTemp == "g")
{
m_DxfRead.SaveToGFile(FilePath,m_hWnd);
}
else if(sTemp == "dxf"|| sTemp == "DXF")
{
m_DxfRead.SaveDXFFile(FilePath,m_hWnd);
}
}
}
4.在OnPaint()函数中添加以下代码,实现dxf文件内容显示功能
//><
CWnd *pWnd = GetDlgItem(IDC_PANEL);
CDC *pDC = pWnd->GetDC();
CRect rectClient;
pWnd->GetClientRect(&rectClient);
m_DxfRead.InitView( rectClient.left, rectClient.top, rectClient.right-rectClient.left , rectClient.bottom-rectClient.top );
m_DxfRead.Paint(pDC->m_hDC);
ReleaseDC(pDC);
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|