Hatch,CAD填充块的深度解析
与CAD填充块的多次死磕
对于二次开发来说CAD的图元数据结构令人费解,在我想编写填充块的拓扑操作(即合并、切割、交错、剪去等)时,发现hatch的结构比较复杂。开篇记录,以供参考。
同一闭合polyline,通过“点选”与“对象”选择生成的填充块数据结构是不同的
“点选”生成的填充块由点构成边界数据,而“对象选择”生成的填充块由line构成边界数据;
!!!注意该填充块的边界为polyline不含arc元素,否则会更复杂,下面会细细分析。
第一种情况(边界由多段线polyline构成,且为实心)
((-1 . <图元名: -235bb0>)
(0 . “HATCH”)
(330 . <图元名: -237308>)
(5 . “1C2”)
(100 . “AcDbEntity”)
(67 . 0)
(410 . “Model”)
(8 . “0”)
(100 . “AcDbHatch”)
(10 0.0 0.0 0.0)
(210 0.0 0.0 1.0)
(2 . “ANGLE”)
(70 . 0)
(71 . 1)
(91 . 1)
(92 . 1)
(93 . 6);边界路径的边数,当边界路径中含有arc圆弧时,则构成边界的最小单位是line与arc,而不是polyline
a
(72 . 1)
(10 86.9727 1353.1 0.0)
(11 268.976 2002.6 0.0);11 代表line图元的终点
c
(72 . 2);72 有两种含义1种为”有凸度“(之后会讲),在此为第二种含义,表示为弧
(10 597.121 1910.64 0.0)
(40 . 340.785);表示半径大小
(50 . 3.41481);起点角度
(51 . 5.38143);端点角度
(73 . 0) ;when 72 is 2 it mean this is an arc ,and 73 stand by the arc is anti clocking
;73 代表弧为逆时针
e
(72 . 2)
(10 232.05 1448.93 0.0)
(40 . 929.389)
(50 . 5.38143)
(51 . 6.14828)
(73 . 0)
f
(72 . 1)
(10 1152.99 1573.93 0.0)
(11 1003.49 1054.33 0.0)
g
(72 . 1)
(10 1003.49 1054.33 0.0)
(11 535.482 755.562 0.0)
h
(72 . 1)
(10 535.482 755.562 0.0)
(11 86.9727 1353.1 0.0)
(97 . 1) ;it stand by the objects number ,which consist into the hatch. such as ,through select a point in the boundary which around by arcs ovals plines line and so on
;97代表围合成闭合边界的对象数量
(330 . <图元名: -235c78>) ;point the ployline which consist into the hatch
;该图元名指向,生成填充块所参照的边界对象
‘’‘
。。。此处略有删减,无关紧要的数据
’‘’
)
续接上文,上文是通过“对象选择”生成的填充块,下面展示点选的数据有何不同
“。。。“;此处省略
(72 . 1)
(73 . 1)
(93 . 6)
(10 1152.99 1573.93 0.0) ;此处的数据可以与上图的数据作比较皆是同一个边界所生
(42 . 0.194097) ;成的填充块
(10 808.487 2177.96 0.0)
(42 . 0.535516) ;注意此时42所代表的含义与上述并不相同,此时表示为
(10 268.976 2002.6 0.0) ;”凸度“,即记录圆弧的方式也不同,上述是通过半径与圆心
(42 . 0.0) ;记录,此处是通过圆弧的起点,终点与弧度来记录
(10 86.9727 1353.1 0.0)
(42 . 0.0)
(10 535.482 755.562 0.0)
(42 . 0.0)
(10 1003.49 1054.33 0.0)
(42 . 0.0)
(97 . 1)
(330 . <图元名: -235c78>)
(75 . 0)
(76 . 1)
(47 . 3.86737)
(98 . 1)
(10 425.02 1474.33 0.0)
“。。。“;此处省略
第二种情况(填充块有多个内部边界,即有多个孔洞)
”以下情况为让大家清晰明白,点坐标由字母代替,不再贴上原数据“
物选生成的填充块 (72 . 1) a2->b2 (72 . 1) b2->c2 (72 . 1) c2->d2 (72 . 1) d2->a2 (97 . 1) (330 . <内部对象2>) (92 . 16) (93 . 3) (72 . 2) 3r3 (72 . 2) 3r2 (72 . 2) 3r1 (97 . 1) (330 . <内部对象3>) (92 . 16) (93 . 4) (72 . 1) a1->b1 (72 . 1) b1->c1 (72 . 1) c1->d1 (72 . 2) 1r1 (73 . 0) (97 . 1) (330 . <内部对象1>) (92 . 1) (93 . 6) (72 . 1) a->b (72 . 2) 0r1 (72 . 2) 0r2 (72 . 1) f->g (72 . 1) g->h (72 . 1) h->a (97 . 1) (330 . <外部边界>) (75 . 0) (76 . 1) (98 . 1) (10 0.0 0.0 0.0) | 点选生成的填充块 (92 . 7) (72 . 1) (73 . 1) (93 . 6) d b a h g i (97 . 1) (330 . <外部边界>) (92 . 22) (72 . 1) (73 . 1) (93 . 4) a1 b1 c1 d1 (97 . 1) (330 . <内部对象1>) (92 . 22) (72 . 0) (73 . 1) (93 . 4) d2 c2 b2 a2 (97 . 1) (330 . <内部对象2>) (92 . 22) (72 . 1) (73 . 1) (93 . 3) c3 b3 a3 (97 . 1) (330 . <内部对象3>) (75 . 0) (76 . 1) (47 . 6.75797) (98 . 4) (10 3104.7 1667.23 0.0) (10 3104.7 1667.23 0.0) (10 3104.7 1667.23 0.0) (10 3104.7 1667.23 0.0) |