java read dxf xdata_DXF格式文件数据提取

java read dxf xdata_DXF格式文件数据提取图元信息提取 下面具体介绍该工程中读取的几种图元 对图元信息的提取需要结合 DXF 参考手册以及库文件 主要涉及 dl entities h 和 dl dxf cpp 选取实际所需数据进行自定义图元信息构造 比如说绘制二维平面图形 则不需要 z 轴坐标 此时只需要读取 data 中 x y 值即可 而在绘制 ARC 时 需要考虑到 OCS 到 WCS 的变化 而库文件读取的 data 中没有涉及到拉伸方向的读取 所以此时需要

图元信息提取:

下面具体介绍该工程中读取的几种图元。

对图元信息的提取需要结合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=&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/

【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,找到需要插入的块。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210944.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:32
下一篇 2026年3月18日 下午11:33


相关推荐

  • R语言_根据马科维茨投资组合理论画出最优投资组合线

    R语言_根据马科维茨投资组合理论画出最优投资组合线以 3 只股票的 156 个交易日对数收益率为例 data lt read csv dayly stocks csv 数据读取 R lt 100 array c data 平安银行 data 万科 A data 神州高铁 dim c 156 3 计算平均收益率与协方差矩阵 mean vect apply R 2 mean na rm TRUE mean vectcov mat cov R use complete obs sd vect sqrt di

    2026年3月16日
    2
  • office 快捷键

    office 快捷键Word1 用于设置字符格式和段落格式的快捷键 nbsp Ctrl Shift P 改变字号 office 适用 nbsp Ctrl Shift 增大字号 PPT 适用 nbsp Ctrl Shift nbsp Ctrl 逐磅增大字号 PPT 适用 nbsp Ctrl 逐磅减小字号 PPT 适用 nbsp Ctrl D 字体快捷键 nbsp Shift F3 切换字母大小写 PPT 适用 nbsp Ctrl Shift A 将

    2026年3月19日
    1
  • QCustomPlot使用手册(一)

    QCustomPlot使用手册(一)QCustomPlot是一个基于Qt的画图和数据可视化C++控件。QCustomPlot致力于提供美观的界面,高质量的2D画图、图画和图表,同时为实时数据可视化应用提供良好的解决方案。

    2022年10月16日
    5
  • Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略

    Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略OpenCV OpenSourceCo 是一个开源的计算机视觉和机器学习软件库 OpenCV 的建立是为了为计算机视觉应用程序提供一个通用的基础设施 并加速在商业产品中使用机器感知 作为 bsd 许可的产品 OpenCV 使企业可以很容易地利用和修改代码 该库有超过 2500 个优化算法 其中包括经典和最先进的计算机视觉和机器学习算法的综合集 这些算法可以用来检测和识别人脸 识别物体 对视频中的人类动作进行分类 跟踪相机运动 跟踪移动的物体

    2026年3月20日
    2
  • C++路标设置「建议收藏」

    C++路标设置「建议收藏」B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。输入格式:第1行包括三个数l(0<l≤1000,000,00

    2022年8月12日
    10
  • Centos7下Rinetd安装与应用[通俗易懂]

    转自http://www.cnblogs.com/zhenyuyaodidiao/p/5540209.htmlLinux下做地址NAT有很多种方法。比如haproxy、nginx的4层代理,linux自带的iptables等都能实现。haproxy、nginx就不说了,配置相对简单;iptables配置复杂,概念也比较多DNAT、SNAT、PREROUTING、POSTROUTING等等。其实

    2022年4月17日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号