016集——n等分cad多段线、弧、圆等——vba实现

        cad命令行输入“div”选择图元后可n等分图元,若图中有大量图元需要n等分,这时可借助vba一键实现。

        代码逻辑框架为:通过创建句柄函数来选择实体,通过sendcommand函数向命令行输入命令。

先来个小程序练练手:在屏幕上指定两点划线,然后等分该线段。

Sub n等分cad多段线()
'2024年3月7日16:49:46 by qq:443440204
    Dim startPoint As Variant
    Dim endPoint As Variant
    Dim pp As Variant ''必须为变体变量,否则数组不能赋值
    Dim lineObj As AcadEntity
    Dim numSegments As Integer
    Dim lineHandle As String
    Dim divCommand As String
   numSegments = 20 ' 获取要等分的段数
   startPoint = thisdrawing.Utility.GetPoint(, "Enter start point: ")
   endPoint = thisdrawing.Utility.GetPoint(, "Enter end point: ")
   i1 = UBound(startPoint) - 1
   ReDim pp(i1) As Double ''只能为double,否则划线函数报错
   For i = 0 To UBound(startPoint) - 1
     pp(i) = startPoint(i)
   Next
   j = UBound(pp)
   i2 = j + UBound(endPoint)
   ReDim Preserve pp(i2) As Double
   For i = 0 To UBound(endPoint) - 1
     j = j + 1
     pp(j) = endPoint(i)
   Next
    ' 画线
    Set lineObj = thisdrawing.ModelSpace.AddLightWeightPolyline(pp)
    ' 获取线的LISP句柄
    lineHandle = obj2lsp(lineObj)
    ' 获取要插入的段数
    'numSegments = thisdrawing.Utility.GetInteger("Enter number of segments: ")
    '构建DIV命令的LISP字符串
    'divCommand = "_div " & lineHandle & vbCr & numSegments
    thisdrawing.SendCommand "_div "
    thisdrawing.SendCommand lineHandle & vbCr & numSegments & vbCr
MsgBox "已完成", , "版权@qq:443440204"
End Sub
Function obj2lsp(myobj As AcadEntity) As String
    Dim objHandle As String
    objHandle = myobj.Handle
    obj2lsp = "(handent " & Chr(34) & objHandle & Chr(34) & ")"
End Function

         由下图可见,线画出来了,n等分的点也出来了。

        继续升级一下代码功能,选择图中所有多段线、二维多线段、弧、圆、样条曲线、 直线等,然后n等分:

Sub n等分cad多段线_弧_圆等()
'2024年3月7日16:49:46 by qq:443440204
Dim ent As AcadEntity
Dim numSegments As Integer
Dim lineHandle As String
Dim divCommand As String
Dim fy(0) As Integer, fd(0) As Variant
fy(0) = 0: fd(0) = "point"
Set sel = creatsel()
sel.Select acSelectionSetAll, , , fy, fd
Dim pt As AcadEntity
For Each pt In sel
     pt.Delete '等分之前先把图中所有点删除
Next
    ' 获取要插入的段数
numSegments = 12
On Error Resume Next
fy(0) = 0: fd(0) = "circle,*line,arc"
Set sel = creatsel()
sel.Select acSelectionSetAll, , , fy, fd
For Each ent In sel
    ' 获取线的LISP句柄
    lineHandle = obj2lsp(ent)
    ' 获取要插入的段数
    ' numSegments = thisdrawing.Utility.GetInteger("Enter number of segments: ")
    thisdrawing.SendCommand "_div "
    thisdrawing.SendCommand lineHandle & vbCr & numSegments & vbCr
Next
MsgBox "已完成", , "版权@qq:443440204"
End Sub
Function obj2lsp(myobj As AcadEntity) As String
    Dim objHandle As String
    objHandle = myobj.Handle
    obj2lsp = "(handent " & Chr(34) & objHandle & Chr(34) & ")"
End Function
Public Function creatsel() As AcadSelectionSet
On Error Resume Next
Dim sel As AcadSelectionSet
   If Not IsNull(thisdrawing.SelectionSets.Item("mysel")) Then
       Set creatsel = thisdrawing.SelectionSets.Item("mysel")
       creatsel.Delete
''如果图中有名为"mysel"的选择集,那么把这个选择集放入sel中,然后删除这个选择集
    End If
''如果图中没有"mysel",那么新建一个名为"mysel"的选择集,赋给sel这个对象
Set creatsel = thisdrawing.SelectionSets.Add("mysel")
End Function








见下图,所有图元已12等分。

原创代码,以上代码版权归本博所有,引用请注明连接 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/436993.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt练习案例

记录一下qt练习案例,方便学习qt知识点 基本部件 案例1 需求,做一个标签,显示"你好"知识点,QLabel画面 4. 参考,Qt 之 QLabel 案例2 需求,做一个标签,显示图片 知识点,…

R语言lavaan结构方程模型(SEM)

结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、…

基于dashscope在线调用千问大模型

