最近解析CAD的DXF文件时需要对合并后的多线段LWPOLYLINE组码进行解析,网上搜集了些相关资料,借鉴并摘录,同时记录下链接,以防重新搜索。
1.“已知圆弧的起点、端点和凸度,计算圆心”--
起点(x1,y1),端点(x2,y2);
b= 0.5*(1/bulge-bulge); --bulge为凸度
圆心x = 0.5*((x1+x2)-(y2-y1)*b);
圆心y = 0.5*((y1+y2)+(x2-x1)*b);
(由起点或端点,和圆心可计算出圆半径)
结论:http://blog.sina.com.cn/s/blog_66349acf0102vivw.html
推导过程:https://blog.csdn.net/jiangyb999/article/details/89366912
解析CAD,通过凸度值绘制弧线:https://zhuanlan.zhihu.com/p/348798153
凸度--CAD多段线中的弧定义:https://blog.csdn.net/codedecipher/article/details/103014471
AutoCAD 凸度(bulge)的概念及使用WPF函数画图https://www.cnblogs.com/yuanchenhui/p/autocad_bulge.html
2.凸度定义:
①凸度是圆弧圆心角的四分之一的正切
bulge=h/s=tan(2α/4) --(h为弧的弓高,s为弦长的一半,2α表示圆心角)
②凸度等于圆弧的弓高和圆弧的前进距离的比,即凸度=2H/L,H为弓高,L为前进的长度,也即弦长。bulge=2H/L=tan(β)=tan(α/2)
③凸度为0或无,表示直线;
④凸度的正负表示圆弧的方向,
bulge > 0 时:代表起始点沿逆时针转到终止点,角度是逐渐变大的;
bulge < 0 时:代表起始点沿顺时针转到终止点,角度是逐渐变小的。
3.DXF中对LWPOLYLINE的解析参考:
优化多段线组码 | |
---|---|
组码 |
说明 |
100 |
子类标记 (AcDbPolyline) |
90 |
顶点数 |
70 |
多段线标志(按位编码);默认值为 0: |
43 |
固定宽度(可选;默认值 = 0)。如果设置为可变宽度(代码 40 和/或 41),则不使用 |
38 |
标高(可选;默认值 = 0) |
39 |
厚度(可选;默认值 = 0) |
10 |
顶点坐标(在 OCS 中),多个条目;每个顶点一个条目 |
20 |
DXF:顶点坐标的 Y 值(在 OCS 中),多个条目;每个顶点一个条目 |
40 |
起点宽度(多个条目;每个顶点一个条目)(可选;默认值 = 0;多个条目)。如果设置为固定宽度(代码 43),则不使用 |
41 |
端点宽度(多个条目;每个顶点一个条目)(可选;默认值 = 0;多个条目)。如果设置为固定宽度(代码 43),则不使用 |
42 |
凸度(多个条目;每个顶点一个条目)(可选;默认值 = 0) |
210 |
拉伸方向(可选;默认值 = 0, 0, 1) |
220, 230 |
DXF:拉伸方向的 Y 值和 Z 值(可选) |
4.附一段弧和直线合并形成的多段线组码实例:
LWPOLYLINE
5
2E0B0
330
1F
100
AcDbEntity
8
0
100
AcDbPolyline
90
4
70
1
43
0.0
10
411.0409991769569
20
533.2047196659034
42
-0.1846606338755925
10
911.0409991769484
20
533.2047196659033
10
911.0409991769484
20
233.2047196659017
10
411.0409991769522
20
233.2047196659019
42
-0.2679491924311228
0
VIEWPORT
感谢万能的百度和无私贡献的大佬们!