基于AutoCAD―VBA的对象交互式操作方法探讨

时间:2022-10-19 04:56:45

基于AutoCAD―VBA的对象交互式操作方法探讨

摘 要:VBA是一个AutoCAD应用程序集成开发环境,是一种面向对象的可视化结构编程语言,被广泛应用于各领域的实际工作中。通过VBA对AutoCAD的二次开发,设计了一个对对象组合、拆散的应用程序,比较之前的命令行对话框的操作,提高了工作效率,实际应用效果良好。

关键词:AutoCAD;VBA;对象;交互式

1 概述

AutoCAD中对象的组合拆散是一组常用操作,可以通过Group命令实现对对象的组合[1],但组合拆散对象时必须都在对话框状态下进行,而且不能先选定后操作,操作不便捷[2]。到了2002版本之后,AutoCAD菜单中甚至取消了这个命令。但在实际绘图中,对象的组合、拆散功能队绘图有很大的帮助,因为在选择对象时,组合在一起的对象可以一次性选定而不需要逐个对象选择。所以,通过编程实现快捷使用对象组合拆散功能,是这个程序编写的目的。

程序设计思路是去掉对话框,只要选定对象后输入一个相应的组合命令就可以直接将选定的对象综合在一起,而且不需要命名。拆散对象也是同样的道理。选定组合,输入拆散的命令就可以直接将组合在一起的对象拆散。

2 实例分析

文章通过AutoCAD-VBA设计一个组合拆散对象的应用程序。

(1)运行AutoCAD2004,在【VBA管理器】对话框中新建一个全局工程[3],进入VBA集成开发环境,将其名称修改为“匿名组”,保存在适当的位置上。

(2)在【工程资源管理器】窗口中双击ThisDrawing,打开该模块的代码窗口,首先其中添加对象组合的代码:

Sub AddUnNameGroup( )

Dim SelObjects As AcadSelectionSet

Dim ppendObjs( ) As AcadEntity

Set SelObjects=GetSelSet

Dim UnNameGroup As AcadGroup

Set UnNameGroup=ThisDrawingGroups.Add(“*”)

ReDim appendObjs(0 To SelObjects.Count-1)

Dim I As Integer

For i=0 To SelObjects.Count-1

Set appendobjs(i)=SelObjects.Item(i)

Next

UnNameGroup.AppendItems appendobjs

End Sub

(3)在ThisDrawing模块的代码窗口中,添加通过选择对象所在的组,分解组的代码:

Sub DelUnNameGroup( )

Dim SelGroup As AcadGroup

Dim SelObjects As AcadSelectionSet

Set SelObjects=GetSelSet

Dim ObjInSelSet As AcadObject

Dim I As Integer

Dim j As Integer

Dim k As Integer

Dim ObjInGroup As AcadObject

On Error Resume Next

For i=0 To SelObjects.Count-1

Set ObjInSelSet=SelObjects.Item(i)

For j=0 To ThisDrawing.Groups. Count-1

For k=0 To ThisDrawing.Groups.Item(j). Count-1

Set ObjInGroup=ThisDrawing.Groups.Item(j).Item(k)

If ObjInGroup.ObjectID=ObjInSelect.ObjectID Then

ThisDrawing.Groups.Item(j).Delete

Exit For

End If

Next

Next

Next

End Sub

这段代码的实现过程由于不能通过选定的对象来直接找到其组合名称,只能通过循环比较对象ID的方法来解决这个问题。运行时可能会慢点,但对象不多的情况下其运行速度还是很快的。

(4)在AutoCAD安装路径的Support目录下的新建一个命名为UnNameGroup.lsp的文文章件,文件内容如下:

(defun c:ga( ) (princ))

(defun c:gd( ) (princ))

3 实例效果

(1)在AutoCAD 2004中,加载UnNnameGroup.lsp文件。

(2)选定图形中的部分对象,在命令行中输入“ga”并按下Enter键,此时选定的对象将自动组合起来。

(3)选定刚组合的对象,在命令行中输入“gd”并按下Enter键,此时选定的组合将自动拆散。

4 总结与提高

通过这个程序的设计,实现了通过代码语言实现匿名的组合,匿名的组合可以使用下面的语句生成:ThisDrawing.Groups.Add(“.”)就是名称项中用“.”即可生成匿名块[4]。组合的操作与选择集的操作相似,都应该先生成一个空的组合,然后把对象添加到其中。由于通过对象不能确定对象是否是组合中的一员,所以必须遍历组合中的对象与指定对象相比较来确定指定对象是否为指定组合中的对象。虽然在帮助文件中说明组合是一种特殊的命名选择集,但这里选择集的概念只对于AutoCAD中的选择集而言,而不是对于ActiveX中的选择集。可以通过使用“PickfirstSelectionSet”方法来实现先选择后操作,但这个方法有一定的限制,因为在指定VBA过程运行前我们总是要通过其他命令来加载运行,这样在加载运行过程中图形中选定的选择集将会消失。所以我们这里采用的是自动触发运行的方法,也就是通过一个空的LISP程序来触发相应的事件运行相关的过程。在实际使用过程中,程序运行稳定,提高了工作效率,效果良好。

参考文献

[1]郭庆龙.AutoCAD VBA在铁路信号工程设计中的应用[J].硅谷,2015(03):82.

[2]张勇.数字图像修复关键技术的研究与实现[J].安阳师范学院学报,2014(02):32-35.

[3]张帆,郑立楷,王华杰.AutoCAD VBA开发精彩实例教程[M].清华大学出版社,2004.

[4]王超英.开发AutoCAD图形软件实现图面设置自动化[J].管理与技术,2005(4):92-93.

作者简介:郑宾(1978-),男,汉族,陕西渭南人,学士,讲师,研究方向为计算机科学与技术。

上一篇:浅析地铁牵引供电系统对配电网的谐波影响 下一篇:没有赢家的婆媳大战