cad vba代码 怎么一次性把选中的cad中选择图形的方法有几种都旋转了?

《CADVBA初级教程(全)》由会员分享,可在线阅读,更多相关《CADVBA初级教程(全)(16页珍藏版)》请在人人文库网上搜索。

1、第一课:入门1. 为什么要写这个教程市面上 ACADVBA 的书不多,它的帮助是英文版的,很多人看不懂。其实我转行已经好几年了,而且手艺也 慢慢生疏了,写个教程对自己来说也是一次复习。2. 什么是 Autocad VBA ?VBA 是 Visual Basic for Applications的英文缩写,它是一个功能强大的开发工具,学好 VBA 可以成倍甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD 命令不可能完成的,只要学好 VBA 就可以做到,相信到时候您一定会得到同事的佩服、老板的器重。3、VBA 有多难?相信大家都知道 Basic 是的含义。应该承认,我的水平还不高,错

2、误之处在所难免,如果大家发现错误一 定要提出批评,以便及时更正。4、怎样学习 VBA?介绍大家一个学习公式:信心 +恒心=开心。仔细阅读本教程,完成例题,在学习的过程中一定要多思考, 多想一些是什么、为什么。本教程将陆续发布在 CAD 世界论坛上,您不需要付费就可以学习。本作者在此 郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。我不会发到任 何人的邮箱中,您自己在论坛上找就可以了,请不要再向我索要这份教程。5、现在我们开始编写第一个程序:画一百个同心圆第一步:复制下面的红色代码第二步:在模型空间按快捷键 Alt+F8 ,出现宏窗口第三步:在宏名称中填写 C10

5、声明坐标变量后半段“ 声明坐标变量”自动变为绿色字体,它是代码语句的注释,它不会影响程序运行,它的作用是告 诉阅读者程序员的想法。对于简单的程序,一般不需要写注释,如果要编写非常复杂的程序,最好要多加 注释,越详细越好,对于程序员来说,这是一个好习惯。电脑真正编译执行的是这条语句: Dim cc(0 To 2) As Double 它的作用就是声明变量。Dim 是一条语句,可以理解为计算机指令。 它的语法: Dim 变量名 As 数据类型 本例中变量名为 CC 而括号中的 0 to2 声明这个 CC 是一个数组,这个数组有三个元素:CC(0)、CC(1)、CC(2),如果改为 CC(1 to

6、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 变量的每一个元素

7、赋 , 值其顺序是 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很多情况

是指当前 CAD 文档的模型空间AddCircle 是画圆方法Addcicle 方法需要两个参数:圆心和半径CC 就是圆心坐标, i*10 就是圆的半径,本例中,这些圆的半径分别是 本课到此结束,下面请完成一道思考题:

9、1. 以(4,2)为圆心,画 5 个 Autocad VBA初级教程10、110、210、310(第三课编程基础二)有一位叫自然 9172 的网友提出了下面的问题: 绘制三维多段线时 X、Y 值在屏幕上用鼠标选取, Z 值用键盘输入 本课将讲解这个问题。为了简化程序,这里用多条直线来代替多段线。以下是源码:Sub myl()Dim p1 As Variant 申明端点坐标Dim p2

11、先谈一下本程序的设计思路:1 、获取第一点坐标2、输入第一点 Z 坐标3、获取第二点坐标4、输入第二点 Z 坐标5、以第一、二点为端点,画直线6、下一条线的第一点 =这条线的第二点7、回到第 3 步进行循环如果用户没有输入坐标或 Z 值,则程序结束。首先看以下两条语句:p1 = ThisDrawing.Utility.GetPoint(,p2 =

12、etPoint()在 ACAD 中这是最常用的方法之一,它需要两个参数,在逗号前面的参数应该是一个点坐标,它的作用是在屏幕上画一条线,前一个端点位于点坐标位置,后一个端点跟随鼠标 移动,逗号之前可以什么都不填,这时没有线条会跟随鼠标移动,但逗号必须保留。逗号后面使用一串字符,程序在命令行显示这串字符,这不难理解。VbCr 通常代表一个回车符,而在这个语句中,它的作用是在命令行不显示“命令:” &的作用是连接字符。举例:“爱我中华” &”抵制日货” &”从我做起”z = ThisDrawing.Utility.GetReal(Z坐标:) 用户输入 Z 坐标值由用户输入一个

开始循环Loop 结束循环 这个循环就历害了,它会无休止地进行循环,好在本例中已经有了一个出错陷井,当用户输入回车时,由 于程序没有得到点或坐标,程序出错,跳出循环,中止程序。如果要人为控制跳出循环,可以在代码中用 Exi

14、t Do 语句跳出循环。在 For 变量和 Next 变量之间如果要跳出循环,那么只要在循环体内加一个 Exit for 就可以跳出循环,关于这方面的例程以后会讲到。Call ThisDrawing.ModelSpace.AddLine(p1, p2) 画直线画直线方法也是很常用的,它的两个参数是点坐标变量本课到此结束,请做思考题: 连续画圆,每次要求用户输入圆心、半径,当用户不再输入圆心或半径时程序才退出 同心圆,其半径为 1-5Autocad VBA初级教程(第四课程序的调试和保存)人非圣贤,孰能无过,初学者在编写复杂程序时往往会出现一些意想不到的错误,所以程序的调试显得尤 为重要,随着学

15、习的深入,以后我们需要经常进行程序调试。事实上,对于那些资深程序员来说,调试程 序也是一项不可或缺的重要工作。首先,在程序输入阶段,应该充分利用 VBA 编辑器的智能功能。当你在写代码时,输入一些字母后,编辑 器可以自动列出合适的语句、对象、函数供你选择,可以用上下键选择,然后按TAB 键(它位于“ Q”键左边)确认。当输入一个回车符后程序会自动对这条语句进行分析,如果出现错误就会提示。 我们经常碰到的麻烦是程序的运行结果和预计的不一样,一般我会这样做:首先要想一想可能是哪一个变 量有问题,然后去监视这个变量 (或表达式 ),在程序合适的位置设置断点,这样可以使程序停下来看一看 这个变量有没有

16、按照我的设想在变化。下面我举一个简单的例子,先看源代码:sub test()输入点 :) 获取点坐标for i=2 to 4 step 0.6next iend sub这是一个非常简单的循环,每一次循环i 便会增加 0.6,当循环 3 次后 i 值就变为 4.4,但问题是每一次循环时 i 值变为多少?第一步:在菜单中选“调试”“添加监视”,在表达试中填“ i ”,点击确定,这时你会看到临视窗口中 会多一行。第二步:把光标移到代码窗口中的“next i”行,按一下“ F9”,于是每当程序运行到这里时就会暂停了。好,一切就绪,请按 F5 执行程序,在监视窗口中 C 值立刻变为 2,再按 F5 继续

17、, C 值为 2.6 ,再按几次 F5, 直到程序结束,这样我们就成功监视了 C 值的变化。第三步: 在 next i 行再按一次 F9,清除断点。 监视的表达式的右键菜单选择“删除监视”。另外, 还可以用“逐语句”、“逐过程”、“运行到光标处”等方法进行调试,这些都在调试菜单中,操 作比较简单,请读者自行领悟。到目前为止,我们所做的工程都是“嵌入式工程”,它只是嵌入在当前的 Autocad 图形文件中, 以后打开 这个文件时代码才会加载,如果别的 dwg 文件也要使用,那就需要把代码导出为.bas 文件,供其他 dwg 文 件导入。在 VBA 编辑器的“文件”菜单中有这两个功能,一试便知。A

18、CAD VBA 还有一种工程叫“通用式工程”,只要进入ACAD 就可以运行,程序可以在不同用户、不同的图形文件中共享,但是由于 VBA 功能太强,有时候会出现一些意想不到的事情,所以在学习阶段请暂时不要 这样做。本课结束,请做思考题;监视下列代码中的i 和 j 的值,注意,此题虽然要监视 2 个变量,但是在代窗口中只要设置 1 个断点就足够了。sub test()for i=2

20、+ 1 改变颜色,供下次定义曲线颜色Next a开始循环画抛物线开始画多段线纵坐标画多段线End sub 为了鼓励大家积极思考,从本课开始,我不再解释每一条语句的作用, 只对以前没有提过的语句进行一些 解释,也许你一时很难明白,建议用上一课提到的跟踪变量、添加断点的办法领悟每一条语句的作用,如 果有问题不懂请跟贴提问。在跟踪变量 p 时请在跟踪窗口中单击变量 p 前的 +号,这样可以看清数组 p 中每一个元素的变化。ACAD 没有现成的画抛物线命令, 我们只能用程序编写多段线画近似抛物线。理论上,抛物线的 X 值可以是无限小、无限大,这里取值范围在正负 24 之间。程序第二行: Dim myl

是一个数组,这个数组的元素数必须是偶数,每两个元数作为一个点坐标。 等号前面部分“ Set myl ”的作用就将 myl 变量去引用画好的多段线。myl.Color = co 设置颜色属性。在 ACAD 中,颜色可以用数字表示,本例中 co 会增值,这样就会有五彩缤纷的

23、是把角度转化弧度ZoomExtents 语句是缩放命令,它的作用是显示整个图形,消除图形以外的区域 本课思考题:画一条抛物线:y=0.5*x*x+3 ,其中 X 取值范围在正负 50 之间Autocad VBA初级教程(第六课数据类型的转换)上一节课我们用一个简单的公式把角度转化为弧度,这样做便于大家理解。不过VBA 中有现成的方法可以转换数据类型。我们举例说明:jd =

24、字, 而后面一个参数可以取值为 0-4 之间的整数, 有如下意义:0:十进制角度; 1:度分秒格式; 2:梯度; 3:弧度; 4:测地单位例:id= ThisDrawing.Utility.AngleToReal(62d30 10”, 1) 这个表达式计算 62 度 30 分 10 秒的弧度再看将字符串转换为实数的方法: DistanceToReal需要两个参数,前一个参数是表示数值的字符串,后面可以取值1-5 ,表示数据格式,有如下意义:1:科学计数; 2:十进制; 3:工程计数英尺加英寸; 4:建筑计数英尺加分数英寸; 5:分数格式。 例:以下表达式得到一个 12.5 的实数temp1 =

个参数第一个参数是一个实数,第二个参数表示数据格式,含义同上,最后一个参数表示精确到几位小数。 temp1=ThisDrawing.Utility.RealToString(12.5, 1, 3)得到这个字符串:“

27、i = 0 To 99 开始循环If i =1)行b(b=1)列组成,x,y为循环变量,表格完全由单元格组成,由于在每个单元格都有4条边,让x从1开始循 环到a,再y从1开始循环到b,读取每个单元格的4条边,会读取a*b*4次,重复 读取a*b*2次。当x=1时,读取上边;当y=1时读取,左边,其余情况读取右边, 下边。共读取a+b+a*b*2次。以3行4列为例,共读取3+4+3*4*2=31次,与实际表格的边 数相同,没有重复读取。对合并单元格信息的读取是个难点。因为如果按照单元格的位置依次读取,那么由a行b列个单元格(cell)合并而成的单元格区域(range)仅有4条 边,采用上述计算方

28、法,需要读取a+b+a*b*2次,重复读取a+b+ a*b*2 - 4次。以以3行4列为例,共读取3+4+3*4*2=31次,重复读取31 -4=27次。算法有重复。如果按照行号,列号读取,合并单元格的行号、 列号只有一个,其值为最靠左、靠上的那个单元格的行号、列号。例如,将A2:E5的单元格合并后,其行号为2,列号为A。这样由多个合并单元格组合后的表 格行号、列号有间断,不连续,无法进行循环读取信息。笔者通过研究发现,函 数address()和单元格的mergearea属性可以获得合并单元格的准确信息。具 体方法为:读取cells(x,y)单元格时,用address()判断包含cells(x

29、,y)单元 格的合并单元格区域c.mergearea的绝对地址,如果前4个字符与cells(x,y)单元格的地址相同,为cells(x,y)单元格为合并单元格区域最靠上、靠 左的那个合并单元格,读取其4条边信息,否则不读取。这样,彻底避免了重复 读取,同时提高了整个读取和画线速度。-在AutoCAD中,线条有多种,考虑能够方便控制线条属性,选用了 多义线。具体命令如下:RetVal

}

1.2、把选择集加入块中的方法 (1)

3.1、修改出线点的位置 (4)

5、获取鼠标指定的坐标点 (4)

7.插入文字(单选) (5)

(1)、左边对齐: (5)

(2)、中间对齐: (5)

(3)、右边对齐 (5)

8.插入文字(多行) (5)

1. VBA写的宏,可否编译成象ARX一样的程序,经加载后,在命令行打入命令后就可

2. VB中可以生成可执行文件,而在VBA中却不行 (7)

5.有时文字是从别的图中复制-粘贴的,如果不打破的话,能否直接得到文字内容. (8)

7. 如何调用vba命令对多义线进行fit(拟合)处理 (9)

9.如何用程序控制对象捕捉 (10)

12.绘制多边形并显示多边形顶点坐标 (10)

希望用户在捕捉点或输入点坐标动作时,如何避免用户因其他操作如缩放、PAN引起的系统报错 (12)

17.我想知道vb中的那个函数或者对象的方法可以代替在cad中按esc键取消命令 (12)

18点击菜单项就在该菜单上打对号是怎么实现的? (13)

}

一、基本操作 1 1、 块操作 1 1.1、定义块方法: 1 1.2、把选择集加入块中的方法 1 1.3、插入块方法: 1 1.4、画块属性方法 1 1.5、编程思路: 1 2、画直线?(单段线) 3 3、画多段线 4 3.1、修改出线点的位置 4 4、画圆 4 5、获取鼠标指定的坐标点 4 6、旋转 4 7.插入文字(单选) 5 (1)、左边对齐: 5 (2)、中间对齐: 5 (3)、右边对齐 5 8.插入文字(多行) 5 9、画圆弧 6 10、画图椭圆 6 11、CAD打开读取数据 6 12、绘制圆弧 6 二、CAD VBA程序答 7 1. VBA写的宏,可否编译成象ARX一样的程序,经加载后,在命令行打入命令后就可运行 7 2. VB中可以生成可执行文件,而在VBA中却不行 7 5.有时文字是从别的图中复制-粘贴的,如果不打破的话,能否直接得到文字内容. 希望用户在捕捉点或输入点坐标动作时,如何避免用户因其他操作如缩放、PAN引起的系统报错 12 15.在VBA中如何传送一个参数给Vlisp? 12 17.我想知道vb中的那个函数或者对象的方法可以代替在cad中按esc键取消命令 12 18点击菜单项就在该菜单上打对号是怎么实现的? 13 20请问版主,如何实时获得当前光标的X,y,z坐标值,如同状态栏上显示坐标值 13 字的对方正式后辩证文字会移回到零点? 15 27删除块前,应先删除块的引用,怎样查找块的引用?(VBA) 15 28使用ADO的方法如何存取ACCESS数据库? 15 30如何将类似 ".5"数值改为"0.5"显示 16 31请问,如何将图上所有的数字(成千上万个数值)减去同一个常数? 17 34 把选择的对象放大几倍,VBA怎么实现? 20 35怎样提取图形的视图左下角、右上角和图形左下角,右上角的坐标? 20 1. 怎么查找某一个group是否存在?- 21 3. 在编程中,我遇到以下问题: 21 5. Sheets("检测报告").Select 22 6. 请问如何让form.hide后form.show时能保持form先前移动后的位置? 22 9怎样计算一个多边形的中心点? 23 10如何返回在命令行中输入的字符,是指在没有按下回车和空格下 24 11当我插入块时,鼠标的click_point为两个图块的公共插入点,即同时插入两个块 24 12如何把168.235642度分解成度,分,秒?我没有办法判别小数点? 24 13. 请问在VBA中怎么使一个选择集只选中模型空间中可见图元? 25 14. windows安装了几个打印机,如何用vb指定打印机。谢谢 26 16请教,VBA中的下拉列表控件的数据是怎么和数据库内的数据邦定的?我查了好些东东都不能搞定,那位仁兄可以相告,谢谢。 26 17请问高手,在VB中如何将如0数字,变成形如5.3E-7字样的科学记数法 27 18.在vba中有 IsNumberic()函数检测变量是不是数值,但我需要一个能检验 所输的变量是不是 字符charactor的函数,或能实现此功能的办法. 27 19在ADDMTEXT中,换行符\p怎么使用啊? 27 20请大家帮我解一个数学问题 27 22. 如何得到objectDBX及其帮助? 28 24. 哪位大侠知道,怎么取得任意图形的中心点坐标! 28 25测量坐标与屏幕坐标的转换 28 26VBA回车响应的问题

}

我要回帖

更多关于 cad中选择图形的方法有几种 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信