1.前言
在前面的CAD中的dxf文件解析(二)中讲到了一些CAD的dxf文件解析点、线、圆弧、圆、块等的思路。下面提供链接:
(二): CAD中的dxf文件解析(二):dxflib的使用_不爱学习 未完待续的博客-CSDN博客_dxflib
(一):CAD中的dxf文件解析(一):准备工作_不爱学习 未完待续的博客-CSDN博客_dxf解析
关于官方demo文件的下载,还可以参考:
dxflib-src.rar_dxflib-互联网文档类资源-CSDN下载
Dxf_C帮助文档.zip-互联网文档类资源-CSDN下载
今天主要说一下多段线数据的解析。
2.多段线数据的解析
先看看多段线长什么样子
直观上看,多段线由线和圆弧构成,但是相邻的线、圆弧是连接起来的。但是从多段线在含义上看来,它其实是由一个个角点连接起来的。
如下面图1为一个多段线,图2所示,为dxf文本中对多段线的描述,LWPOLYLINE标记着进入多段线的描述(文件保存版本为2000以上),如果是POLYLINE则表示为比较老的标本。图3为对polyline的组码的说明,其中10,20之后的数据为角点的x,y坐标,42之后的数据为角点的凸度,其中为负说明圆弧的方向为顺时针方向,为正说明圆弧方向为逆时针方向。
图1.多段线 图2.多段线的dxf文本
图3.多段线的组码说明
如上面所说,多段线是由线和圆弧组成,对于线的话,则42后的数据为0或者没有,线的解析直接就是线起点和线终点。
如果42后的数据不为0,则角点和角点之间连接的为圆弧,圆弧的起点和终点也就是相邻角点的坐标,关键是怎么利用凸度的信息。
我们在CAD的help中找到对凸度的解释:凸度是四分之一圆弧段角的切线,如果从起点到端点,圆弧为顺时针,则为负数。凸度为 0 表示一条直线段,角点为连接直线的两个端点。凸度为 1 表示一个半圆。
凸度不为0时为圆弧,那如何来得到圆弧的圆心和半径信息呢?
这里我觉得yishang44这里解释的挺好,放上他计算的链接:
dxf中凸度的计算_yishang44的博客-CSDN博客_dxf凸度
为了防止他博客丢失,我在这里抛转做一些解释和说明吧。前面说到CAD里的说法是:凸度是四分之一圆弧段角的切线,这里用的是yishang44的图。
如果A1,A2为两个角点,那么四分之一圆弧角为图中,为圆周角,的圆心角,很显然。则A1,A2两个角点的凸度为。那现在
已知:角点A1,A2的坐标,
求:圆心、半径
这里用的方法是旋转变换公式来的,以A1,A2的中点A0为旋转中心,(r-H)为半径的点B进行顺时针旋转90°来得到圆心O,x0,y0为A0坐标,x,y为B坐标,其中B坐标可以根据向量公式来得到,其中
旋转公式为:
这里的角度为90°,则公式变为:
算得圆心坐标为:
注意事项:
(1)如果用线段和圆弧元素来表示多段线,需要注意排序问题和数量问题;
(2)有的时候会判断多段线是否封闭,要看70后面的数值,如果是0则不封闭,为0是封闭的。
参考文献:(1)CAD help文件
(2)dxf中凸度的计算_yishang44的博客-CSDN博客_dxf凸度