前言 dashscope是阿里云大模型服务平台——灵积提供的在线API组件。基于它,无需本地加载大模型,通过在线方式访问云端大模型来完成对话。 申请API key 老规矩:要想访问各家云端大模型,需要先申请API key。 对于阿里云&#x…

【开源】SpringBoot框架开发陕西非物质文化遗产网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

有趣的CSS - 圆点交互按钮

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是一个有意思的圆点交互文字按钮效果。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页…

关于汽车E\E架构演进的思考(1)

目录 1.电子电气架构概述 2.下一代架构面临的挑战 2.1 如何实现功能融合 2.2 整车通信的限制 2.3 如何保证融合ECU的功能安全和信息安全 3.小结 最近这段时间,汽车电子电气架构迭代的风吹得很猛烈。其中就包括国际MCU大厂纷纷对自家新推出的高性能MCU打得广告…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

HelpLook VS GitBook:知识库优劣详解

在信息爆炸的时代,企业要保持竞争优势,就必须善于管理和利用内部的知识资产。企业知识库作为一种集中存储和共享知识的工具,正在成为现代企业不可或缺的一部分。 HelpLook和Gitbook是提供专业知识库的两个平台,也被大众熟知。它们…

@ResponseStatus

目录 概述: 用途: 参数: 注意事项: 自定义异常类: 底层原理: 概述: 在 Spring MVC 中,我们有很多方法来设置 HTTP 响应的状态码其中最直接的方法:使用 ResponseSt…

教程篇:Groq API+沉浸式翻译插件 体验最快AI翻译

1、进入https://console.groq.com/keys 申请一个API(目前免费!抓紧白嫖) 2、安装Chrome插件:沉浸式翻译。 https://immersivetranslate.com/ 3、照着抄(注意将apikey,换成自己申请的groq的api-key&…

中间件 | Redis - [基本信息]

INDEX 1 常规用法2 QPS3 pipeline 1 常规用法 分布式锁 最常见用法,需要注意分布式锁的redis需要单点 分布式事务 分布式事务中,核心的技术难点其实是分布式事务这个事本身作为数据的持久化 2PC,比如 seata 的 AT 模式下,将 un…

哈希图的应用

位图 位图的概念 首先我们根据一个面试题来进入位图的理解 1. 面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 大家思考一下,如果按照我们以往的思维,用直接遍历的方法…

猫毛过敏又不想扔掉猫怎么办?如何养猫?热门宠物空气净化器分享

养了猫咪一年多,忽然发现自己患上了过敏性鼻炎和结膜炎,就是那种一靠近猫咪就会不断打喷嚏、流鼻涕、流眼泪的症状。有时候还会感到眼睛发痒,发红。有没有什么好的方法治疗过敏性鼻炎呢? 医生建议,从根本上解决问题需…

uniapp图片涂鸦插件(支持多种涂鸦方式,图片放大缩小)

工程地址https://gitee.com/geshijia/ct-graffiti ct-graffiti涂鸦组件使用说明 参考说明 参考链接:https://github.com/ylyuanlu/yl-graffiti 感谢作者的付出,给我提供了一些思路,并做了如下优化: 增加图片放大缩小移动功能添…

刷题日记:面试经典 150 题 DAY5

刷题日记:面试经典 150 题 DAY4 125. 验证回文串28. 找出字符串中第一个匹配项的下标151. 反转字符串中的单词6. Z 字形变换68. 文本左右对齐 125. 验证回文串 原题链接 125. 验证回文串 双指针,一前一后,遇到非数字字母跳过即可 class So…

passwd: Authentication token manipulation error

passwd: Authentication token manipulation error 身份验证令牌操作错误。 可能原因: 1、密码文件无修改权限(有i权限) lsattr /etc/{passwd,shadow} 取消方法 chattr -i /etc/passwd chattr -i /etc/passwd 2、/文件系统无空间或者无inod…

文件另存为保存:无法在未启用宏的工作簿中保存以下功能,

Wb.DoNotPromptForConvert true; Wb.Application.DisplayAlerts false;

【unity小技巧】Unity人物衣服布料系统的探究 —— Cloth组件

文章目录 一、Cloth组件解释基本介绍出于性能的考虑, 可以对Cloth产生影响的Collider只有两种打开编辑模式绘制 二、基本使用1. 创建出一个空物体2. 在空物体上添加cloth组件,可以直接点击Add Component搜索cloth添加,也可以在工具栏 Component–>phy…

GOWIN软件使用

1、管脚复用 根据自己需求把复用管脚勾选上,管脚当普通管脚使用 JTAG设置成普通管脚,下载程序时候JTAGEN管脚需要上拉高电平(可以在下载器线上上拉个电阻,下载后把下载线拔走,否则JTAG管脚无法使用,管脚充…

2010练习题

5&#xff0c; //几个类&#xff08;Vehicle类 Car类 Streetwheel类 Brake类&#xff09;有着必然的联系&#xff0c;设计类与实现 #include<iostream> using namespace std; class Vechile{public:virtual void function() 0; }; class Streetwheel{public:Streetwhee…
最新文章