AutoCAD VBA二次开发初级教程
AutoCAD官方二次开发教程
第 1章 Hello World: 工程的创建在这一章中,我们将不使用ObjectARX向导来创建一个新的工程。
我们将使用Visual Studio .NET来创建一个新的类库工程。
通过这个工程,你可以创建一个能被AutoCAD装载的.NET dll文件。
这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。
当用户运行这个命令后,在AutoCAD 命令行上将显示“Hello World”文本。
1) 启动Visual ,选择”文件>新建>工程”(File> New> Project)。
在新建工程对话框中选择工程类型为”Visual Basic 工程”,然后选择”类库”模板,在工程名字框中输入”Lab1”,然后选择工程存放的位置。
点击确定按钮来创建工程。
2) 在工程的Class1.vb文件中,一个公有类“Class1”已经被系统自动创建了。
接下来向这个类加入命令。
要加入命令,你必须使用AutoCAD .NET托管封装类。
这些托管封装类包含在两个托管模块中。
要加入对这两个托管模块的引用,请用鼠标右键单击”引用”然后选择”添加引用”。
在弹出的”添加引用”对话框中选择”浏览”。
在”选择组件”对话框中,选择AutoCAD 2006的安装目录(这里假定为C:\Program Files\AutoCAD 2006\),在这个目录下找到“acdbmgd.dll”然后选择并打开它。
再一次选择”浏览”,在AutoCAD 2006的安装目录下找到“acmgd.dll”并打开它。
当这两个组件被加入后,请单击”添加引用” 对话框中的”确定”按钮。
正如它们的名字所表示的,acdbmgd.dll包含ObjectDBX 托管类,而acmgd.dll包含AutoCAD托管类。
3) 使用对象浏览器(Visual 的”查看>其它窗口>对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。
VB与AutoCAD二次开发入门技巧资料_13066-ARX
编写第一个ARX程序以一个实际的程序为例子,讲述如何在AutoCAD14 上开发ARX 程序。
这里采用的是MSVC++5.0 编译器,如果读者使用的是MSVC++4.2b ,其开发步骤几乎是完全一样的。
在传统的C语言程序设计教材中经常可以看到下面的一个程序:#include<stdio.h>main(){printf(“Hello,world!\n”);}在本章中,我们将给出用ARX开发的类似的程序helloarx,它只是简单的在AutoCAD的“Command:”提示符下打印“Hello,ARX!”。
建立一个ARX程序的第一步是创建一个CPP和DEF文件。
下面是文件hello.cpp的清单。
/*********helloarx.cpp*********/#include<stdlib.h>#include<aced.h>#include<adslib.h>void hello();void initApp();void unloadApp();extern "C"AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode, void*);// 往命令堆栈中增加命令void initApp(){acedRegCmds->addCommand("TSIN_HELLO", "hello", "hello", ACRX_CMD_MODAL, hello);"}//从命令堆栈中删除该应用程序的命令组void unloadApp(){acedRegCmds->removeGroup("TSIN_HELLO");}//程序入口AcRx::AppRetCodeacrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) {switch (msg) {case AcRx::kInitAppMsg:acrxDynamicLinker->unlockApplication(pkt); initApp();break;case AcRx::kUnloadAppMsg:unloadApp();}return AcRx::kRetOK;}//命令函数void hello(void){ads_printf("Hello, ARX!");}DEF文件必须包括一个描述行,并对变量arxEntryPoint,SetacrxPtp和acrxGetApiVersion进行定义。
cad二次开发基础教程和实例档
大家知道什么是宏吗?说白它就是VBA过程。
看下面的代码:Public Sub MacroDemo()MsgBox "Hello,Welcome to AutoCAD VBA!"End Sub这就是宏。
打开CAD输入命令vbaide回车会出现VBA的编辑界面,双击ThisDrawing在右侧的代码区输入上面的代码。
如下图:然后按F5键会出现宏窗口,如下图:点击运行,大家看到什么?这就是一个最简单的一个用VBA对CAD进行二次开发的程序,也就是宏那什么是VBA呢?VBA就是VB的一个子集它的全称是Visual Basic For Application,它具有VB的大部分功能。
既然我们选择了VBA,我们首先要知道VBA能操作CAD里的哪些对象呢?打开VBAIDE窗口按下F2键会出现对象浏览器。
如下图库选择AutoCAD,这时下面显示的就是CAD为VBA提供的可操作的对象的类了。
这时有的人因没有基础,所以还是一头雾水,别怕,选中一个类图标后按F1,这时会弹出AutoCAD ActiveX and VBA Reference,选择最上面的一个子项Object Model(对象模型),这个就是在CAD里那些对象的关系,如下图:如果英文不好的话,可以安装CAD2000,它的这个部分是中文的。
为想学好VBA二次开发这个是必需的,而且VBA对Office的二次开发也是这样的。
这个在编程界叫做Active X,包括Active X控件、Active X DLL、和Active X EXE就好比一个程序为其它程序提供的一个后门一样下面我就给大家讲一下菜单吧。
因为我们用到的其它公司做CAD二次开发的插件,从直观上首先接触的就是它的菜单,刚开始用的时候就是从它的菜单开始接触的。
我经常用到的做菜单的方法有两种,一种是用CAD的菜单文件,另一种就是用VBA代码直接长成菜单。
我先介绍第一种,CAD的菜单文件它是文本文件,我们用记事本就可打开并编辑它,或者再重新创建一个说到这里有的人可能要问了,我应该从何处开始入手呢,要怎样做呢?别急,CAD本身就有现成的供我们参考,就放在CAD的安装文件夹下的Support文件夹内,或者其它插件的文件夹内,找不到可以按F3搜一下,扩展名分别为.mnu .mns ,mnc默认的菜单文件是acad.mnu。
CAD二次开发手册
VBA 开发手册 第一章 VBA 入门 了解嵌入和全局 VBA 工程 AutoCAD VBA 工程是代码模块、类模块和窗体的集合,它们组合起来以执行给予的功能。
工程可保存在 AutoCAD 图形中,或作为独立的文件保存。
嵌入工程是保存在 AutoCAD 图形中。
当包含有这些工程的图形中 AutoCAD 打开时,他们可以自动地装载,这种方法可以很方便地分发工程给用户。
嵌入工程也有它的极限,它不能打开或关闭 AutoCAD 图形,那是由于他们的函数只存在于工程所在的文档中。
使用嵌入工程不需要在运行程序之前查找并装载工程文件。
举个含有嵌入工程的图形的例子,当图形打开时,一个时间日志被触发。
通过这样一个宏的应用可以登记并记录用户在该图形上所花费的时间。
这时用户不必去记住在打开图形之前装载工程,这就是自动操作的一个很好的例子。
全局工程保存在独立的文件中,它更加通用,因为他们能在 AutoCAD 图形中运行,也能打开、关闭AutoCAD 图形,但它在图形打开时不能自动装载。
用户必须知道他们所需要的宏包含在哪个工程文件中。
然而,全局工程非常容易与其它使用者共享,它可以将通用的宏做为很好的库而存在。
举个例子,你保存在一个工程文件中的宏是有关多个图形的材料清单。
这个宏可以在工作周期的末期由管理员运行,这样就可以收集到所有图形的信息。
在特定的时间,用户可以在同个AutoCAD 进程中同时装载嵌入工程和全局工程。
AutoCAD VBA 工程与 Visual Basic 工程在二进制结构上是不兼容的。
然而,其中的窗体、模块和类可以通过在 VBAIDE 环境中使用输入和输出 VBA 命令来在工程之间进行转换。
关于VBA IDE 的更多信息,可以查看“用 VBA IDE 编辑工程” 用 VBA 管理器组织工程你可以使用 VBA 管理器查看装载在当前 AutoCAD 进程的所有 VBA 工程。
VBA 管理器一个AutoCAD 工具,它允许你装载、卸载、保存、创建、嵌入和分离VBA 工程。
VB与AutoCAD二次开发入门技巧资料_13062-ARX
ARX 程序的装载和卸载---- 1. ARX 程序的装载---- ARX 应用程序的装载有以下几种方法:---- (1)在AutoCAD 启动文件acad.rx 中指定待装入的ARX 应用程序名。
acad.rx 是ASCII 文本文件,每个ARX 应用程序必须单独占一行,AutoCAD 启动时会自动装载该文件中的ARX 应用程序。
另外,应确保$ACAD 路径定义中包括文件acad.rx 的存放目录。
---- (2)用acrxLoadModule() 或AcRxDynamicLinker::loadModule() 函数,在一个ARX 应用程序里装载另一个ARX 应用程序。
这两个函数的原型是:---- int acrxLoadModule(char *moduleName, int printit);---- virtual Adesk::Boolean AcRxDynamicLinker::loadModule (char *fileName, int printIt) = 0;---- 其中各参数含义如下:---- moduleName:待装载的ARX 应用程序名;ARX 应用程序扩展名默认为.ARX,如果不是.ARX,则此处char *moduleName 参数必须包括应用程序扩展名。
---- fileName:含义与上述moduleName 相同。
但是fileName 必须包括待装载的ARX 应用程序的路径和扩展名。
---- printit:取0 则不显示装载结果,取非0 值则显示。
当printit 取非0 值时,如装载成功,则在AutoCAD 命令窗口显示“Runtime Extension is already loaded.",否则,显示“AcRxDynamicLinker failed to load "。
"---- acrxLoadModule() 与AcRxDynamicLinker::loadModule 不同的是:acrxLoadModule() 从$ACAD 定义的AutoCAD 搜索路径自动搜索待装载的ARX 应用程序,并默认ARX 应用程序扩展名为.ARX。
autocad二次开发(VBA)就这么简单
autocad二次开发(VBA)就这么简单autocad二次开发(VBA)就这么简单运行autocad,创建一个新文件,Alt+F11(或者在菜单栏点“工具”→“宏”→“Visual Basic 编辑器”),在新出现的窗口菜单栏点“插入”→“模块”,输入下面的代码:Sub 我的第一个程序()Dim 直线1 As AcadLineDim 起点(0 TO 2) As DoubleDim 端点(0 TO 2) As Double起点(0) = 10起点(1) = 20端点(0) = 80端点(1) = 100Set 直线1 = ThisDrawing.ModelSpace.AddLine(起点, 端点)End Sub检查一下,确信没有问题后按F5回到autocad窗口,看见了吗?一条直线,起点坐标(10,20),端点坐标(80,100) 这个程序的第一行里,“SUB”和“()”是必须有的(人家微软就是这么规定的,我也没办法),“我的第一个程序”是这个程序的名字(如果你不喜欢也可以改个别的名字,我无所谓)。
第二行里,“Dim”是定义一个变量,“直线1”是要画的直线的名字(随便改,中英文都行),后面的英文必须有,意思是说:这是一条autocad直线。
第三行里,“起点(2)”是一个数组(因为我要用它给直线赋予起点,所以取了个直观的名字,又因为点的坐标是三维的,所以必须用能容纳三个数据的数组),后面的英文意思是“这个数据是双精度类型”。
第四行和第三行差不多,是用来给直线赋予端点的。
第五行和第六行是分别赋值给起点的x和y坐标(因为起点的z坐标是0,而定义这个数组的时候,默认数据就是(0,0,0),所以就不用管z坐标了)。
第七行、第八行赋值给端点x和y坐标。
第九行画直线,在“当前文件”的“模型空间”“画直线(按起点和端点)”。
第十行,完事了。
有的网友一看见英文,头就会变大。
别怕,如果你是用“复制/粘贴”把这段代码拷贝到VB编辑器里,就不会知道autocad有多么友善。
1-AutoCAD VBA二次开发
AutoCAD VBA的语法
控制语句(判断语句、循环语句……) if\else\end if for…next 函数(function) 过程(sub) 参数传递 地址传递(byref) 值传递(byval)
AutoCAD宏的定制与调用
VBA工程的建立与加载 Load、unload、embed 宏 run、edit、run into
AutoCAD二次开发
Visual Basic for Application 二次开发技术
VBA简介
Visual Basic for Applications(VBA)是一 种Visual Basic的一种宏语言,主要能用来扩 展Windows的应用程式功能。 VBA是VB语言的子集,是寄生于VB和应用程 序的版本 AutoCAD的VBA开发以VB 6.0的语法为基础
VBA的代码示例
7、数据单位转换
jd = ThisDrawing.Utility.AngleToReal(30, 0) ’30度转换为弧度
பைடு நூலகம்
VBA的代码示例
8、用户交互
Dim retVal As String retVal = ThisDrawing.Utility.GetString(1, vbCrLf & "Enter your name: ") Dim startPnt As Variant, endPnt As Variant Dim prompt1 As String, prompt2 As String prompt1 = vbCrLf & "Enter the start point of the line: " prompt2 = vbCrLf & "Enter the end point of the line: " startPnt = ThisDrawing.Utility.GetPoint(, prompt1) endPnt = ThisDrawing.Utility.GetPoint(startPnt, prompt2) ThisDrawing.ModelSpace.AddLine startPnt, endPnt ThisDrawing.Application.ZoomAll
AutoCAD二次开发教程
第 1章 Hello World: 工程的创建在这一章中,我们将不使用ObjectARX向导来创建一个新的工程。
我们将使用Visual Studio .NET来创建一个新的类库工程。
通过这个工程,你可以创建一个能被AutoCAD装载的.NET dll文件。
这个dll文件会向AutoCAD加入一个名为“HelloWorld”的新命令。
当用户运行这个命令后,在AutoCAD 命令行上将显示“Hello World”文本。
1) 启动Visual ,选择”文件>新建>工程”(File> New> Project)。
在新建工程对话框中选择工程类型为”Visual Basic 工程”,然后选择”类库”模板,在工程名字框中输入”Lab1”,然后选择工程存放的位置。
点击确定按钮来创建工程。
2) 在工程的Class1.vb文件中,一个公有类“Class1”已经被系统自动创建了。
接下来向这个类加入命令。
要加入命令,你必须使用AutoCAD .NET托管封装类。
这些托管封装类包含在两个托管模块中。
要加入对这两个托管模块的引用,请用鼠标右键单击”引用”然后选择”添加引用”。
在弹出的”添加引用”对话框中选择”浏览”。
在”选择组件”对话框中,选择AutoCAD 2006的安装目录(这里假定为C:\Program Files\AutoCAD 2006\),在这个目录下找到“acdbmgd.dll”然后选择并打开它。
再一次选择”浏览”,在AutoCAD 2006的安装目录下找到“acmgd.dll”并打开它。
当这两个组件被加入后,请单击”添加引用” 对话框中的”确定”按钮。
正如它们的名字所表示的,acdbmgd.dll包含ObjectDBX托管类,而acmgd.dll包含AutoCAD托管类。
3) 使用对象浏览器(Visual 的”查看>其它窗口>对象浏览器”菜单项)来浏览加入的两个托管模块所提供的类。
第三章 AutoCAD二次开发
第三章 创建和编辑二维图形对象 一、VBA
Hale Waihona Puke 3.1 直线 Public Sub MacroDemo() Dim doc As AcadDocument Set doc = ThisDrawing.Application.Documents.Add() MsgBox "Hello,Welcome to Autocad VBA" Set doc = ThisDrawing.Application.Documents.Add() Dim ptstart(0 To 2) As Double Dim ptend(0 To 2) As Double ptstart(0) = 1: ptstart(1) = 1: ptstart(2) = 0 ptend(0) = 100: ptend(1) = 100: ptend(2) = 0 ThisDrawing.ModelSpace.AddLine ptstart, ptend End Sub
数据库程序
• Private Sub CommandButton1_Click() • Dim cn As ADODB.Connection • Dim Constr As String • Set cn = New ADODB.Connection • • cn.CursorLocation = adUseClient • cn.Provider = "Microdoft.Jet.OLEDB.4.0;" • Constr = "Data source=c:\db1.mdb" • • cn.Open • End Sub
3.2 圆 Dim ptCen(0 To 2) As Double ptCen(0) = 50: ptCen(1) = 50: ptCen(2) = 0 Set acaddoc = acadapp.ActiveDocument.ModelSpace.Ad dCircle(ptCen, 32)
autocad vba初级教程 (强烈推荐)
Autocad VBA初级教程 (第二课编程基础)Autocad VBA初级教程 (第三课编程基础二)Autocad VBA初级教程 (第四课程序的调试和保存) Autocad VBA初级教程 (第五课画函数曲线)Autocad VBA初级教程 (第六课数据类型的转换) Autocad VBA初级教程 (第七课写文字)Autocad VBA初级教程 (第八课:图层操作)Autocad VBA初级教程 (第九课:创建选择集) 18 Autocad VBA初级教程 (第十课:画多段线和样条线) 20 Autocad VBA初级教程 (第十一课:动画基础) 23 Autocad VBA初级教程 (第十二课:参数化设计基础) 26Autocad VBA初级教程(第一课:入门)1.为什么要写这个教程市面上ACAD VBA的书不多,它的帮助是英文版的,很多人看不懂。
其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA?VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3、VBA有多难?相信大家都知道Basic是的含义。
应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。
4、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。
我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。
Autocad_VBA教程
Autocad VBA初级教程本文是我搜集网上一位高手的教程,整理而成,其中对某些程序进行了拓展。
本人从事选煤厂工程总承包多年,发现业内从大型设计院到小型公司,只是将CAD作为画图板、丁字尺、铅笔的替代品,所有的设计还都基本是手工绘制,远没有充分利用AutoCAD的功能。
即便快捷键这么简单的功能,都有好多人没有掌握如何自定义(通过修改自定义文件,将常用命令都改为左手操作的快捷命令,右手操作鼠标。
例如将原本需要右手操作的画直线命令L,改为左手操作输入FF也能画出直线)。
利用CAD二次开发接口进行设计的更是少之又少,关于CAD二次开发的书籍、资料也是少的可怜。
所以本人搜集、整理此文供AutoCAD VBA初学入门使用,以此共勉,充分利用CAD软件的功能,减少设计中的劳动强度,提高工作效率。
本人也AutoCAD VBA初学者,欢迎交流。
QQ:249365331。
第一课:入门1.为什么要写这个教程市面上ACAD VBA的书不多,它的帮助是英文版的,很多人看不懂。
其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA?VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3、VBA有多难?相信大家都知道Basic是的含义。
应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。
4、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。
AUTOCAD利用VBA进行二次开发
利用VBA对AUTOCAD进行二次开发实例——输入螺栓参数自动生成图形①打开AUTOCAD软件②依次点击工具l菜单,选择,Macro(A),click Visual Basic Editor(B)③打开 Microsoft Visual Basic Editor 窗口.and “公共的额”,之后点击“确定”,如下图所示:.⑤点击.点击:Command:输入螺钉长度完成绘制VBA原程序Public Sub liweiwei()Set acadapp = CreateObject("autocad.application") Dim lineObj As AcadLineDim pt1 As VariantDim d As DoubleDim l As DoubleDim pt2(0 To 2) As DoubleDim pt3(0 To 2) As DoubleDim pt4(0 To 2) As DoubleDim pt5(0 To 2) As DoubleDim pt6(0 To 2) As DoubleDim pt7(0 To 2) As DoubleDim pt8(0 To 2) As DoubleDim pt9(0 To 2) As DoubleDim pt10(0 To 2) As DoubleDim pt11(0 To 2) As DoubleDim pt12(0 To 2) As DoubleDim pt13(0 To 2) As DoubleDim pt14(0 To 2) As DoubleDim pt15(0 To 2) As DoubleDim pt16(0 To 2) As DoubleDim pt17(0 To 2) As DoubleDim pt18(0 To 2) As DoubleDim pt19(0 To 2) As DoubleDim pt20(0 To 2) As Doublept1 = ThisDrawing.Utility.GetPoint(, "输入第一角点")d = Val(InputBox("所绘制螺钉的直径:”) )l = Val(InputBox("所绘制螺钉的长度:"))pt2(0) = pt1(0) + 0.4 * d: pt2(1) = pt1(1): pt2(2) = pt1(2)pt3(0) = pt1(0) + 0.4 * d: pt3(1) = pt1(1) + 1.5 * d: pt3(2) = pt1(2)pt4(0) = pt1(0): pt4(1) = pt1(1) + 1.5 * d: pt4(2) = pt1(2)pt5(0) = pt1(0): pt5(1) = pt1(1) + 0.95 * d: pt5(2) = pt1(2)pt6(0) = pt1(0) + 0.2 * d: pt6(1) = pt1(1) + 0.95 * d: pt6(2) = pt1(2)pt7(0) = pt1(0) + 0.2 * d: pt7(1) = pt1(1) + 0.55 * d: pt7(2) = pt1(2)pt8(0) = pt1(0): pt8(1) = pt1(1) + 0.55 * d: pt8(2) = pt1(2)pt9(0) = pt1(0) + 0.4 * d: pt9(1) = pt1(1) + 1.25 * d: pt9(2) = pt1(2)pt10(0) = pt1(0) + 0.4 * d + l - 1: pt10(1) = pt1(1) + 1.25 * d: pt10(2) = pt1(2) pt11(0) = pt1(0) + 0.4 * d + l - 1: pt11(1) = pt1(1) + 0.25 * d: pt11(2) = pt1(2) pt12(0) = pt1(0) + 0.4 * d: pt12(1) = pt1(1) + 0.25 * d: pt12(2) = pt1(2)pt13(0) = pt1(0) + 0.4 * d: pt13(1) = pt1(1) + 1.25 * d - 1: pt13(2) = pt1(2)pt14(0) = pt1(0) + 0.4 * d + l: pt14(1) = pt1(1) + 1.25 * d - 1: pt14(2) = pt1(2) pt15(0) = pt1(0) + 0.4 * d + l: pt15(1) = pt1(1) + 0.25 * d + 1: pt15(2) = pt1(2) pt16(0) = pt1(0) + 0.4 * d: pt16(1) = pt1(1) + 0.25 * d + 1: pt16(2) = pt1(2)pt17(0) = pt1(0) + 0.4 * d +1:pt17(1) = pt1(1) + 1.25 * d: pt17(2) = pt1(2)pt18(0) = pt1(0) + 0.4 * d + 1 :pt18(1) = pt1(1) + 0.25 * d: pt18(2) = pt1(2)pt19(0) = pt1(0) - 5: pt19(1) = pt1(1) + 0.75 * d: pt19(2) = pt1(2)pt20(0) = pt1(0) + 0.4 * d + l + 5: pt20(1) = pt1(1) + 0.75 * d: pt20(2) = pt1(2) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt1, pt2)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt2, pt3)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt3, pt4)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt4, pt5)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt5, pt6)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt6, pt7)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt7, pt8)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt8, pt1)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt9, pt10)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt10, pt11)Set lineObj = ThisDrawing.ModelSpace.AddLine(pt11, pt12) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt13, pt14) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt14, pt15) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt15, pt16) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt10, pt14) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt11, pt15) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt17, pt18) Set lineObj = ThisDrawing.ModelSpace.AddLine(pt19, pt20)End Sub。
03_AutoCAD VBA二次开发基础
VBA程序(项目)加载与卸载
对于全局项目: (1)加载项目 通过菜单或VBA管理器 通过命令“VBALOAD” (2)卸载项目 VBA管理器 通过命令“VBAUNLOAD” 对于嵌入项目: 打开或者关闭当前图形文件自 动加载与卸载项目
VBA程序(项目)运行
(1)宏 VBA中是指VBA的可执行子 程序 在AutoCAD中也指内部的预 留关键字变量 (2)在VBA IDE内运行 将光标移动到要执行的子程 序内,按“F5”,或者点击菜单 内运行 (3)利用宏管理器 宏菜单 通过命令“VBARUN”或 “APPLOAD”
文字对象的层次关系:
AutoCAD AddText方法的联机帮助
VBA 联机帮助(visual Basic 参考)
VBA程序(项目)保存
(1)嵌入工程 将选定的工程嵌入到指定的图形中, 与图形保存在同一文件中。一个图 形中只能包含一个嵌入工程。不能 将工程嵌入到已包含嵌入工程的图 形中。 (2)全局工程 以dvb为扩展名保存为单独的项目 文件
1.1 问题与解决思路
第一个实例,一个Hello World!程序:
在AutoCAD内创建一个VBA程序,自动创建文字: Hello World!
1.2 对象模型(Object Model) 几个概念(VBA程序的基本架构):
对象 对象是对现实中对象的模型化,是代码和数据的组合, 每一个显露的对象均精确代表一个 AutoCAD 组件.
01 VBA二次开发基础
主要内容:
ActiveX对象模型 第一个示例说明 搭建开发环境 VBA程序(.dvb)的保存与加载、卸载 宏(VBA子程序)的管理与执行
参考教材
1、AutoCAD 自带的帮助 文件:acad_dev.chm中 ActiveX/VB开发人员手册 ActiveX and VBA 2、 AutoCAD VBA IDE 自带的帮助文件中关于VB 的基础语法与语言参考; 3、AutoCAD VBA & 开发基础与实例 教程 4、其它VBA相关资料
VB与AutoCAD二次开发入门技巧资料_13065-AutoCAD
AutoCAD中表格自动化彭德华 工程图纸中经常遇到大量表格填写,例如工程勘察中的成果表、设计的材料表,在AutoCAD中文字处理比较差,用TEXT、DTEXT命令在表格中定位也不方便,填写的表格既不美观,还容易出错。
在一些杂志中有关表格填写程序介绍,但是使用不方便,也不能连续填写多个表格,长距离线路勘察中线转点少则几十个,多则上千,中线数据可由计算直接生成,能否利用中线数据直接填表出图。
利用AutoCAD二次开发,编写中线成果填写程序(zxcg.lsp),改变以往出图工序(填写、校对),大大提高工作效率。
一、程序功能与编写说明 1、本程序具有下列功能: (1)直接在文本编辑器(EDIT、QE、WPS等等)编辑、修改数据,免去AutoCAD文字编辑、修改之不便; (2)可以自动分页,自动填写工程名称、档案号、日期等等; (3)可以自动处理中线成果数据前后的空格,例如: “123123.123”将自动转化为“123123.123”; (4)可以自动识别两种工程名称数据文件; (5)文本状态下数据正确无误,出图前无需在AutoCAD中修改,调图速度和重新成图速度相差无几,可直接保存数据文件,节省磁盘空间。
2、程序说明: 程序利用AutoLISP的计算、判断、字符处理、循环结构以及调用Text命令等功能对读入的数据进行处理后填写,与本程序对应的Zxcg.dwg图形文件含四个表格图块,程序中的有关参数均取决于四个图块。
二、使用说明 1、关于中线成果数据格式: (1)无曲线 第一行,总点数(N) 第二至七行,点名(NAME)、里程(K)、高程(H)、坐标X、Y、转角(B)……重复二至七行(没有数据项用空行代替) (2)有曲线 第一行,总点数(N) 第二至十一行,点名(NAME)、里程(K)、高程(H)、坐标X、Y、转角B,半径R,切线长T、曲线长L、外矢矩E……重复二至十一行(没有数据项用空行代替) 2、关于工程名称数据格式: (1)单标题 第一行,工程名称 第二行,档案号(如测-3777/表,只需输入3777) 第三行,日期(可省略,取当前日期) (2)双标题 第一行,工程名称大标题 第二行,工程名称小标题 第三行,档案号(如测-3777/表,只需输入3777) 第四行,日期(可省略,取当前日期)三、加载及运行{{婓AutoCADR12ㄗ么AutoCADforWindowsㄘ笢ㄛ参Zxcgㄝlsp睿Zxcg ㄝdwg萧探善SUPPORT赽醴翘狟ㄛ蚚扷梓萸恅璃ㄗFileㄘ狟茼蚚最唗ㄗApplicationsㄘㄛ么婓Com珏mandㄩ狟??Appload楼婥Zxcgㄝlspㄛ么婓Commandㄩ狟??ㄗLoad※Zxcg§ㄘ捞褫〔?缀婓Commandㄩ狟??ZX堍俴最唗ㄛ挂最唗蔚笢恅枑尨〔四、结束语 该应用程序提供了两种形式的表格,有兴趣的AutoCAD用户不妨增加几种表格,修改程序中对应的参数即可。
AutoCAD_VBA二次开发初级教程(选做)
AutoCAD VBA二次开发初级教程第一课:入门1.什么是Autocad VBA?VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
2、VBA有多难?相信大家都知道Basic是的含义。
应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。
3、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。
我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。
4、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键Alt+F8,出现宏窗口第三步:在宏名称中填写C100,点“创建”、“确定”第四步:在Sub c100()和End Sub之间粘贴代码第五步:回到模型空间,再次按Alt+F8,点击“运行”Sub c100()Dim cc(0 To 2) As Double '声明坐标变量cc(0) = 1000 '定义圆心座标cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 '开始循环Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆Next iEnd Sub也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
VB与AutoCAD二次开发入门技巧资料_13053-TextBox
能自行调节高度的TextBox概述TextBox 在放到Form 中以后,就不管内容有多少,就是占这么多的地盘,为什么不让它灵活一些呢?每当TextBox 的内容修改好以后,就查看TextBox 的行数是否变化。
如果有改变的话,就把TextBox 的位置调整到合适的位置。
一个可能的应用就是在TextBox 和MsFlexGrid 配合使用的情况,可以动态修改高度。
实现步骤1、开启一个新的工程。
2、增加一个TextBox(Text1),修改BorderStyle 为0-None,MultiLine 为True。
3、在Form1 的声明中增加:Const EM_GETLINECOUNT = &HBAPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongDim LastLine As Long '最后的行数Dim LineHeight '每行的高度4、在Form_Load 过程中增加:Private Sub Form_Load()Set Me.Font = Text1.FontLineHeight = Me.TextHeight("TT")End Sub5、在Text1_Change 中增加代码:Private Sub Text1_Change()Dim Ret As LongRet = SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0&) '取行数If Ret <> LastLine ThenIf Text1.Height + Text1.Top + LineHeight > Me.ScaleHeight And Ret > 1 ThenIf LastLine <= Ret - 1 ThenExit Sub '如果已经是最大高度,保持End IfLastLine = Ret - 1 '超过最大高度ElseLastLine = RetEnd IfText1.Height = LastLine * LineHeight '修改高度End IfEnd Sub6、在Text1_GotFocus 中增加代码:Private Sub Text1_GotFocus()LastLine = SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0&)End Sub7、按F5,开始运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AutoCAD VBA二次开发初级教程第一课:入门1.为什么要写这个教程市面上ACAD VBA的书不多,它的帮助是英文版的,很多人看不懂。
其实我转行已经好几年了,而且手艺也慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA?VBA是Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好VBA可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD命令不可能完成的,只要学好VBA就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3、VBA有多难?相信大家都知道Basic是的含义。
应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一定要提出批评,以便及时更正。
4、怎样学习VBA?介绍大家一个学习公式:信心+恒心=开心。
仔细阅读本教程,完成例题,在学习的过程中一定要多思考,多想一些是什么、为什么。
本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。
本作者在此郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。
我不会发到任何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。
5、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键Alt+F8,出现宏窗口第三步:在宏名称中填写C100,点“创建”、“确定”第四步:在Sub c100()和End Sub之间粘贴代码第五步:回到模型空间,再次按Alt+F8,点击“运行”Sub c100()Dim cc(0 To 2) As Double '声明坐标变量cc(0) = 1000 '定义圆心座标cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 '开始循环Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆Next iEnd Sub也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
第二课编程基础本课主要任务是对上一课的例程进行详细分析下面是源码:Sub c100()Dim cc(0 To 2) As Double '声明坐标变量cc(0) = 1000 '定义圆心座标cc(1) = 1000cc(2) = 0For i = 1 To 1000 Step 10 '开始循环Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆Next iEnd Sub先看第一行和最后一行:Sub C100()……End SubC100是宏的名称,也叫过程名称,当用户执行C100时程序将运行sub 和end sub 之间的所有指令。
第二行:Dim cc(0 To 2) As Double '声明坐标变量后半段“'声明坐标变量”自动变为绿色字体,它是代码语句的注释,它不会影响程序运行,它的作用是告诉阅读者程序员的想法。
对于简单的程序,一般不需要写注释,如果要编写非常复杂的程序,最好要多加注释,越详细越好,对于程序员来说,这是一个好习惯。
电脑真正编译执行的是这条语句:Dim cc(0 To 2) As Double它的作用就是声明变量。
Dim是一条语句,可以理解为计算机指令。
它的语法:Dim变量名 As 数据类型本例中变量名为CC,而括号中的0 to 2声明这个CC是一个数组,这个数组有三个元素:CC(0)、CC(1)、CC(2),如果改为CC(1 to 3),则三个元素是CC(1)、CC(2)、CC(3),有了这个数组,就可以把坐标数值放到这个变量之中。
Double是数据类型中的一种。
ACAD中一般需要定义坐标时就用这个数据类型。
在ACAD中数据类型的有很多,下面两个是比较常用的数据类型,初学者要有所理解。
Long(长整型),其范围从 -2,147,483,648 到 2,147,483,647。
Variant 它是那些没被显式声明为其他类型变量的数据类型,可以理解为一种通用的数据类型,这是最常用的。
下面三条语句cc(0) = 1000 '定义圆心座标cc(1) = 1000cc(2) = 0它们的作用是给CC变量的每一个元素赋,值其顺序是X、Y、Z坐标。
For i = 1 To 1000 Step 10 '开始循环……Next i '结束循环这两条语句的作用是循环运行指令,每循环一次,i值要增加10,当i加到 1000时,结束循环。
i也是一个变量,虽然没有声明i变量,程序还是认可的,VB不是C语言,每用一个变量都要声明,不声明就会报错。
简单是简单了,这样做也有坏处,如果不小心打错了一个字母,程序不会报错,如果程序很长,那就会出现一些意想不到的错误。
step后面的数值就是每次循环时增加的数值,step后也可以用负值。
例如:For i =1000 To 1 Step -10很多情况下,后面可以不加step 10如:For i=1 to 100,它的作用是每循环一次i值就增加1Next i语句必须出现在需要结束循环的位置,不然程序没法运行。
下面看画圆命令:Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10)Call语句的作用是调用其他过程或者方法。
ThisDrawing.ModelSpace是指当前CAD文档的模型空间AddCircle是画圆方法Addcicle方法需要两个参数:圆心和半径CC就是圆心坐标,i*10就是圆的半径,本例中,这些圆的半径分别是10、110、210、310……本课到此结束,下面请完成一道思考题:1.以(4,2)为圆心,画5个同心圆,其半径为1-5第三课编程基础二有一位叫自然9172的网友提出了下面的问题:绘制三维多段线时X、Y值在屏幕上用鼠标选取,Z值用键盘输入本课将讲解这个问题。
为了简化程序,这里用多条直线来代替多段线。
以下是源码:Sub myl()Dim p1 As Variant '申明端点坐标Dim p2 As Variantp1 = ThisDrawing.Utility.GetPoint(, "输入点:") '获取点坐标z = ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值p1(2) = z '将Z坐标值赋予点坐标中On Error GoTo Err_Control '出错陷井Do '开始循环p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标z = ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值p2(2) = z '将Z坐标值赋予点坐标中Call ThisDrawing.ModelSpace.AddLine(p1, p2) '画直线p1 = p2 '将第二点的端点保存为下一条直线的第一个端点坐标LoopErr_Control:End Sub先谈一下本程序的设计思路:1、获取第一点坐标2、输入第一点Z坐标3、获取第二点坐标4、输入第二点Z坐标5、以第一、二点为端点,画直线6、下一条线的第一点=这条线的第二点7、回到第3步进行循环如果用户没有输入坐标或Z值,则程序结束。
首先看以下两条语句:p1 = ThisDrawing.Utility.GetPoint(, "输入点:") ‘获取点坐标……p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标这两条语句的作用是由用户输入点用鼠标选取点坐标,并把坐标值赋给p1、p2两个变量。
ThisDrawing.Utility.GetPoint()在ACAD中这是最常用的方法之一,它需要两个参数,在逗号前面的参数应该是一个点坐标,它的作用是在屏幕上画一条线,前一个端点位于点坐标位置,后一个端点跟随鼠标移动,逗号之前可以什么都不填,这时没有线条会跟随鼠标移动,但逗号必须保留。
逗号后面使用一串字符,程序在命令行显示这串字符,这不难理解。
VbCr通常代表一个回车符,而在这个语句中,它的作用是在命令行不显示“命令:”&的作用是连接字符。
举例:“爱我中华”&”抵制日货”&”从我做起”z = ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值由用户输入一个实数On Error GoTo Err_Control '出错陷井……Err_Control:On Error是出错陷井语句,在程序出错时将执行On Error 后面的语句GoTo Err_contorl 是程序跳转语句,它的作用是在程序中寻找Err_control:,并执行这一行后面的语句,本例中Err_Control:后就是结束宏,所以只要出现错误,程序中止。
Do '开始循环……Loop ‘结束循环这个循环就历害了,它会无休止地进行循环,好在本例中已经有了一个出错陷井,当用户输入回车时,由于程序没有得到点或坐标,程序出错,跳出循环,中止程序。
如果要人为控制跳出循环,可以在代码中用Exit Do语句跳出循环。
在For 变量和Next 变量之间如果要跳出循环,那么只要在循环体内加一个Exit for 就可以跳出循环,关于这方面的例程以后会讲到。
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '画直线画直线方法也是很常用的,它的两个参数是点坐标变量本课到此结束,请做思考题:连续画圆,每次要求用户输入圆心、半径,当用户不再输入圆心或半径时程序才退出第四课程序的调试和保存人非圣贤,孰能无过,初学者在编写复杂程序时往往会出现一些意想不到的错误,所以程序的调试显得尤为重要,随着学习的深入,以后我们需要经常进行程序调试。
事实上,对于那些资深程序员来说,调试程序也是一项不可或缺的重要工作。
首先,在程序输入阶段,应该充分利用VBA编辑器的智能功能。
当你在写代码时,输入一些字母后,编辑器可以自动列出合适的语句、对象、函数供你选择,可以用上下键选择,然后按TAB键(它位于“Q”键左边)确认。