介绍
什么是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"
);
// Header Section ------------------------------------------
dxffile.BeginSection(SEC_HEADER);
dxffile.EndSection();
// close HEADER section -----------------------------------
// 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 ------------------------------------