【精选】CAD中的dxf文件解析(三):多段线篇 您所在的位置:网站首页 无法导出多段线边界是什么意思 【精选】CAD中的dxf文件解析(三):多段线篇

【精选】CAD中的dxf文件解析(三):多段线篇

2023-11-14 18:10| 来源: 网络整理| 查看: 265

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为两个角点,那么四分之一圆弧角为图中\alpha /2\beta为圆周角,\alpha的圆心角,很显然\beta =\alpha /2。则A1,A2两个角点的凸度为tan\beta。那现在

已知:角点A1,A2的坐标,tan\beta

求:圆心、半径

 这里用的方法是旋转变换公式来的,以A1,A2的中点A0为旋转中心,(r-H)为半径的点B进行顺时针旋转90°来得到圆心O,x0,y0为A0坐标,x,y为B坐标,其中B坐标可以根据向量公式\overrightarrow{A0B}=\lambda \overrightarrow{A2A1}来得到,其中\lambda =\frac{r-H}{L}=\frac{1}{2tan\alpha }

旋转公式为:{x}'=(x-x0)*cos\theta -(y-y0)*sin\theta +x0

                      {y}'=(x-x0)*sin\theta -(y-y0)*cos\theta +y0

这里的角度为90°,则公式变为:

{x}'=x0-(y-y0)

{y}'=y0+(x-x0)

算得圆心坐标为:x=\frac{1}{2}*((x1+x2)-(y2-y1)*\mu )

                               y=\frac{1}{2}*((y1+y2)-(x2-x1)*\mu )

                              \mu =\frac{1}{tan\alpha }

注意事项:(1)如果用线段和圆弧元素来表示多段线,需要注意排序问题和数量问题;

                    (2)有的时候会判断多段线是否封闭,要看70后面的数值,如果是0则不封闭,为0是封闭的。

暂时先写这么多。。。。

参考文献:(1)CAD help文件

                    (2)dxf中凸度的计算_yishang44的博客-CSDN博客_dxf凸度



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有