AutoCAD VBA
一、AutoCAD VBA简介
•VBA(Visual Basic for Application)
VBA是AutoCAD的一种开发工具,具有强大的功能。Microsoft VBA是一种面向对象的编程环境,它与VB一样具有很强的开发功能。ringtonesVBA与VB之间的区别就是VBA AutoCAD在同一处理空间运行,为AutoCAD提供智能和快速的编程环境。
VBA功能:
● 创建对话框和其它界面;
● 创建工具栏;
saw怎么读● 建立模块级宏指令;
● 提供建立类模块的功能;
● 深圳人力资源师培训具有完善的数据访问和管理能力;(ADO、DAO、RDO,C/S)
● 能够使用Win32API提供的功能,建立应用程序与操作系统之间的通信;
在AutoCAD中使用VBA的好处
● Visual Basic编程环境易学易用;
● VBA作为AutoCAD的一个过程运行,这使程序执行速度变得非常快;
● 对话框结构快速有效,允许开发者在设计时启动应用程序并能得到快速反馈;(易于代码纠错和维护)
● 对象可以独立出来,也可以嵌入AutoCAD图形。灵活性很强。
二、理解类和对象
在AutoCAD VBA界面中有许多不同类型的对象。例如:
● 图形对象,如线、弧、文本和标注都是对象;
● 样式设置,如线型和标注样式均为对象;
● 组织结构,如图层、组合和图块也是对象;
● 图形显示,如视图和视口都是对象;
● 甚至图形和AutoCAD应用程序本身也是对象。
对象是通过分层方式来组织的,应用程序对象为根对象。这种分层结构的视图被归结为对象模型。对象模型提供了你访问下一层对象的途径。
集合对象是预先定义的对象,它包含所有相似对象的实例(即这些对象的父对象)。集合对象有以下的对象:
文档(Documents)集合
包含所有在当前AutoCAD进程打开的文档。
模型空间(ModelSpace)集合
包含在模型空间中的所有图形对象(图元)。
图纸空间(PaperSpace)集合
包含在活动图纸空间布局中的所有图形对象(图元)。
图块(Block)对象
2013六级成绩查询包含在指定图块定义中的所有图元。
图块(Blocks)集合
safety什么意思包含在图形中的所有图块。
字典(Dictionaries)集合
包含在图形中的所有字典。
标注样式(DimStyles)集合
包含在图形中的所有标注样式。
组合(Groups)集合
包含在图形中的所有组合。
超级链接(Hyperlinks)集合
包含提供图元的所有超级链接。
图层(Layers)集合
包含在图形中的所有图层。
布局(Layouts)集合
包含在图形中的所有布局。
线型(Linetypes)集合
包含在图形中的所有线型。
菜单条(MenuBar)集合
包含当前显示于AutoCAD的所有菜单。
菜单组(MenuGroups)集合
包含当前装载到AutoCAD中的所有菜单和工具栏。
注册应用程序(RegisteredApplications)集合
麻木的英文包含在图形中的所有注册的应用程序。
选择集(SelectionSets)集合
包含在图形中所有的选择集。
字型(TextStyles)集合
包含在图形中所有的文字样式。
UCSs 集合
包含在图形中所有的用户坐标系统(UCS)。
视图(Views)集合
包含在图形中所有的视图。
视口(Viewports)集合
包含在图形中所有的视口。
三、理解对象的属性和方法
每一对象都关联着属性和方法。属性描述着单个对象的外观,而方法是一种可在单个对象上执行的行为。当对象创建后,你就可通过属性和方法查询和编辑对象。
例如,一个圆对象有圆心属性。该属性以三维世界坐标系统的坐标描述了圆的圆心。更改圆的圆心,你只要简单地将该属性设定为新的坐标。圆对象也有称为偏移(Offt)的方法。该方法可在相对于现存圆的指定偏移距离创建一个新的对象。关于圆对象所有属性和方法的列表,请参考AutoCAD ActiveX和VBA参考中的圆对象。
四、开发实例
1、程序和文档窗口设置
'''*****************************************************************************
合肥北大青鸟
Sub MyWindow()
MsgBox ThisDrawing.WindowTitle '= "杨彪绘图01"
ThisDrawing.WindowState = acMin 'acMax 'acNorm
End Sub
Sub SetMyAcadTitle()
Dim hw&
hw = GetParent(GetParent(ThisDrawing.hwnd))
SetWindowText hw, "杨彪地质编录出图子系统"
Call InitialDZBL '初始化
ThisDrawing.WindowState = acMax
End Sub
Sub SetMyAcadWindow()
ThisDrawing.Application.WindowState = acNorm
ThisDrawing.Application.WindowLeft = 100
ThisDrawing.Application.WindowLeft = 100叶紫函
ThisDrawing.Application.Width = 600
ThisDrawing.Application.Height = 600
End Sub
2、视图
'''**************************************************************************
Sub MyZoomView1()
ThisDrawing.Application.ZoomExtents
ZoomAll
End Sub
Sub MyZoomView2()
Dim VPn1 As Variant, VPn2 As Variant
VPn1 = point(, " 缩放窗口左下点:")scalelistedit
VPn2 = point(, " 缩放窗口右上点:")
ThisDrawing.Application.ZoomWindow VPn1, VPn2
End Sub
3、二维图形绘制
‘addline
Sub Myaddline()
Dim ln As AcadLine
Dim startPt(2) As Double, EndPt(2) As Double
startPt(0) = 0
startPt(1) = 0
startPt(0) = 100
startPt(1) = 50
Set ln = ThisDrawing.ModelSpace.AddLine(startPt(), EndPt())
ln.color = acRed
ZoomAll
End Sub
‘LightWeightPolyline
Sub MyLightWeightPolyline ()
Dim MyPln As AcadLWPolyline
Dim Pnts(9) As Double
For I = 0 To 9
Pnts(I) = Rnd * 100
Next
' Pnts(0) = PntMin(0): Pnts(1) = PntMin(1)
' Pnts(2) = PntMin(0) + DWidth: Pnts(3) = PntMin(1)
' Pnts(4) = PntMin(0) + DWidth: Pnts(5) = PntMin(1) + DHeight
' Pnts(6) = PntMin(0): Pnts(7) = PntMin(1) + DHeight
' Pnts(8) = PntMin(0): Pnts(9) = PntMin(1)
2021年6月英语四六级成绩查询时间 Set MyPln = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pnts)
Dim n As Integer
n = UBound(Pnts)
For K = 0 To (n / 2 - 1) '宽度设定
MyPln.SetWidth K, K / 5, Rnd * 10
Next
lor = acYellow
ZoomAll
End Sub
‘Polyline
Sub MyPolyline()
Dim MyPln As AcadPolyline
Dim Pnts(8) As Double '''必须是3*N的数组
For I = 0 To 8
Pnts(I) = Rnd * 100
Next
Set MyPln = ThisDrawing.ModelSpace.AddPolyline(Pnts)
Dim n As Integer
n = UBound(Pnts)
For K = 0 To (n / 3 - 1) '宽度设定
MyPln.SetWidth K, K / 5, Rnd * 10
Next
lor = acYellow
ZoomAll
End Sub
‘LightCircle and Hatch
Sub MyCircle()
Dim Cir(0) As AcadCircle
VPn1 = point(, " 输入插入点:")
Set Cir(0) = ThisDrawing.ModelSpace.AddCircle(VPn1, 10#)