您的位置:网站首页 > CAD新闻

AutoCAD VBA经验谈(二) 简单的例子

时间:2009-12-21 22:06:28 来源:

三、 从一个简单的例子开始: HELLO WORLD
Public Sub HelloWorld()
Dim insPoint(0 To 2) As Double '声明插入点
Dim textHeight As Double       '声明文字高度
Dim textStr As String          '声明字符串
Dim textObj As AcadText        '声明文字对象
insPoint(0) = 2      '设置插入点的 x 坐标
insPoint(1) = 4      '设置插入点的 y 坐标
insPoint(2) = 0      '设置插入点的 z 坐标

textHeight = 1                  '强文字高度设置为 1.0
textStr = "Hello World!"        '设置字符串

   '创建 Text 对象
Set textObj = ThisDrawing.ModelSpace.AddText _
                           (textStr, insPoint, textHeight)

'根据文字的边界框缩放视图
Dim ptLeftBottom As Variant
Dim ptRightUp As Variant
textObj.GetBoundingBox ptLeftBottom, ptRightUp
ZoomWindow ptLeftBottom, ptRightUp
End Sub

     这是帮助里的一个例子,我略作修改。这段代码在当前文件的模型空间创建文字,并按文字的边界框缩放视图。本例在模型空间创建文字对象,把ThisDrawing.ModelSpace.AddText 改为ThisDrawing.PaperSpace.AddText , 可以在激活的图纸空间中创建文字;而灵活的做法是改为:ThisDrawing.ActiveSpace.AddText,在当前激活的空间中创建文字,一般建议在当前激活空间中创建对象,把选择权给用户。Addxxx类的方法用于模型空间MSPACE、图纸空间paperspace、块block。
   VBA中的点用double型数组表示,需要点参数的方法传入数组名就可以了。从VBA返回的点是variant变量,可以直接当数组应用。


   把代码粘贴到VBA工程的公共模块,就可以从工具--宏-选择运行它。 只有是公共模块中的无参数的公共过程sub才能从宏菜单运行,这个过程就是宏,用户界面。

    工程开始前进行模块规划重要,下面是一些建议:
1、每个功能比如自动中心线粗糙度等各设一个实现模块,模块设置为私有;设置一个公共模块作为界面,界面过程宏调用实现模块中的过程)通用的过程或函数放入私有模块。
2、尽量少用全局变量,尽可能缩小变量的作用范围。

如果初学编程,学会调试程序,这个很重要。可以用这个简单的例子学习怎么调试程序。在VBA集成环境中可设置变量表达式监视、设置断点、单步运行、运行至光标处等。表达式监视窗口可以显示表达式的类型、值等,结合断点,可以顺藤摸瓜找出错误。除了逻辑错误,由于VBA的类型检查不严格,如果把某个方法的返回值赋值给错误类型的接收者、引用不存在的属性等,都可能出现可以运行,但结果不对。