VB对AutoCAD二次开发案例-编辑版-创建菜单栏

2018-12-24 00:11

VBA对AutoCAD二次开发

开发背景

因为公司电脑的layout设计部门人员不能将元器件转换为3D,故而每次需要结构工程师自行将元器件的2D图处理后导入三位软件进行3D绘制,在处理二维工程图时,出现很多小圆弧,小圆弧处于不同的层,依次删除小圆弧很繁琐造成工作效率低下。

故而通过创建一个菜单栏,将删除小圆弧的程序全部放入一个菜单之下,实现自动化操作

操作的流程如下:

连接AutoCAD→获取AutoCAD的菜单组链接→创建菜单→创建菜单项→将菜单显示到AutoCAD中→编辑圆弧删除程序。

详尽代码

一、在VB中连接AutoCAD的。在VBA中则可以跳过此步

Application 对象是VB 应用程序与AutoCAD 之间链接的关键。将Application 对象与 AutoCAD 链接是为AutoCAD 二次开发应用程序的第一步工作。

当AutoCAD 运行时,GetObject 函数返回Application 对象,否则发生一个错误,这时Err对象的基础属性就会被赋值为一个非零值,可以利用一个错误陷井进行处理。

如果AutoCAD 没有运行,可以使用CreateObject 函数强迫AutoCAD 启动。

Dim myapp As Object

On Error Resume Next

