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

原创 2012年03月30日 16:10:14

介绍

  什么是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等数据,然后结束该区域。

C++ 读取的dxf文件并用OpenCV绘制出来

正文开始,C++注释很详细,只写了识别块的单层嵌套,只要了解一些DXF文件格式,就可以根据这个例子修改,可以读出线、圆、等等,直接贴源码 稍后会把整个工程上传,里面包含测试文件等等...
  • shaynerain
  • shaynerain
  • 2016年12月07日 16:15
  • 39319

C++读取shp文件源代码并将转化为DXF

C++读取shp文件源代码
  • HW140701
  • HW140701
  • 2016年08月24日 11:15
  • 1702

CAD开发:DWG合并,dwg转换为dxf

一、需求 有时候由于跨度大、数据量大,会将数据存储于多个dwg文件,比如一条铁路的设计图纸就存在几个甚至几十个dwg文件中。如果想合并为一个dwg文件,手动合并太麻烦,所以就可以采用代码合并。本文使用...
  • u013779141
  • u013779141
  • 2016年11月18日 19:26
  • 2000

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

CadLib for creating DXF(Drawing Interchange Format) files 原址
  • zph0711
  • zph0711
  • 2014年08月26日 14:32
  • 904

AutoCAD绘图交换文件DXF实体对象说明

  • 2017年12月30日 00:24
  • 1.01MB
  • 下载

C/C++ 图像处理(15)------DXF文件の读取、绘图与显示

关于DXF文件的读取自几年前做项目的时候就用到了,不过当时是另外一个朋友负责的就没在意,直至最近的项目又要用到方才自己动手去弄。 因为几年前项目的代码还在,因此看了下发现之前朋友是用dxflib开源...
  • oHanTanYanYing
  • oHanTanYanYing
  • 2016年12月27日 17:21
  • 3294

关于CAD文件 DXF格式的理解

DXF文件就是以文档的格式描述图形数据的。可以用写字板打开DXF格式的文件的。   DXF文件分为以下几个段号的   每个段的格式如:   0 SECTION   2 HEADER...
  • yingmutongxue
  • yingmutongxue
  • 2012年11月26日 15:48
  • 9641

快速加载DXF、DWG格式文件控件ABViewer

ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序。 ABViewer为您提供专业的cad文件浏览和编辑工具。 支持多种格式,如:DWG格式, DXF, DWF, Hewl...
  • sb360doc
  • sb360doc
  • 2014年08月18日 17:30
  • 372

读取DXF格式文件的C++代码

OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。   OpenGL本身不仅提供对简单图元的操...
  • Augusdi
  • Augusdi
  • 2011年09月03日 23:39
  • 3131

关于CAD文件 DXF格式的理解

转自:http://blog.csdn.net/yingmutongxue/article/details/8226104 DXF文件就是以文档的格式描述图形数据的。可以用写字板打开DXF格...
  • zph0711
  • zph0711
  • 2014年08月26日 14:38
  • 524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CDxfFileWrite类,用CabLib创建DXF(绘图交换格式)文件
举报原因:
原因补充:

(最多只允许输入30个字)