• 任务:

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

其思路如下:

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

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

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

acad.AddLwpline(*coords)

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

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

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

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

Pycomcad快速绘制参数化多段线的一种方法的更多相关文章

  1. CSS实现自适应分隔线的N种方法

    分割线是网页中比较常见的一类设计了,比如说知乎的更多回答 这里的自适应是指两边的横线会随着文字的个数和父级的宽度自适应 偷偷的看了一下知乎的实现,很显然是用一块白色背景覆盖的,加一点背景就露馅了 心想 ...

  2. CSS巧妙实现分隔线的几种方法

    单个标签实现分隔线: 点此查看实例展示 .demo_line_01{ padding: 0 20px 0; margin: 20px 0; line-height: 1px; border-left: ...

  3. [No000018D]Vim快速注释/取消注释多行的几种方法-Vim使用技巧(2)

    在使用Vim进行编程时,经常遇到需要快速注释或取消注释多行代码的场景,Vim教程网根据已有的教程介绍,总结了三种快速注释/取消注释多行代码的方法. 一.使用Vim可视化模式快速注释/取消注释多行 在V ...

  4. 文字在线中间,CSS巧妙实现分隔线的几种方法

    单个标签实现分隔线: .demo_line_01{ padding: 0 20px 0; margin: 20px 0; line-height: 1px; border-left: 200px so ...

  5. 【转】CSS实现自适应分隔线的N种方法

    1.伪元素+transform:translateX(-100%); 主要原理是设置文本居中text-align: center;,然后给定两个伪元素,分别绝对定位,那么此时伪元素也是跟随着水平居中的 ...

  6. Cesium实现文字、点、多段线、多边形的实时绘制

    背景知识 点.线.面以及文字的实时绘制是GIS很重要的一个功能,是用户对感兴趣区域标注的业务需要.同时Cesium提供了点.线(多段线).面及文字(label)绘制的接口,绘制方式总共有两种,一种是通 ...

  7. CAD交互绘制多段线(网页版)

    多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下 ...

  8. CAD交互绘制多段线(com接口)

    多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下 ...

  9. CAD参数绘制多段线(com接口)

    多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定 ...

  10. CAD参数绘制多段线(网页版)

    多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定 ...

随机推荐

  1. Typecho的Joe主题新增QQ打开自动跳转到浏览器

    前言 QQ抽风,很多站长的网站都被屏蔽白了,我的也不例外 而且很多人上午解了下午又白,所以我就想做一个跳转,跳转到浏览器访问 然后看到执念有教程,就直接搬过来了,也就当做个备份吧 效果图 QQ内打开: ...

  2. Spark - [03] 资源调度模式

    题记部分 一.Local模式 1.1.概述 Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试的. 可以通过以下几种方式设置Master (1)local:所欲计算都运行在一个 ...

  3. mybatis - [07] 模糊查询

    题记部分 (1)mapper类 List<User> getUserLike(String value); (2)mapper.xml <!-- 写法1 --> <sel ...

  4. C#方法练习

    提示用户输入用户名和密码,写一个方法来判断用户输入的是否正确,返回给用户一个登陆结果,并且还要单独的返回给用户一个登陆信息 ,如果用户名错误,除了返回登陆结果之外,还要返回一个 "用户名错误 ...

  5. linux下安装cmake版本

    点击查看代码 要在基于ARM的Linux系统上安装CMake 3.19.3版本,你可以按照以下步骤进行操作: 1. **下载CMake 3.19.3版本的ARM架构压缩包**: 你可以从CMake的官 ...

  6. 记录一次关于使用leaflet draw 插件叠加图层删除绘制层无法删除的问题

    问题描述 业务逻辑是这样的:再地图上已经绘制了一个多边形区域,然后需要再绘制的区域下再绘制下级区域,使用插件可以正常绘制并保存绘制数据,然后再回显编辑的时候,此时地图展示了上级多边形区域(该区域未追加 ...

  7. Vim编辑windows格式文件出现的[noeol][dos]的含义、解决方法及方法解释

    文章目录 前言 [dos] [noeol] 前言 最近想要将保存再windows的文件传到linux上,传进去保存文件之后,用vim打开发现在文件的底下出现了[dos] [noeol]这两个标志.然后 ...

  8. SQL Server 中的异常处理

    为什么我们需要 SQL Server 中的异常处理? 让我们通过一个示例来了解 SQL Server 中异常处理的必要性.因此,创建一个 SQL Server 存储过程,通过执行以下查询来除以两个数字 ...

  9. K8s Ingress, 你这个老6

    本文是有态度马甲的第185篇原创. 本文记录了k8s中核心对象Ingress的产生背景和实现机制. 我们都知道k8s Service是一种将Pods通过网络暴露出来的抽象,每个服务定义了一组有关Pod ...

  10. 适配器设计模式--java进阶day03

    1.设计模式 通俗来讲,设计模式就是其他程序员遇到某些问题时的解决经验,我们学习设计模式,在遇到了同样的问题后便可解决 2.适配器设计模式 有人可能会感到疑惑,接口和实现类会有什么问题,我们举两个例子 ...