ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-05-17 15:02:23  阅读:185  来源: 互联网

标签:acad SetBulge 0.2 Pycomcad coords 折线 圆弧 绘制 化多段


  • 任务:
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()方法获取到圆弧。该方法避免了进行繁琐的数学计算,直接利用已有多段线本身的数据,不失为一种好的方法!

标签:acad,SetBulge,0.2,Pycomcad,coords,折线,圆弧,绘制,化多段
来源: https://www.cnblogs.com/johnyang/p/14776898.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有