C#读取DXF文件

C#读取DXF文件
C#读取DXF文件

using System;

using System.Collections.Generic;

using https://www.360docs.net/doc/b514337231.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Collections;

namespace DXF

{

public partial class Form1 : Form

{

private FileStream fs;

private StreamReader sr;

private ArrayList LayerList = new ArrayList();

private ArrayList LineList = new ArrayList();

private ArrayList ArcList=new ArrayList();

private ArrayList EllipseList = new ArrayList();

private ArrayList LwopolylineList = new ArrayList();

private ArrayList SplineList=new ArrayList();

private string[] str = new string[2];

private int count;

private double leftx;

private double lefty;

private double rightx;

private double righty;

public Form1()

{

InitializeComponent();

}

private string[] ReadPair()

{

string code = sr.ReadLine().Trim();

string codedata = sr.ReadLine().Trim();

count += 2;

string[] result = new string[2] { code, codedata };

return result;

}

private void Read()

{

while (sr.Peek() != -1)

{

str = ReadPair();

if (str[1] == "SECTION")

{

str = ReadPair();

switch (str[1])

{

case"HEADER": ReadHeader();

break;

case"TABLES": ReadTable();

break;

case"ENTITIES": ReadEntities();

break;

}

}

}

sr.Close();

fs.Close();

btDraw.Enabled = true;

label1.Text = count.ToString();

count = 0;

}

private void ReadTable()

{

while (str[1] != "ENDSEC")

{

while (str[0] != "2" || str[1] != "LAYER") {

str = ReadPair();

}

while (str[0] != "0" || str[1] != "LAYER") {

str = ReadPair();

}

while (str[0] == "0" && str[1] == "LAYER") {

ReadLAYER();

}

while (str[1] != "ENDSEC")

{

str = ReadPair();

}

}

}

private void ReadLAYER()

{

LAYER newlayer = new LAYER();

while (str[1] != "ENDTAB")

{

str = ReadPair();

switch (str[0])

{

case"2": https://www.360docs.net/doc/b514337231.html, = str[1];

break;

case"62": newlayer.colornum = str[1];

break;

case"6": newlayer.lstyle = str[1];

break;

case"370": newlayer.lwidth = str[1];

break;

}

if (str[0] == "0" && str[1] == "LAYER") {

LayerList.Add(newlayer);

return;

}

}

LayerList.Add(newlayer);

}

private void ReadEntities()

{

while (str[1] != "ENDSEC")

{

switch (str[1])

{

case"LINE": ReadLine();

break;

case"ARC": ReadArc();

break;

case"CIRCLE": ReadArc();

break;

case"ELLIPSE": ReadEllipse();

break;

case"LWPOLYLINE": ReadLwpolyline();

break;

case"SPLINE": ReadSpline();

break;

default: str = ReadPair();

break;

}

}

}

private void ReadArc()

{

ARC newarc = new ARC();

while (str[1] != "ENDSEC")

{

str = ReadPair();

switch (str[0])

{

case"8": newarc.LName = str[1];

break;

case"10": newarc.CenterX = Double.Parse(str[1]);

break;

case"20": newarc.CenterY = Double.Parse(str[1]);

break;

case"40": newarc.Radiu = Double.Parse(str[1]);

break;

case"50": newarc.SAngle = Double.Parse(str[1]);

break;

case"51": newarc.EAngle = Double.Parse(str[1]);

break;

case"370": newarc.lwidth = str[1];

break;

case"0": ArcList.Add(newarc);

return;

}

}

}

private void ReadLine()

{

LINE newline = new LINE();

while (str[1] != "ENDSEC")

{

str = ReadPair();

switch (str[0])

{

case"8": newline.LName = str[1];

break;

case"10": newline.StartX = Double.Parse(str[1]);

break;

case"20": newline.StartY = Double.Parse(str[1]);

break;

case"11": newline.EndX = Double.Parse(str[1]);

break;

case"21": newline.EndY = Double.Parse(str[1]);

break;

case"62": newline.colornum = str[1];

break;

case"370": newline.lwidth = str[1];

break;

case"0": LineList.Add(newline);

return;

}

}

}

private void ReadEllipse()

{

ELLIPSE newellipse = new ELLIPSE();

while (str[1] != "ENDSEC")

{

str = ReadPair();

switch (str[0])

{

DXF文件实际上是ASCII编码文件讲解

DXF文件实际上是ASCII编码文件,可以用记事本打开。 DXF 文件本质上由代码及关联值对组成。代码(通常称为组码)表明其后的值的类型。使用这些组码和值对,可以将DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。在DXF 文件中,每个组码和值都各占一行。 DXF 文件由多个段组成,每段都以一个0和后跟字符串SECTION 的组码开始,其后是组码2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个0和后跟字符串ENDSEC 的组码结束。 完整的结构如下: HEADER 段。包含图形的基本信息。它由AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。 CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的BLOCKS、ENTITIES 和OBJECTS 段中。类定义在类的层次结构中是固定不变的。 TABLES 段。包含以下符号表的定义: APPID(应用程序标识表) BLOCK_RECORD(块参照表) DIMSTYLE(标注样式表) LAYER(图层表) LTYPE(线型表) STYLE(文字样式表) UCS(用户坐标系表) VIEW(视图表) VPORT(视口配置表) BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。 ENTITIES 段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。一般屏幕上显示的图形对像如直线,圆,弧等都在ENTITIES 段 OBJECTS 段。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS 段中的条目样例是包含多线样式和组的词典。 THUMBNAILIMAGE 段。包含图形的预览图像数据。此段为可选 你所问的是立体(3DSOLID),它的编码比较复杂,建议你先把平面图元的DXF格式搞明白,再研究三维图

HALCON如何读取DXF文件

HALCON如何读取DXF文件 read_contour_xld_dxf (Contours, 'D:/D1.dxf', [], [], DxfStatus) 读入DXF文件装载到Contours中 disp_obj (Contours, 200000) 显示读入的内容 segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 50, 40, 20) 分割圆和直线 count_obj (ContoursSplit, Number) for i := 1 to Number by 1 select_obj (ContoursSplit, ObjectSelected, i) get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib) if(Attrib==1) fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder) gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1.0) dev_display (ContCircle) write_string (200000, 'R:'+Radius) else * fit_line_contour_xld (ContCircle, 'tukey', -1, 0, 5, 2,

C# 读取DXF文件 (2)

u s i n g S y s t e m; using using https://www.360docs.net/doc/b514337231.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using using System.IO; using System.Collections; namespace DXF { public partial class Form1 : Form { private FileStream fs; private StreamReader sr; private ArrayList LayerList = new ArrayList(); private ArrayList LineList = new ArrayList(); private ArrayList ArcList=new ArrayList(); private ArrayList EllipseList = new ArrayList(); private ArrayList LwopolylineList = new ArrayList(); private ArrayList SplineList=new ArrayList(); private string[] str = new string[2]; private int count; private double leftx; private double lefty;

private double rightx; private double righty; public Form1() { InitializeComponent(); } private string[] ReadPair() { string code = sr.ReadLine().Trim(); string codedata = sr.ReadLine().Trim(); count += 2; string[] result = new string[2] { code, codedata }; return result; } private void Read() { while (sr.Peek() != -1) { str = ReadPair(); if (str[1] == "SECTION") { str = ReadPair(); switch (str[1]) { case"HEADER": ReadHeader(); break;

如何读取DXF格式文件

如何读取DXF格式文件? -------------------------------------------------------------------------------- OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF格式,我们就能很容易地实现资源共享,而不需要重复建模。 DXF文件的结构很清楚,具体如下: 1. 标题段(HEADER ) 有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一个相关值。 2. 表段 这一段包含的指定项的定义,它包括: a、 线形表(LTYPE) b、 层表(LYER) c、 字体表(STYLE) d、 视图表(VIEW) e、 用户坐标系统表(UCS) f、 视窗配置表(VPORT)

g、 标注字体表(DIMSTYLE) h、 申请符号表(APPID) 3. 块段(BLOCKS) 这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。 4. 实体段(ENTITIES ) 这一段含有实体,包括任何块的调用。 5. END OF FILE(文件结束) 下面是对DXF的基本结构举一实例进行说明: 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 HEADER 说明该段是HEADER 段(标题段) 9 $ACADVER 文件是由AUTOCAD 产生的 1 AC1008 9 9 后接$UCSORG $UCSORG 用户坐标系原点在世界坐标系中的坐标 10 10 对应X 0.0 X 的值

C#读取DXF文件

using System; using System.Collections.Generic; using https://www.360docs.net/doc/b514337231.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; namespace DXF { public partial class Form1 : Form { private FileStream fs; private StreamReader sr; private ArrayList LayerList = new ArrayList(); private ArrayList LineList = new ArrayList(); private ArrayList ArcList=new ArrayList(); private ArrayList EllipseList = new ArrayList(); private ArrayList LwopolylineList = new ArrayList(); private ArrayList SplineList=new ArrayList(); private string[] str = new string[2]; private int count; private double leftx; private double lefty;

private double rightx; private double righty; public Form1() { InitializeComponent(); } private string[] ReadPair() { string code = sr.ReadLine().Trim(); string codedata = sr.ReadLine().Trim(); count += 2; string[] result = new string[2] { code, codedata }; return result; } private void Read() { while (sr.Peek() != -1) { str = ReadPair(); if (str[1] == "SECTION") { str = ReadPair(); switch (str[1])

DXF格式文件解析

dxf文件是AutoCad的交换文件,可以直接用AutoCad打开。dxf文件是明码文件,在vb环境下按顺序文件读取就可以了。 例如:在C盘根目录下有一个文件“1.dxf” 启动vb后,建立一个按钮:Command1 并双击此按钮,对其输入以下代码: Private Sub Command1_Click() Dim a As String '读取文件一行的内容 Dim i As Long '用于记录行数 Dim j As Long '用于记录用户如何响应提示 Open "c:\1.dxf" For Input As #1 i = 0 While Not EOF(1) Line Input #1, a i = i + 1 j = MsgBox("第 " & i & " 行内容为:" & a, vb OKCancel + vbInformation) '运行到此步时,如果用户输入“确定”则继续,如果用户输入“取消”则结束本程序 '用户可以在此输入处理代码,对读入的字串进行处理 If j = vbCancel Then End End If W end close #1 End Sub 读取DXF格式文件 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF 格式,我们就能很容易地实现资源共享,而不需要重复建模。

在AutoCAD中正确应用DXF图形文件格式

在AutoCAD中正确应用DXF图形文件格式 一、DXF文件格式分析 DXF文件由标题段、表段、块段、实体段和文件结束段5部分组成,其内容如下。 ☆标题段(HEADER)标题段记录AutoCAD系统的所有标题变量的当前值或当前状态。标题变量记录了AutoCAD系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等。 ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在文件中出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW)。 ☆块段(BLOCK)块段记录了所用块的块名,当前图层层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH 命令生成的剖面线和用DIM命令所完成的尺寸标准。 ☆实体段(ENTITIES)实体段记录了每个实体的名称、所在图层及其名字、线型、颜色等。☆文件结束段(EOF OF FILE)DXF文件的结束标志。 一个DXF文件由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于数据类型的代码,它由CAD图形系统所规定,而组值为具体的数值,二者结合起来表示一个数据的含义和值。例如,代码10代表一个点的X坐标,占一行,而其第二行4.5425则是点X坐标的具体数值,二者结合表示一点,其X坐标值为4.5425。 (1)组代码和组值的类型组代码为一个非负的不超过三位的整数,而组值由组代码的类型决定。例如: 代码0~9组值类型为字符型。 代码10~59组值类型为实型。 代码60~79组值类型为整型。 代码999表示解释行。 (2)组代码的含义每个组代码均有规定的含义,有些代码含义是固定的,而有些组代码则因应用场合不同而有多个含义,应具体分析。另外,一些代码是备用的,目前版本尚未用到,现将他们的含义举例介绍如下。 0:表示一个事物的开始,如一个块、表、图层、实体等。 1:字符型数据的值,如TEXT的字符串、文件名、属性值等。 2:一个事物的名字,如段、表、块、线型、视图等的名字。 3~5:字符型数据的值,如文件名、线型说明等。 6:线型名(固定类型)。 8:图层名(固定类型)。 关于实体的坐标与相应的组代码10~18、20~28、30~38的用法应根据实体所用到点的数量,按组代码个位的0、1、2、……的顺序使用。例如LINE的起点组代码为10、20、30,而11、21、31为其终点。其他类似。 DXF文件的结构相当复杂,完整读取DXF文件也是一项异常繁琐的工程。在实际应用中,为了提取图形的实体信息,可以省略DXF文件中的许多项,只要获取其中的层表、块段和实体段,就可以完成相应几何图形的描述。在层表中说明每一层的颜色、线型,在块段中说明块所在的层、属性及其在图形中的位置,在实体段中说明直线的起点、终点及圆的圆心、半径等几何信息和各实体所在的层。根据实体所在的层,在层表中搜索每一层的颜色、线型并将其添加到实体对象中。在利用CAD进行绘图时,需将变量参数DIMASO设为ON,以保证块段中定义的尺寸块为一个整体,并可被正确无误地获取。根据尺寸类型名、尺寸定义的起点、终点坐标与实体类型名、实体空间坐标是否匹配,对实体对象进行尺寸附加。在绘图时,如对自定义的粗糙度、形位公差等块不进行“EXPLODE”炸开操作,也可通过增加相应读取函数提取其属性。 下面举例说明实体段在DXF文件中的格式。 圆弧(ARC)

如何将地图及对象导出成dxf文件用来作为CAD底图新

如何将地图导出成dxf文件用来作为CAD底图 将地图导出成dxf文件只能在Windows客户端软件进行,并且需要VIP级别用户才可以执行此操作,且导出的底图像素大小和VIP级别有关,详见表1: 表1 将地图导出成dxf文件的具体操作步骤: (1)打开或者新建(点工具栏的图形按钮)一个需要导出成图片的地图图形,如图1: 图1 图形选择说明:图形可以是矩形,也可以是多边形、圆形、椭圆

形、扇形,还可以是轨迹生成的图型、搜索出来的行政区域图形。(2)点击图形,打开图像设置窗口(新建的图形会直接弹出图形设置窗口),设置该图形的线条宽度、线条不透明度、线 条颜色、填充不透明度、填充颜色,如图2: 图2 图形设置说明: 如果想要导出的图片显示该图形的轮廓,则建议将线条不透明度设置为50%,填充不透明度设置为1%,也可以根据需要适当的进行调整;如果用户不想显示该图形,则将线条不透明度也设置为1%。 地图下载说明: 导出地图前要先确保该区域所需级别的地图已下载,如果未下载齐全,导出的图片会显示不全;点【下载该区域地图】下载所需级别的地图,下载完成后再重新打开图形设置窗口。 部分地区的谷歌卫星图实际最高级别为18级,19级和20 级都是数码放大的,下载19级和20级的地图并不会比18级的地图清晰,因此不建议下载这些地区19级和20级的地图。(3)图形设置好了之后,点击【详细信息】,弹出图形详细信息窗口,如图3: 图3 (4)点击【导出成图片】按钮,弹出导出成图片-设置预览窗

口,选择地图级别,查看将要导出的图片信息,设置缩放比例,勾选【仅显示区域内的图片】、【在图片上显示奥维对象】选项,查看预览效果,如图4: 图4 地图级别:地图级别每高一级,导出的图片总像素值就会变大4倍,图片文件大小也跟着变大4倍;另外鉴于部分地区19级和20级卫星图都是数码放大的,因此不建议导出这两级的地图图片。 缩放比例:对当前预览的地图图片进行缩小比例保存,可以控制图片总像素数,一般情况下建议使用默认的不缩放,可使图片导出最佳效果。 仅显示区域内的图片:选中这项,矩形图形之外的其它图形如多边形,导出的底图不会显示多边形外边的地图及对象(见后面的例图5、例图6)。 在图片上显示奥维对象:选中这项,导出的图片将会显示奥维对象,包括区域图形本身和其它可见的奥维对象,所以要根据需要在步骤(2)的图形设置里设置好显示参数。 当前图片总共[384,813]像素:显示当前图片的总像素,可以通过设置地图级别或者通过设置缩放比例来改变当前图片总像素值。 保存成图片:需要VIP1:提示导出当前总像素的图片所需的VIP

DXF文件格式读取(VC例子)

Download demo project - 167 Kb Introduction What is DXF? Drawing Interchange Format (DXF) files enable the interchange of drawings between AutoCAD and other programs. DXF files can be either ASCII or binary formats. Because ASCII DXF files are more common than the binary format, CadLib uses ASCII DXF format. What is CadLib? The CadLib is not a Computer Aided Design (CAD) program. It is a tool for creating DXF files that are used in the CAD programs. It consists of two parts. One of them is a Dynamic Link Library to create the DXF file. The other part is the programming interface. It is a class that integrates the cadio.dll functions. It can be used in Microsoft Visual C++ projects. In addition, the cadio.dll can be used in other Win32 programs. Why use CadLib? In some programs, it is needed to create a drawing output for use in other programs such as AutoCad. For example, in a "Building Detail Sheet Generator Program", the program needs to create a drawing output. And the most standard format for communicating drawing data is DXF.

dxf文件格式

dxf格式解析 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF 格式,我们就能很容易地实现资源共享,而不需要重复建模。 DXF文件的结构很清楚,具体如下: 1. 标题段(HEADER ) 有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一个相关值。 2. 表段 这一段包含的指定项的定义,它包括: a、 线形表(LTYPE) b、 层表(LYER) c、 字体表(STYLE) d、 视图表(VIEW) e、 用户坐标系统表(UCS) f、 视窗配置表(VPORT) g、 标注字体表(DIMSTYLE) h、 申请符号表(APPID) 3. 块段(BLOCKS) 这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。 4. 实体段(ENTITIES ) 这一段含有实体,包括任何块的调用。 5. END OF FILE(文件结束) 下面是对DXF的基本结构举一实例进行说明: 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 HEADER 说明该段是HEADER 段(标题段) 9 $ACADVER 文件是由AUTOCAD 产生的 1

Allegro导入dxf文件

Allegro导入DXF的方法 1.国内大部分结构工程师会默认给出DWG格式的文件,这种文件在Allegro中是不支持的,EDA 工程师可要求结构工程师给出DXF格式的文件。如果EDA工程师不想麻烦结构工程师,那么也可以自己下载合适的软件将DWG格式转为DXF格式。下图是打开的DXF文件。 2.将DXF文件导入Allegro之前,务必要做一个准备工作:将DXF文件与PCB设置为同样的单位。在我的工作经历中,结构工程师给出的DXF/DWG文件都是mm单位的,为了后续的导入过程顺利进行,强烈建议将DXF与PCB设置为相同的单位。EDA工程师采用的通常是mil单位,建议EDA 工程师首先将单位更改为mm。 3.在Allegro中点击Setup—>Design Parameters,并在弹出的Design Paramters Editor对话框中,点击Design标签,将User Units更改为Milimeter,最后点击OK确认。过程如下图。

4.点击File—>Import–>DXF,如下图。

5.找到欲导入的DXF文件。

6.此时需要注意,有一个非常重要的操作,就是勾选Incremental addtion,即在原有基础上新增。我看到网上有很多网友碰到这样的问题:导入DXF之后,PCB中原有的所有内容都消失了,就是因为没有勾选Incremental addtion。正确的方式如下图。 7.点击Lib…图标,将配置文件保存在合适的目录下,其实默认不做调整也是OK的。比较重要的操作是点击Edit/View layers…图标,选择需要导入的层。

读取dxf文件的vb代码

读取dxf文件的vb代码 ' ReadDXF从DXF文件中提取指定代码/值对。 ' 该函数需要4个字符串参数,一个有效的DXF文件名、 ' 一个DXF区域名称、一个在该区域中对象的名称以及 ' 一个列出代码的逗号分隔符。 ' Function ReadDXF( _ ByVal dxfFile As String, ByVal strSection As String, _ ByVal strObject As String, ByVal strCodeList As String) Dim tmpCode, lastObj As String Open dxfFile For Input As #1 ' 获得第一个代码/值对 codes = ReadCodes ' 在整个文件中循环直到找到"EOF"行 While codes(1) <> "EOF" ' 如果该组码为"0"并且其值为"SECTION" .. If codes(0) = "0" And codes(1) = "SECTION" Then ' 这必定是一个新的区域,所以获取下一个代码/值对 codes = ReadCodes() ' 如果该区域为所要寻找的区域.. If codes(1) = strSection Then ' 取得下一代码/值对并且.. codes = ReadCodes ' 在该区域中循环直到找到"ENDSEC" While codes(1) <> "ENDSEC" ' 在这个区域中,所有"0"代码表示一个对象。 ' 如果发现"0"就可保存对象名以便以后使用。 If codes(0) = "0" Then lastObj = codes(1) ' 如果该对象是所需要的对象 If lastObj = strObject Then ' 在代码的前后加上逗号 tmpCode = "," & codes(0) & "," ' 如果该代码为列表中的代码.. If InStr(strCodeList, tmpCode) Then ' 添加它的返回值。

如何将地图及对象导出成dxf文件用来作为CAD底图-新

如何将地图导出成dxf文件用来作为CAD底图将地图导出成dxf文件只能在Windows客户端软件进行,并且需要VIP级别用户才可以执行此操作,且导出的底图像素大小和VIP级别有关,详见表1: (1) 1: 图1 图形选择说明:图形可以是矩形,也可以是多边形、圆形、椭圆形、扇形,还可以是轨迹生成的图型、搜索出来的行政区域图形。 (2)点击图形,打开图像设置窗口(新建的图形会直接弹出图形设置窗口),设置

该图形的线条宽度、线条不透明度、线条颜色、填充不透明度、填充颜色,如图2: 图2 图形设置说明: 如果想要导出的图片显示该图形的轮廓,则建议将线条不透明度设置为50%,填 下载19级和 (3): (4) 查看将要导出的图片信息,设置缩放比例,勾选【仅显示区域内的图片】、【在图片上显示奥维对象】选项,查看预览效果,如图4: 图4 地图级别:地图级别每高一级,导出的图片总像素值就会变大4倍,图片文件大小也跟着变大4倍;另外鉴于部分地区19级和20级卫星图都是数码放大的,因此不

建议导出这两级的地图图片。 缩放比例:对当前预览的地图图片进行缩小比例保存,可以控制图片总像素数,一般情况下建议使用默认的不缩放,可使图片导出最佳效果。 仅显示区域内的图片:选中这项,矩形图形之外的其它图形如多边形,导出的底图不会显示多边形外边的地图及对象(见后面的例图5、例图6)。 参数。 升级 。保存成 升级 (5) 图5 (6)点击【我已获得授权】弹出‘DXF文件选项’窗口,如图6: 图6 图块分块 图块最大块:导出的图块如果未超出VIP上限将不被分割,以最大块输出,偏差较大。

DXF文件分析

DXF文件分析 一、DXF文件数据总览 DXF是AutoCAD的一种绘图交换文件,可以与其他软件进行数据较换的一种文件格式。 DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII具有可读性好的特点,但占有空间较大;二进制格式则占有空间小、读取速度快。 DXF文件是由很多的“代码”和“值”组成的“数据对”构造而成,这里的代码称为“组码”(group code),指定其后的值的类型和用途。每个组码和值必须为单独的一行的。 DXF文件被组织成为多个“段”(section),每个段以组码“0”和字符串“SECTION”开头,紧接着是组码“2”和表示段名的字符串(如HEADER)。段的中间,可以使用组码和值定义段中的元素。段的结尾使用组码“0”和字符串“ENDSEC”来定义。 二、DXF文件数据格式分析 图1.1为DXF文件数据格式的总体框图 图2.1DXF数据格式框图 由图1.1可知,DXF的数据格式有HEADER(标题段)、CLASSES(类段)、TABLES (表段)、BLOCKS(块段)、ENTITIES(实体段)、OBJECTS(对象段)、EOF(结束)。出了这七个段之外还有一个THUMBNAILIMAGE段。

类/子类,组码,组值的格式如下: 类/子类 组码 组值 比如: AcDbCircle ARC的子类 10 组码,起点的X坐标 2860.382264303673 组值X的坐标为2860.382264303673 组码比起类/子类以及组值有一个空格的缩进。 2.1 HEADER(标题段) DXF 文件的HEADER 段包含与图形关联的变量的设置。它由AutoCAD 数据库版本号和一些系统变量组成。每个变量由给出变量名称的组码9 指定,其后是提供变量值的组。下面给出了HEADER段的一般格式。 0 HEADER 段的开始 SECTION 2 HEADER 9 变量名称标识符(仅在DXF 文件的HEADER 段中使用) 为每个标题变量重复一次 $<变量> <组码> <值> 0 HEADER 段的结束 ENDSEC 2.2 CLASSES(类段) CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的BLOCKS、ENTITIES 和OBJECTS 段中。类定义在类的层次结构中是固定不变的。

DXF文件读取

DXF文件读取 作者:不忍之刃 He_zhiyuan EMAIL:cb2688he2688@https://www.360docs.net/doc/b514337231.html, 2010-10-14 近来因为要做个项目,涉及到要做个DXF文件的读取。网上搜索DXF文件的文件结构,还搜索到一篇讲读取DXF文件的文章,相信来搜索读取DXF方面的人,一定会搜索到这篇文章的。但这篇文章里面附的源代码是有问题的。我用AUTOCAD可以导出3种版本的DXF 文件。我先用AUTOCAD画个简单的长方体, 然后用记事本打开导出来的三种版本的文件,发现很不一样,跟那篇文章里面描述的也不一样,用那篇文章里面源代码的方法是没办法读取的。然后我又用3DMAX导出DXF文件,才有正常的实体的“顶点”系列,实体的面系列,“面”里面记录的面上各个顶点在顶点系列中的位置。但我用3DMAX导出来的DXF文件里面,面是有4个顶点组成的四边形,而不是三角面片,所以这也跟那篇文章讲的不一样。 鉴于这么多,我自己写了个类来实现DXF文件的读取。且使用了OPENGL来做显示模型。列出如下: //CLoadDXF.h #include struct VERTEX { float x,y,z; }; //结构VERTEX用来存储点的坐标 struct SEQUENCE { int a,b,c,d; }; //结构SEQUENCE用来存储实体的面的组成,记录的是4个顶点在顶点序列《vertexArray》中的位置 struct ENTITY { int V ertexNumber;//实体顶点在顶点序列中开始开始的位置 int SequenceNumber;//实体在面系列中开始的位置 }; class CLoadDXF { public: void ShowDXF(float x,float y,float z,float size,float R,float G,float B); void OnFileInput(char* filename); CLoadDXF(); virtual ~CLoadDXF(); private: void norm(GLfloat v1[], GLfloat v2[], GLfloat v3[], GLfloat *nor);

用C语言程序读取CAD的dxf文件里的实体语言

wold line-dxf(FILE *fp,char layer[2],float x1,floal y1, float x2,float y2) fprintf(fp,"0\nLINE\n 8\n%s\n",1ayer); fprintf(fp,"10\n%f\n 20\n%f\n",x1,y1); fprintf(fp,"l1\n%f\n 2l\n%f\n",x2,y2); } #include ; #include < stdio.h>; #include "acad -dxf.c" main() {float r1,r2,11,12,13 x[100],y[37].Z[37]; float beta.beta1,fq,dz,w; int i; float xl,x1,y1,z1,x2,z2,x3,z3 ,x4 ,z4,xs,zs,Xe, ze; FILE*fp 摘要:本文简要介绍了一下DXF文件的组成。重点讲述了怎样使用C语言来读取DXF文件中的实体信息。 关键字:C、DXF

Abstract: The paper present the basic parts of DXF file. And focus on how to use C read the entity’s information from DXF file. Key Words: C, DXF DXF是Drawing eXchange File的缩写,意思为图形交换文件,在工程制图中有广泛的应用,掌握了DXF文件的读写对编写CAD软件时的图形信息的交换有重要意义。它有两种格式:一种是ASCII DXF 格式;一种是二进制DXF格式。ASCII DXF文件格式是ASCII 文字格式的AutoCAD图形的完整表示,这种文件格式易于被其它程序处理。二进制格式的DXF文件与ASCII格式的DXF文件包含的信息相同,但格式上二进制格式比ASCII格式更精简,能够节省百分之二十五的文件空间。AutoCAD能够更快地对其执行读写操作(通常能快五倍)。这可能是对ASCII格式的DXF文件操作时有ASCII与二进制形式的转换,因而花费时间较多。本文主要讨论ASCII格式的DXF 文件,因为它可读性强。 一、ASCII格式的DXF文件的组成

DXF文档详解

DXF文档详解 DXF的基本惯例 DXF格式是特定版本AutoCAD图形文件中所包含的全部信息的标记数据的一种表示方法。 标记数据的意思是指在每个数据元素前都带一个称为组码的整数。组码的值表明了其后数据元素的类型,也指出了数据元素对于给定对象(或记录)类型的含意。实际上,图形文件中所有用户指定的信息都能够以DXF文件格式表示。在AutoLISP和ARX应用程序中使用的DXF格式与上述格式基本相同,只是在某些数据组上存在着细微的差别。 如不作特殊说明,本节中所出现的组码都可以应用于DXF文件、AutoLISP应用程序和ARX应用程序。当组码说明对于应用程序和DXF文件有所不同时(或只适用于其中之一),在组码的说明前有如下提示符: APP只用于应用程序的说明 DXF只用于DXF文件的说明 如果组码说明对DXF文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。 组码范围 组码将与组码关联的值(组值)定义为整型、浮点数型或字符串型。具体说明如下表: 组码范围组码范围组值类型 0-9 字符串(最多255个字符,对于UNICODE字符串则更少) 10-59 双精度三维点 60-79 16位整数值 90-99 32位整数值 100 字符串(最多255个字符,对于UNICODE字符串则更少) 102 字符串(最多255个字符,对于UNICODE字符串则更少) 105 表示十六进制句柄值的字符串 140-147 双精度标量浮点值 170-175 16位整数值 280-289 8位整数值 300-309 任意文字字符串 310-319 表示二进制数据组的十六进制值的字符串 320-329 表示十六进制句柄值的字符串 330-369 表示十六进制对象标识符的字符串 999 注释(字符串) 1000-1009 字符串(最多255个字符;对于UNICODE字符串则更少) 1010-1059 浮点值 1060-1070 16位整数值 1071 32位整数值 按数字次序排列的组码 下表给出了组码(或组码范围)及其说明。在表中,“固定”表示该组码的用途固定不变,非固定组码的用途将随上下文变化。 按数字次序排列的图元组码 组码说明 -5APP:persistentreactor链表 -4APP:条件运算符(仅用于ssget) -3APP:扩展数据(XDA TA)标记(固定) -2APP:图元名引用(固定) -1APP:图元名。每次打开图形时它都改变,且不被保存。(固定) 0 表示图元类型的文字字符串(固定) 1 图元的主要文字值 2 名称(属性标记、块名称等) 3-4 其他的文字值或名称值

基于ANYCAD的DXF文件读取应用

基于ANYCAD的DXF文件读取与转换 Help you to make a better world! 写这篇文章的目的是我这段时间关于ANYCAD的一些学习感悟,并且附上具体的操作,使新手少走一些弯路。 本人是C#的新手,从来没接触过编程,暑期跟着老师做学习,第一个任务就是用C#打开DXF文件,我以为任务很简单,BUT 在网上搜索一大堆,都是没用的(对于我这个新手来讲),偶然一次看到一篇《基于https://www.360docs.net/doc/b514337231.html, 三维图形平台快速搭建DXF文件的读取、显示、转换成JPG, PNG,以及PDF》,了解了这个ANYCAD这个控件,但是这篇文章在我把代码输进去操作的时候发现对于我这个新手来说没太大用,只能说它给我打开了一个学习的大门。 AnyCAD 三维图形控件(AnyCAD Graphics SDK)是专业的、综合的三维图形应用开发包,是一个基于 OpenCASCADE 的CAD平台,可以用于开发二维/三维模型设计、计算机仿真、有限元前后处理等应用程序。 按照功能模块,AnyCAD Graphics SDK 专业版包括几何造型、三维可视化和数据交换模块,企业版在专业版的基础上增加数据管理模块。AnyCAD Graphics SDK 拥有.Net 和C++两个版本,其中.Net 版本支持WinForm 和WPF界面框架;C++版本支持MFC/Qt/wxWidgets 等界面库。 首先了解一下ANYCAD.SDK,这是一个动态链接库,举个例子,你要用到下边代码中的renderView,那你首先得对它定义才能使用,

定义在哪呢?对,就在SDK中,所以首先得下载ANYCAD的SDK,但是由于版权问题,只有试用期,过后得购买,学生有特殊照顾,这里就不详细说啦。 当你下载SDK后(注:需要注意VS和SDK的版本),第一步是添加引用,这样才能够使用封装的函数。 最重要的是把添加的SDK文件复制到你的项目中。 然后添加USING,如下图:

用VC++读取DXF文件格式的源代码和相关资料

我刚找到的:大家先看看做好了 告诉我一声 我也正准备做这个!! 我们使用 Visual C++ 6.0 来写一个读取DXF文件的小程序。 在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为 了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象 vertex, sequence来存储和管理实体的点坐标和点序。 CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或 结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们 对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。 三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变 量名为$UCSORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用 户坐标系原点的三维坐标。通过读取$EXTMAX,$EXTMIN可以获知三维实体在世 界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算 确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的 DXF文件基本结构读出。现在我们开始写这个程序。 先建立一个头文件HEAD.H定义如下的结构:VERTEX, SEQUENCE和类CVertex, Csequence。 typedef struct { float x,y,z; }VERTEX; 结构VERTEX用来存储点的坐标 typedef struct { int a,b,c; }SEQUENCE; 结构SEQUENCE用来存储实体的面的组成

typedef struct { char obName[20]; 定义结构myVertex来存储实体的名字,点的坐标以及面的组成,CObArray Vertex; 其中,点的坐标和面的组成是由聚合类CObArray定义的对象来 CObArray Sequence; 在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到}myVertex; 这两个对象中保存 class CVertex : public CObject { 因为CObArray类的对象中只能加入由CObject派生的对象,所以 protected: 我们还需要建立一个由CObject类派生的CVertex类。在CVertex类 CVertex(); 中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这 DECLARE_DYNCREATE(CVertex) 个变量中的。 virtual ~CVertex(); // Attributes public: 我们还需要建立一个由CObject类派生的CVertex类。在CVertex类 CVertex(VERTEX& ver); 中有一个VERTEX结构的变量:m_vertex,信息实际 上是存储在这个变量中的,函数CVertex(VERTEX& ver)把VERTEX结构的变量VERTEX m_vertex; 存入CObArray对象中。

相关文档
最新文档