CDxfFileWrite类,用CabLib创建DXF(绘图交换格式)文件

介绍

  什么是DXF

  绘图交换格式(DXF)文件允许在AutoCAD和其它程序进行图形交换。DXF文件即可以是ASCII格式也可以是二进制格式。 因为ASCII格式的DXF文件比二进制格式更加通用,所以CadLib使用ASCII的DXF格式。

  什么是CadLib

  CadLib不是计算机辅助设计(CAD)程序。它是创建用于CAD程序DXF文件的工具。它由两部分组成,一部分是用于创建DXF文件的动态链接库,另一部分是编程接口,该类封装了cadio.dll中的函数,可以在Microsoft Visual C++项目中使用。另外,cadio.dll 也可以用于其它Win32编程中。

  为什么使用CadLib

  一些程序需要输出可以被AutoCad等程序使用的图形文件,例如,在一个"发动机设计程序"中,程序需要输出图形,而最常用的交换数据的图形格式便是DXF。

          

  DXF文件结构

  DXF文件格式是图形文件中所有信息的标签数据描述。标签数据指的是文件中的被称为群码的整型数据前的每个数据项。 群码的值指示了下面数据的数据类型以及数据单元的含义。事实上图形文件中所有用户特殊信息都可以描述为DXF格式。(参考AutoCad的DXF参考说明)

  DXF文件由许多区域组成,每个区域里有许多图形数据,CadLib可以使用如下区域:

  1. 头部 HEADER

  2. 表格 TABLES

  3. 区块 BLOCKS

  4. 实体 ENTITIES

  CadLib中的DXF文件结构参考AutoCad中的DXF格式说明,具体可以在下面网址找到参考:

  http://www.autodesk.com/techpubs/autocad/acad2000/dxf/dxf_format.htm

  http://www.martinreddy.net/gfx/3d/DXF12.spec

  类:这里的类是CadIO.dll和主程序之间的接口。"Test"演示了如何用CadLib中的CDxfFileWrite和CDrawing类创建DXF文件。

  CDxfFileWrite类

  CDxfFileWrite封装了直接创建DXF文件的所有命令。使用方法如下:

1. 创建DXF文件

CDxfFileWrite dxffile;
dxffile.Create(  "d:\test.dxf"  );


2. HEADER区域的开始与结束。这里是为了兼容CAD程序。其它的不需要HEADER区域。
// Header Section ------------------------------------------
dxffile.BeginSection(SEC_HEADER);
dxffile.EndSection();
// close HEADER section -----------------------------------

3. 开始表格区域并放置LAYER, LTYPE, STYLE, DIMSTYLE等你所需的表格类型,然后结束该区域。
// Tables Section ------------------------------------------
dxffile.BeginSection(SEC_TABLES);
// LTYPE table type -------------------------
dxffile.BeginTableType(TAB_LTYPE);
DXFLTYPE ltype;
double  elem[4];
// Continuous
ZeroMemory(<ype,  sizeof (ltype));
ltype.Name =  "Continuous" ;
ltype.DescriptiveText =  "Solid line" ;
dxffile.AddLinetype(<ype);
// DASHDOT2
ZeroMemory(<ype,  sizeof (ltype));
ltype.Name =  "DASHDOT2" ;
ltype.DescriptiveText =  "Dash dot (.5x) _._._._._._._._._._._._._._._." ;
ltype.ElementsNumber = 4;
ltype.TotalPatternLength = 0.5;
ltype.Elements = elem;
elem[0] = 0.25;
elem[1] = -0.125;
elem[2] = 0.0;
elem[3] = -0.125;
dxffile.AddLinetype(<ype);
dxffile.EndTableType();
// close LTYPE table type -------------------
// LAYER table type -------------------------
result &= dxffile.BeginTableType(TAB_LAYER);
result &= dxffile.AddLayer( "Layer1" , 1,  "Continuous" );
result &= dxffile.AddLayer( "Layer2" , 2,  "Continuous" );
result &= dxffile.AddLayer( "Layer3" , 3,  "Continuous" );
result &= dxffile.AddLayer( "Layer4" , 4,  "Continuous" );
result &= dxffile.EndTableType();
// close LAYER table type -------------------
// STYLE table type -------------------------
dxffile.BeginTableType(TAB_STYLE);
DXFSTYLE tstyle;
ZeroMemory(&tstyle,  sizeof (tstyle));
tstyle.Name =  "Style1" ;
tstyle.PrimaryFontFilename =  "TIMES.TTF" ;
tstyle.Height = 0.3;
tstyle.WidthFactor = 1;
dxffile.AddTextStyle(&tstyle);
dxffile.EndTableType();
// close STYLE table type -------------------
// DIMSTYLE table type ----------------------
dxffile.BeginTableType(TAB_DIMSTYLE);
DXFDIMSTYLE dimstyle;
// DIM1
ZeroMemory(&dimstyle,  sizeof (dimstyle));
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
dimstyle.DIMBLK1 =  "ClosedFilled" ; // 1st Arrow head
dimstyle.DIMBLK2 =  "ClosedFilled" ; // 2nd Arrow head
dimstyle.DIMASZ = 0.1800;  // Arrow size
dimstyle.DIMTXSTY =  "Style1" // 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
dxffile.AddDimStyle(&dimstyle);
dxffile.EndTableType();
// close DIMSTYLE table type ----------------
dxffile.EndSection();
// close TABLES section ------------------------------------

4. 开始实体区域并放置LINE, CIRCLE, SOLID, TEXT, ARC, POINT, DIMLINEAR等数据,然后结束该区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值