AutoCAD辅助程序(CadAssi...大小:127.67K
已经过百度安全检测,放心下载
点击下载非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!
dxf中你看entity字段关于arc的描述
ARC
以下组码适用于圆弧图元。除此处所述的组码以外,另请参见常用图元组码。清液关于此表中使用的缩答胡物写和格式方面的信息,请参见本参考的格式惯例。
圆弧组码
组码说明
100
子类标记
(AcDbCircle)
39
厚度(可选;默认值
=
0)
10
中心点(在
OCS
中)DXF:X
值;APP:三维点
20,
30
DXF:中心点的
Y
值和
Z
值(在
OCS
中)
40
半径
100
子类标记
(AcDbArc)
50
起点角度
51
端点角度
210
拉伸方向(可选;默认值
=
0,
0,
1)DXF:X
值;APP:三维矢量
220,
230
DXF:拉伸方向的做橘
Y
值和
Z
值(可选)
图元信息提取:
下面具体介绍该工程中读取的几种图元。
对图元信息的提取需要结合DXF参考手册以及库文件(主要涉及【dl_entities.h】和旦皮高【dl_dxf.cpp】),选取实际所需数据进行自定义图元信息构造,比如说绘制二维平面图形,则不需要z轴坐标,此时只需要读取握拦data中x,y值即可,而在绘制ARC时,需要考虑到OCS到WCS的变化,而库文件读取的data中没有涉及到拉伸方向的模尺读取,所以此时需要对库文件进行一定修改,也主要是修改前面提及到的两个文件(这一点将在介绍绘制ARC时进行具体介绍)
首先在库文件【dl_entities.h】中可以看到每一种图元信息数据格式的定义,每一个数据代表的具体信息在【dl_dxf.cpp】中可以看到它的组码,再结合DXF参考手册,就可以理解数据含义并进行绘制。
【POINT】
void MyDXFReader::addPoint(const DL_PointData &data)
{
}
点的构造非常简单,只需要data.x, data.y
【LINE】
void MyDXFReader::addLine(const DL_LineData &data)
{
}
线的构造也非常简单,直接读取开始点和结束点,组成一条线,data.x1, data.y1; data.x2, data.y2
【CIRCLE】
void MyDXFReader::addCircle(const DL_CircleData &data)
{
}
圆的构造需要圆心和半径。读取data.cx, data.cy,data.radius
【ELLIPSE】
void MyDXFReader::addEllipse(const DL_EllipseData &data)
{
}
椭圆的构造需要中心点,相对于中心点的主轴点,起始角和终止角(非整椭圆)所以读取的参数有data.cx, data.cy,data.mx, data.my,data.angle1, data.angle2
【ARC】
void MyDXFReader::addArc(const DL_ArcData&data)
{
}
圆弧所需数据主要有圆心,半径,起始角,终止角以及三个方向的拉伸方向值。因为其中心点是在OCS中表示的坐标值,而在绘制时应该使用WCS,所以此时需要根据拉伸方向进行坐标转换。对于拉伸方向的值原dxflib库并没有进行提取,直接认为使用的是默认值。所以需要自行在DL_ArcData构造函数和读取函数中进行值的添加。
【文档参考】
【OCS与WCS介绍】
http://bbs.xdcad.net/forum.php?mod=viewthread&tid=667490&highlight=trans
【OCS到WCS的具体转换】
文献:潘晓. 基于CAD图的提取运动控制信息方法的研究与实现[D]. 燕山大学, 2006.(重要)
参考上述文献中的算法就能够进行坐标的转换。
【POLYLINE 和 LWPOLYLINE】
void MyDXFReader::addPolyline(const DL_PolylineData&data)
{
}
void MyDXFReader::addVertex(const DL_VertexData&data)
{
}
在dxflib库中多段线图元和优化多段线图元均是通过这两者读出,首先在addPolyline(const DL_PolylineData&data)中获得点数(data.number)和标志位(data.flags),其中点数表示了addVertex中的点数,而标志位则表示了该多段线的闭合。需要注意的是在读写LWPOLYLINE时所构成的点需要考虑点的凸度,如果凸度不为0,则需要进行弧的绘制。查看参考手册可知,此时也需要考虑坐标点OCS到WCS的转换。
【文档参考】
【DXF文件中将多段线凸度转换成圆弧】
https://blog.csdn.net/eickandy/article/details/48317855
【DIMENSION】
DXF文件中有多种标注。根据DXF参考手册可以为每种标注构造相应结构。标注的绘制主要是得到插入点与插入值,然后再结合标注点绘制出标注信息。
比如对齐标注。
void MyDXFReader:: addDimAlign(const DL_DimensionData &data1,
const DL_DimAlignedData &data2)
{
}
由DXF参考手册可知其标注插入点为data1.dpx, data1.dpy,插入值的中点为data1.mpx,data1.mpy。再由data2得到标注点信息data2.epx1, data2.epy1和data2.epx2, data2.epy2。再根据DXF参考手册该页面最下面提供给的标注图形参考,既可绘制出标注信息。其他几个标注类似于此进行添加。
【TEXT和MTEXT】
对于文本信息的添加,TEXT指单行文本,MTEXT指多行文本。在本工程中只读出了文本内容并显示在所指定处,并不设定其相应文本样式。下面简单介绍添加多行文本。
void MyDXFReader::addMText(const DL_MTextData &data)
{
}
主要读取插入点data.ipx, data.ipy以及文本内容data.text。然后将文本显示在指定点附近。
【INSERT】
对于插入块的读取,需要借助于Block段的读取,即将所有的Block进行存储,在插入块时,遍历存储的Block,找到对应名字的块进行插入,因为块中的图元与实体段中的图元种类类似,所以本工程将实体段中的图元与块段中的图元进行分别存储,只有插入块的图元能够被绘制,而实体段中所有的图元都将被绘制。
void MyDXFReader::addInsert(const DL_InsertData &data)
{
}
void MyDXFReader:: addBlock(const DL_BlockData &data)
{
}
选取data.name,遍历存储的Block,找到需要插入的块。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)