Pycomcad快速绘制参数化多段线的一种方法

  • 任务:
image-20210517141143663

绘制出不同长度的相同型式的多段线,如上图所示,仅仅是300mm和500mm的区别,3个弯折处都一样,都是圆弧段,对于常规二次开发思路,是通过数学计算,计算出圆弧的圆心的位置,用固定的半径,绘制固定的圆弧,然而着这种方法太繁琐,下面介绍一种新的思路,避免进行这样的数学计算。

其思路如下:

(1)首先收集给定的多段线的坐标:

p=acad.GetEntity()
p=p[0]
coords=p.Coordinates()

如果用coords重新直接绘制多段线会发现它是这样的:

acad.AddLwpline(*coords)
image-20210517141846211

可以发现没有了圆弧,直接从圆弧的两个端点绘制出了其割线,那么如何得到割线对应的圆弧呢?SetBulge()方法来帮忙!

image-20210517143055740

其index是多段线的段数索引,从0开始,value是bulge值,大小是弧顶点到割线的距离与割线一半之比,正数代表逆时针绘制,负数代表顺时针绘制。

(2)接下来,对所收集的coords进行处理,一个很自然的想法就是将点0~67~12形成的折线平移至最低点,折线的中点与19点齐平,然后指定高度L后,分别将7~12的折线向上平移L/2,0~6的折线向上平移L-30,然后再对特定的段数SetBulge即可!

image-20210517143030251

import numpy as np
b=coords.reshape(-1,2)
c=b-b[-1]
c[7:13,1]-=((c[9]+c[10])/2)[1] #对7~12点形成的折线进行向下平移
c[0:7,1]-=((c[3]+c[4])/2)[1]#对0~6点形成的折线进行向下平移
import pickle
with open(r'FeatureParameter.pkl','wb') as f:
    pickle.dump(c,f)                             #对求得的特征参数c进行储存
#然后用整理过后的参数c来求得不同L下的多段线的各点坐标,最后施加SetBulge即可
def drawYePian(acad,L,c):
    X,Y,Z=acad.GetPoint()
    coords=c.copy()
    coords[7:13,1]+=L/2
    coords[0:7,1]+=L-30
    coords+=np.array([X,Y])
    pline=acad.AddLwpline(*coords.ravel().tolist())
    for i,j in zip([1,3,5,7,9,11,13,15,17],[0.2,-0.4,0.2,-0.2,0.4,-0.2,0.2,-0.4,0.2]):
        pline.SetBulge(i,j)

总结来讲,就是通过收集已有多段线的坐标参数,然后处理形成特征数据,最后根据特征数据和给定长度生成多段线的坐标,最后再用SetBulge()方法获取到圆弧。该方法避免了进行繁琐的数学计算,直接利用已有多段线本身的数据,不失为一种好的方法!

##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
原文地址:https://www.cnblogs.com/johnyang/p/14776898.html