AutoCAD *.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形(★firecat推荐★)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: AutoCAD *.dxf文件解析,使用dxflib搞定polyline/spline/ellipse等复杂图形(★firecat推荐★)

一、简介


DXF官方帮助:https://help.autodesk.com/view/OARX/2019/ENU/


网络可以搜索到非常多的dxf解析博客,但是几乎没有人能完整地实现polyline/spline/ellipse等复杂图形的解析和绘制。


因为dxf的解析较为复杂,涉及的元素很多,例如block解析,图形平移,缩放,参照系坐标等等,另外还有polyline/spline/ellipse等复杂图形,而polyline又存在凸度的问题需要解决。


dxflib开源库实现了dxf文件的解析。所有的图元解析完后,都会通过DL_CreationAdapter的虚函数接口回调,所以我们要继承这个类,重写想绘制的图元的方法,比如直线对应的就是virtual void addLine(const DL_LineData&); 这个DL_LineData结构体数据保存的就是我们要绘制直线的数据。

本人使用dxflib开源库,连续奋战,克服重重困难,终于实现了以下元素的解析和绘制:


元素:point、line、circle、arc、polyline、spline、ellipse、text


其他:layer、block、insert、min、max


绘制图形,使用了opencv,把dxf转化成为png文件。以下举例说明:


图1:涵盖了上述的所有元素

image.png



图2:椭圆和样条曲线

image.png



图3:polyLine多线实体,注意四个角的倒角圆弧,就是凸度计算得来

image.png



图4:图形旋转平移缩放的经典案例

image.png



二、DXF Spline的格式说明

Group codes Description 
100
 Subclass marker (AcDbSpline) 
210
 Normal vector (omitted if the spline is nonplanar)
DXF: X value; APP: 3D vector
220, 230
 DXF: Y and Z values of normal vector
70
 Spline flag (bit coded):
1 = Closed spline
2 = Periodic spline
4 = Rational spline
8 = Planar
16 = Linear (planar bit is also set) 
71
 Degree of the spline curve
72
 Number of knots
73
 Number of control points
74
 Number of fit points (if any)
42
 Knot tolerance (default = 0.0000001)
43
 Control-point tolerance (default = 0.0000001)
44
 Fit tolerance (default = 0.0000000001)
12
 Start tangent--may be omitted (in WCS).
DXF: X value; APP: 3D point.
22, 32
 DXF: Y and Z values of start tangent--may be omitted (in WCS).
13
 End tangent--may be omitted (in WCS).
DXF: X value; APP: 3D point.
23, 33
 DXF: Y and Z values of end tangent--may be omitted (in WCS)
40
 Knot value (one entry per knot)
41
 Weight (if not 1); with multiple group pairs, are present if all are not 1
10
 Control points (in WCS) one entry per control point.
DXF: X value; APP: 3D point
20, 30
 DXF: Y and Z values of control points (in WCS) (one entry per control point)
11
 Fit points (in WCS) one entry per fit point.
DXF: X value; APP: 3D point
21, 31
 DXF: Y and Z values of fit points (in WCS) (one entry per fit point)
----------------------------------------中文说明:---------------------------------
样条曲线组码
组码
 说明
100
 子类标记 (AcDbSpline) 
210
 法向矢量(如果样条曲线为非平面型,则省略)
DXF:X 值;APP:三维矢量
220, 230
 DXF:法向矢量的 Y 值和 Z 值(可选)
70
 样条曲线标志(按位编码):
1 = 闭合样条曲线
2 = 周期样条曲线
4 = 有理样条曲线
8 = 平面
16 = 线性(同时设置平面位) 
71
 样条曲线的阶数
72
 节点数
73
 控制点数
74
 拟合点数(如果有)
42
 节点公差(默认值 = 0.0000001)
43
 控制点公差(默认值 = 0.0000001)
44
 拟合公差(默认值 = 0.0000000001)
12
 起点切向 — 可以省略(在 WCS 中)
DXF:X 值;APP:三维点
22, 32
 DXF:起点切向的 Y 值和 Z 值 — 可以省略(在 WCS 中)
13
 端点切向 — 可以省略(在 WCS 中)
DXF:X 值;APP:三维点
23, 33
 DXF:端点切向的 Y 值和 Z 值 — 可以省略(在 WCS 中)
40
 节点值(每个节点一个条目)
41
 权值(如果不为 1);对于多组对,如果均不为 1,则出现。
10
 控制点(在 WCS 中);每个控制点一个条目
DXF:X 值;APP:三维点
20, 30
 DXF:控制点的 Y 值和 Z 值(在 WCS 中);每个控制点一个条目
11
 拟合点(在 WCS 中);每个拟合点一个条目
DXF:X 值;APP:三维点
21, 31
 DXF:拟合点的 Y 值和 Z 值(在 WCS 中);每个拟合点一个条目
相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
106 2
|
3月前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
549 2
|
18天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
88 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
689 0
|
3月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
603 60
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
52 3
|
2月前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
3月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
3月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
59 3
|
3月前
|
存储 机器学习/深度学习 数据可视化
解析exe文件
如何使用`objdump`工具解析exe文件,包括exe文件的组成、`objdump`的用法以及如何查看exe文件的节头信息和完整内容。
123 0
解析exe文件

热门文章

最新文章

推荐镜像

更多