如果已有CAD程序打开,则 Set myapp = GetObject(, \直接获得CAD的控制句柄 myapp.Visible = True

If Err <> 0 Then 如果没有CAD程序打开,则Set myapp = CreateObject(\通过开启cad软件获得CAD myapp.Visible = True 的控制句柄 End If

注意: GetObject(, \里面的那个逗号的来源请仔细阅读VB程序帮助里

面的解释

二、创建菜单(在VBA环境下)

代码如下:

取得AutoCAD的菜单组的 Public Sub menu()

链接 Dim my_菜单组 As AcadMenuGroup

Set my_菜单组 = ThisDrawing.Application.MenuGroups.Item(0) Dim my_弹出式菜单 As AcadPopupMenu

Set my_弹出式菜单 = my_菜单组.Menus.Add(\乾康工具集\

Dim my_弹出式菜单项 As AcadPopupMenuItem Dim openMacro As String

创建一个名为乾康工具集的新菜单

Set my_弹出式菜单项 = my_弹出式菜单.AddMenuItem(0, \删除圆及圆弧\-VBARUN DEL_ACR + chr(13) \

my_菜单组.Menus.InsertMenuInMenuBar \乾康工具集\

注:无论是使用InsertMenuInMenuBar方法还是

InsertInMenuBar方法来加载菜单,被加载菜单都必须要有菜单

End Sub

创建一个名为删除圆及圆弧的下拉菜单项

-VBARUN DEL_ACR + chr(13)在宏名称之前添加 -VBARUN是因为从AutoCAD 工具栏或菜 单运行 VBA 宏。Macro 特性必须设置为等于 -VBARUN filename.dvb!modulename.macroname

其中,filename 是工程文件的名称,modulename 是包含要运行的宏的模块名称,而macroname 是要运行的宏的名称。只有在当前 AutoCAD 任务中未加载文件时,才需要文件 名。如果提供了文件名,将会加载该文件。

注:图示解释相关名称

菜单组,个人认为AutoCAD中就只有一个菜单中

菜单,需要使用PopupMenus里面的Add方法来创建新的菜单

菜单项,需要使用PopupMenu新的菜单 这些都是工具条

里面的

AddMenuItem方法来创建

下图中的“文件”“编辑”“视图”??“帮助”这些合起来就是菜单组(MenuGroup) 而“文件”“编辑”“视图”这些单独描述就是弹出式菜单(PopupMenu)

再则,标注底下的“快速标注”“线性”“对齐”等,就是特定菜单里面的菜单项(PopupMenuItem)

三、自动加载VBA工程文件(在VBA环境下)

此处不需要用代码来实现,仅仅需要进入Autocad进行一次设置即可,操作参见下图 A、 点击 “工具” 选项

B、选择工具下拉菜单中的”加载应用程序”选项,在弹出的对话框中点击”内容”选项

C、在接下来的对话框中点击”添加”,来添加需要自动加载的VBA工程文件

四、自动运行VBA工程文件中自己设置的宏文件(在VBA环境下),本例中的宏名称menu

首先介绍一下Autocad帮助文件中关于自动运行宏文件的说明

用户可以自动运行VBA工程文件中的任何宏,方法是从 AutoCAD 启动功能(如 acad.lsp)中使用 VBARUN 的命令行版本调用。例如,要自动运行名为 drawline 的宏,请先将 drawline 宏保存在VBA工程文件中。然后调用记事本程序新建一个txt文档 并在 文档中中创建(或附加)下面几行:

(defun S::STARTUP()

(command \)

然后将text文档的文件名(包含后缀名)改为acad.lsp

将宏命名为 AcadStartup,这样在加载 VBA 时就会自动运行该宏。当加载 VBA 时,将自动执行 acad.dvb 文件中所有名为 AcadStartup 的宏。

依据以上信息,结合本例,本文要自动运行的宏名称问menu。 操作如下:

A、在电脑桌面上,新建一个文本文档,名称为acad.lsp。 B、双击文件,在文档中写入如下代码,然后保存 (defun S::STARTUP()

(command \)

C、将acad.lsp放入Autocad安装目录下的Support文件夹内即可

五、编写删除圆弧的宏程序(在VBA环境下),本例中的宏名称DEL_ACR()

初略思路为程序运行过程中,弹出窗体文件,由用户输入需要删除的圆弧的半径范围 然后创建一个选集,将符合条件的圆弧加入选集,然后执行选集里面的元素删除代码即可

A、首先创建一个窗体对象,其中textbox1和textbox2的文本控件用于传递圆弧的半径范围

Textbox1文本输入框 Textbox2文本输入

Private Sub CommandButton1_Click()

窗体的名称定为”删除元和窗体” 删除圆弧窗体.Hide

在设定号圆弧半径值后,调用hideEnd Sub

命令隐藏窗体

Private Sub UserForm_Initialize() TextBox1.Text = 0.01 TextBox2.Text = 0.25 End Sub

B、编写删除圆弧的代码,依次创建选择集名称,设置过滤器规则。给选集增加对象,遍历选集对象执行删除命令。 Public Sub DEL_ACR()

窗体显示,用于设置圆弧半径

删除圆弧窗体.Show On Error Resume Next

创建圆弧选择集。

Dim my_圆弧选择集 As AcadSelectionSet

VBA对象浏览器

Set my_圆弧选择集 = ThisDrawing.SelectionSets.Item(\圆弧集\

中有Item和Add的详细说明。 使用时注意Auotcad对象的层级关系

my_圆弧选择集.Delete Set my_圆弧选择集 = ThisDrawing.SelectionSets.Add(\圆弧集\ Dim FilterType(6) As Integer Dim FilterData(6) As Variant FilterType(0) = -4 FilterData(0) = \ FilterType(1) = 0

1、过滤器参数FilterType和 FilterData(1) = \

FilterData必须设置成数组形式, FilterType(2) = -4

成对出现,数组元素一一对应, FilterData(2) = \

即FilterType(2) 对应 FilterType(3) = 40

FilterData(2) 。 FilterData(3) = Val(删除圆弧窗体.TextBox1.Text)

2、过滤器参数需要引用《DXF 参 FilterType(4) = -4

考手册》里面的组码值 FilterData(4) = \

FilterType(5) = 40

FilterData(5) = Val(删除圆弧窗体.TextBox2.Text)

过滤器列表中的逻辑运算符也由

FilterType(6) = -4

-4 组代码表示,运算符以小于号

FilterData(6) = \

开始 (<),以大于号结束 (>)。

my_圆弧选择集.SelectOnScreen FilterType, FilterData Dim i As Integer For i = 0 To my_圆弧选择集.Count - 1 使用for循环函数遍历选择 my_圆弧选择集.Item(i).Delete 集里面的对象进行删除 Next my_圆弧选择集.Delete End Sub

注:在Autocad中选择集删除的方式对比

RemoveItems 方法从选择集中删除一个或多个项。删除的项仍然存在于图形中,但不再包含在选择集中。

Clear 方法将清空选择集。选择集仍然存在,但不再包含任何项。原来包含在选择集中的项仍然存在于图形中,但不再包含在选择集中。

Erase 方法删除选择集中的所有项。选择集仍然存在,但不再包含任何项。原来包含在选择集中的项也不再存在。

Delete 方法删除选择集和其中的所有项。调用 Delete 方法之后,选择集和原来包含在选择集中的项都将不再存在。

此为本案例的dvb工程文件

案例文件.zip


VB对AutoCAD二次开发案例-编辑版-创建菜单栏.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浅析媒介生态学视野下主持人的口语表达

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: