Autocad VBA初级教程

来源:互联网 发布:linux怎么卸载光盘 编辑:程序博客网 时间:2024/05/22 06:11

为了简化程序,这里用多条直线来代替多段线。以下是源码:

Sub myl()

Dim p1 As Variant '申明端点坐标

Dim p2 As Variant

p1 = 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 '将第二点的端点保存为下一条直线的第一个端点坐标

Loop

Err_Control:

End Sub

先谈一下本程序的设计思路:

1、获取第一点坐标

2、输入第一点Z坐标

3、获取第二点坐标

4、输入第二点Z坐标

5、以第一、二点为端点,画直线

6、下一条线的第一点=这条线的第二点

7、回到第3步进行循环

如果用户没有输入坐标或Z值,则程序结束。

首先看以下两条语句:

p1 = ThisDrawing.Utility.GetPoint(, "输入点:") ‘获取点坐标

……

p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标

这两条语句的作用是由用户输入点用鼠标选取点坐标,并把坐标值赋给p1p2两个变量。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”键左边)确认。当输入一个回车符后程序会自动对这条语句进行分析,如果出现错误就会提示。

我们经常碰到的麻烦是程序的运行结果和预计的不一样,一般我会这样做:首先要想一想可能是哪一个变量有问题,然后去监视这个变量(或表达式),在程序合适的位置设置断点,这样可以使程序停下来看一看这个变量有没有按照我的设想在变化。下面我举一个简单的例子,先看源代码:

sub test()

for i=2 to 4 step 0.6

next i

end sub

这是一个非常简单的循环,每一次循环i便会增加0.6,当循环3次后i值就变为4.4,但问题是每一次循环时i值变为多少?

第一步:在菜单中选“调试”—“添加监视”,在表达试中填“i”,点击确定,这时你会看到临视窗口中会多一行。

第二步:把光标移到代码窗口中的“next i”行,按一下“F9”,于是每当程序运行到这里时就会暂停了。

好,一切就绪,请按F5执行程序,在监视窗口中C值立刻变为2,再按F5继续,C值为2.6,再按几次F5,直到程序结束,这样我们就成功监视了C值的变化。

第三步:在next i行再按一次F9,清除断点。监视的表达式的右键菜单选择“删除监视”。

另外,还可以用“逐语句”、“逐过程”、“运行到光标处”等方法进行调试,这些都在调试菜单中,操作比较简单,请读者自行领悟。

到目前为止,我们所做的工程都是“嵌入式工程”,它只是嵌入在当前的Autocad图形文件中, 以后打开这个文件时代码才会加载,如果别的dwg文件也要使用,那就需要把代码导出为.bas文件,供其他dwg文件导入。在VBA编辑器的“文件”菜单中有这两个功能,一试便知。

ACAD VBA还有一种工程叫“通用式工程”,只要进入ACAD就可以运行,程序可以在不同用户、不同的图形文件中共享,但是由于VBA功能太强,有时候会出现一些意想不到的事情,所以在学习阶段请暂时不要这样做。

本课结束,请做思考题;监视下列代码中的ij的值,注意,此题虽然要监视2个变量,但是在代窗口中只要设置1个断点就足够了。

sub test()

for i=2 to 4 step 0.6

for j=-5 to 2 step 5.5

next j

next i

end sub

原创粉丝点击