您的当前位置:首页正文

CAD_VBA

2021-02-10 来源:好走旅游网


CAD_VBA

AutoCAD VBA

一、A u t o C A D V B A简介

VBA(Visual Basic for Application)

VBA是AutoCAD的一种开发工具,具有强大的功能。Microsoft VBA是一种面向对象的编程环境,它与VB一样具有很强的开发功能。VBA与VB之间的区别就是VBA AutoCAD在同一处理

空间运行,为AutoCAD提供智能和快速的编程环境。VBA功能:创建对话框和其它界

面;

●创建工具栏;

●建立模块级宏指令;

●提供建立类模块的功能;

●具有完善的数据访问和管理能力;(ADO、DAO、RDO,C/S)

●能够使用Win32API提供的功能,建立应用程序与操作系统之间的通信;在

AutoCAD中使用VBA的好处Visual Basic编程环境易学易用;

●VBA作为AutoCAD的一个过程运行,这使程序执行速度变得非常快;

●对话框结构快速有效,允许开发者在设计时启动应用程序并能得到快速反

馈;(易于代码纠错和维护)

●对象可以独立出来,也可以嵌入AutoCAD图形。灵活性很强。

二、理解类和对象在AutoCAD VBA界面中有许多不同类型的对象。例如:

●图形对象,如线、弧、文本和标注都是对象;

●样式设置,如线型和标注样式均为对象;

●组织结构,如图层、组合和图块也是对象;

●图形显示,如视图和视口都是对象;

●甚至图形和AutoCAD应用程序本身也是对象。对象是通过分层方式来组织的,应用程序对象为根对象。这种分层结构的视图被归结为对象模型。对象模型提供了你访问下一层对象的途径。

集合对象是预先定义的对象,它包含所有相似对象的实例(即这些对象的父对象)。集合对象有以下的对象:

文档(Documents)集合

包含所有在当前AutoCAD进程打开的文档。

模型空间(ModelSpace)集合

包含在模型空间中的所有图形对象(图元)。

图纸空间(PaperSpace)集合

包含在活动图纸空间布局中的所有图形对象(图元)。

图块(Block)对象

包含在指定图块定义中的所有图元。

图块(Blocks)集合

包含在图形中的所有图块。

字典(Dictionaries)集合

包含在图形中的所有字典。

标注样式(DimStyles)集合

包含在图形中的所有标注样式。

组合(Groups)集合

包含在图形中的所有组合。

超级链接(Hyperlinks)集合

包含提供图元的所有超级链接。

图层(Layers)集合

包含在图形中的所有图层。

布局(Layouts)集合

包含在图形中的所有布局。

线型(Linetypes)集合

包含在图形中的所有线型。

菜单条(MenuBar)集合

包含当前显示于AutoCAD的所有菜单。

菜单组(MenuGroups)集合

包含当前装载到AutoCAD中的所有菜单和工具栏。

注册应用程序(RegisteredApplications)集合

包含在图形中的所有注册的应用程序。

选择集(SelectionSets)集合

包含在图形中所有的选择集。

字型(TextStyles)集合

包含在图形中所有的文字样式。

UCSs 集合

包含在图形中所有的用户坐标系统(UCS)。

视图(Views)集合

包含在图形中所有的视图。

视口(Viewports)集合

包含在图形中所有的视口。

三、理解对象的属性和方法

每一对象都关联着属性和方法。属性描述着单个对象的外观,而方法是一种可在单个对象上执行的行为。当对象创建后,你就可通过属性和方法查询和编辑对象。

例如,一个圆对象有圆心属性。该属性以三维世界坐标系统的坐标描述了圆的圆心。更改圆的圆心,你只要简单地将该属性设定为新的坐标。圆对象也有称为偏移(Offset)的方法。该方法可在相对于现存圆的指定偏移距离创建一个新的对象。关于圆对象所有属性和方法的列表,请参考AutoCAD ActiveX和VBA参考中的圆对象。

四、开发实例

目录

1、程序和文档窗口设置 (4)

2、视图 (5)

3、二维图形绘制 (5)

4、图层 (7)

5、用户输入 (8)

7、栅格图像 Raster (10)

8、计算面积 (10)

9、加载菜单 (11)

10、‘增加菜单按钮和创建菜单按钮 (11)

11、加载线型 (12)

12、文件File (13)

13、控制命令输入窗口SendCommand (14)

14、三维绘图 (14)

15、块 (综合练习) (15)

16、运行宏 (17)

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、视图

'''************************************************************************** MyZoomView1()

ThisDrawing.Application.ZoomExtents

ZoomAll

End Sub

Sub MyZoomView2()

Dim VPn1 As Variant, VPn2 As V ariant

VPn1 = ThisDrawing.Utility.getpoint(, \" 缩放窗口左下点:\")

VPn2 = ThisDrawing.Utility.getpoint(, \" 缩放窗口右上点:\")

ThisDrawing.Application.ZoomWindow VPn1, VPn2

Sub

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)

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

MyPln.color = 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

MyPln.color = acYellow

ZoomAll

End Sub

‘Light Circle and Hatch

Sub MyCircle()

Dim Cir(0) As AcadCircle

VPn1 = ThisDrawing.Utility.getpoint(, \" 输入插入点:\")

Set Cir(0) = ThisDrawing.ModelSpace.AddCircle(VPn1, 10#)

Set MyHatchObj = ThisDrawing.ModelSpace.AddHatch(0, MyHatchObj.AppendOuterLoop (Cir)

MyHatchObj.color = 1

MyHatchObj.Evaluate

End Sub

Sub Mytext()

Dim MyTxt As AcadText

Dim StrTxt As String

Dim VPnts(2) As Double

StrTxt = \"HoHai UniverSity 河海大学土木工程学院测绘工程系\"

True) \"Solid\

Set MyTxt = ThisDrawing.ModelSpace.AddText(StrTxt, VPnts, 100)

MyTxt.color = acRed

ZoomAll

End Sub

Sub MyPoint()

Dim Pnts(0 To 2) As Double

Dim I As Integer, J As Integer

Dim MyPoint As AcadPoint

Pnts(I) = 50

Pnts(I) = 60

Set MyPoint = ThisDrawing.ModelSpace.AddPoint(Pnts)

ZoomAll

End Sub

4、图层

Sub GetlayerName()

Dim MyLay As AcadLayer

Dim BLExist As Boolean

BLExist = False

Dim LayExit As Boolean

LayExit = False

For Each MyLay In ThisDrawing.Layers

If MyLay.Name = \"ybNewLayer\" Then LayExit = True

MsgBox MyLay.Name, vbInformation

Next

If LayExit Then

MsgBox \"图层:'ybNewLayer' 已经存在!\

Else

ThisDrawing.Layers.Add \"ybNewLayer\"

End If

ThisDrawing.Layers(\"ybNewLayer\").LayerOn = True

ThisDrawing.Layers(\"ybNewLayer\").Lock = False

ThisDrawing.ActiveLayer = ThisDrawing.Layers(\"ybNewLayer\")

'obj.Layer = \"ybNewLayer\"

ThisDrawing.Layers(\"ybNewLayer\").color = 1

End Sub

Sub Ch2_IterateLayer()

' 在图层集合中循环

On Error Resume Next

Dim I As Integer

Dim msg As String

msg = \"\"

For I = 0 To ThisDrawing.Layers.count - 1

msg = msg + ThisDrawing.Layers.Item(I).Name + vbCrLf

Next

MsgBox msg

End Sub

5、用户输入

'''*********************************************************************** GetInput()

Dim VPn1 As Variant, StrTF As String, KwordList As String, Str1 As String

Dim Obj1 As AcadObject

VPn1 = ThisDrawing.Utility.getpoint(, \" 输入插入点:\")

Str1 = ThisDrawing.Utility.GetString(1, \"请输入点号:\")

Sub

KwordList = \"Y N\"

ThisDrawing.Utility.InitializeUserInput 1, KwordList

StrTF = ThisDrawing.Utility.GetKeyword(\" 是否显示选点的坐标?(是Y)/(否N):\")

If UCase(StrTF) = \"Y\" Then

MsgBox \"点\" & Str1 & \":\" & \"X=\" & VPn1(0) & \" ; \" & \"Y=\" & VPn1(1) & \" : \" & \"Z=\" & VPn1(2), vbInformation

Else

End If

ThisDrawing.Utility.GetEntity Obj1, Pnt1, \"选择一个对象:\"

Obj1.color = 1

End Sub

Sub MyZoomView3()

Str1 = ThisDrawing.Utility.GetString(1, \"请按回车键:\")

ThisDrawing.Application.ZoomScaled 0.7, acZoomScaledRelative

End Sub

6、选择集合'''**** SelectionSets ***************************

Sub MySelectionSets()

Dim K As Integer

Dim ssetObj As AcadSelectionSet

Dim objCollection As AcadEntity

Dim ob As AcadEntity

Dim I As Integer

For I = ThisDrawing.SelectionSets.count - 1 To 0 Step -1

ThisDrawing.SelectionSets(I).Delete

Next I

' ThisDrawing.Utility.GetEntity objCollection, Pnt1, \"选择一个对象:\"

' objCollection.color = 1

Set ssetObj = ThisDrawing.SelectionSets.Add(\"ybssa\")

' Set ssetObj = ThisDrawing.ActiveSelectionSet

ssetObj.Select acSelectionSetAll

If ssetObj.count > 0 Then

MsgBox \"选择集中对象数目: \" & ssetObj.count

For Each ob In ssetObj

ob.color = acMagenta

Next

End If

End Sub

7、栅格图像Raster

Sub InsertRaster()

Dim a As AcadRasterImage

Dim b(2) As Double

Dim ly As AcadLayer

Dim PicFileName As String

Dim factor As Double

factor = 2#

Set ly = ThisDrawing.Application.ActiveDocument.Layers.Add(\"底图\")

PicFileName = \"E:\\图片\\Bliss.jpg\"

b(0) = 100

b(1) = 100

b(2) = 0

Set a ThisDrawing.Application.ActiveDocument.ModelSpace.AddRaster(PicFileName, factor, 45)

a.Transparency = True

=

b,

a.Layer = \"底图\"

ThisDrawing.Application.ZoomExtents

ThisDrawing.SaveAs \"E:\\yangbiao.dwg\"

End Sub

8、计算面积

'''************************计算面积**************************************

Sub Ch3_CalculateDefinedArea()

Dim p1 As Variant

Dim p2 As Variant

Dim p3 As Variant

Dim p4 As Variant

Dim p5 As Variant

' 从用户处取得点

p1 = ThisDrawing.Utility.getpoint(, vbCrLf & \"第一个点: \")

p2 = ThisDrawing.Utility.getpoint(p1, vbCrLf & \"第二个点: \")

p3 = ThisDrawing.Utility.getpoint(p2, vbCrLf & \"第三个点: \")

p4 = ThisDrawing.Utility.getpoint(p3, vbCrLf & \"第四个点: \")

p5 = ThisDrawing.Utility.getpoint(p4, vbCrLf & \"第五个点: \")

' 由这些点创建二维多段线

Dim polyObj As AcadLWPolyline

Dim vertices(0 To 9) As Double

vertices(0) = p1(0): vertices(1) = p1(1)

vertices(2) = p2(0): vertices(3) = p2(1)

vertices(4) = p3(0): vertices(5) = p3(1)

vertices(6) = p4(0): vertices(7) = p4(1)

vertices(8) = p5(0): vertices(9) = p5(1)

Set polyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline _

(vertices)

polyObj.Closed = True

ThisDrawing.Application.ZoomAll

' 显示多段线的面积

MsgBox \"通过定义的点形成的面积为\" & _

polyObj.Area, , \"计算定义的面积\"

End Sub

9、加载菜单

‘加载菜单

Sub MenuAutocad()

Dim acMenuGroup As AcadMenuGroup

For Each acMenuGroup In ThisDrawing.Application.MenuGroups

acMenuGroup.Unload

Next

Set acMenuGroup = ThisDrawing.Application.MenuGroups.Load(\"acad.mnc\True) End Sub

10、‘增加菜单按钮和创建菜单按钮

Sub CreateMenuFirst2()

Set acApp = ThisDrawing.Application

Dim acMenu As AcadPopupMenu

Dim acMenuItem As AcadPopupMenuItem

Dim NewacMenu As AcadPopupMenuItem

Set acMenu = acApp.MenuGroups(0).Menus(\"文件(&F)\")

Set acMenuItem = acMenu.AddMenuItem(0, \"杨彪\

Set acMenuItem = acMenu.AddMenuItem(0, \"杨彪4\

Set acMenu = ThisDrawing.Application.MenuGroups(0).Menus.Add(\"杨彪111\")

Set acMenuItem = acMenu.AddMenuItem(0, \"放大\

Set acMenuItem = acMenu.AddMenuItem(1, \"缩小\

Set acMenuItem = acMenu.AddMenuItem(2, \"全景显示\

Set acMenuItem = acMenu.AddMenuItem(3, \"最大显示\

Set acMenuItem = acMenu.AddMenuItem(4, \"鸟瞰\

Set acMenuItem = acMenu.AddMenuItem(5, \"移动\

acMenu.InsertInMenuBar 10

acApp.MenuGroups(0).SaveAs \"d:\\MyMenu.mnu\

End Sub

‘增加工具栏按钮和创建工具栏

Sub CreateToolFirst()

Set acApp = ThisDrawing.Application

Dim acToolbar As AcadToolbar

Dim acToolbarItem As AcadToolbarItem

Dim ToolbarItem As AcadToolbarItem

On Error Resume Next

Set acToolbar = ThisDrawing.Application.MenuGroups(0).Toolbars(\"常用\")

Set ToolbarItem = acToolbar.AddToolbarButton(0, \"杨彪22\\")

Call ToolbarItem.SetBitmaps(\"E:\\图标\\1.ico\图标\\2.ico\")

Set ToolbarItem = acToolbar.AddToolbarButton(0, \"杨彪124\showpic2 \")

Set acToolbar = ThisDrawing.Application.MenuGroups(0).Toolbars.Add(\"杨彪1111\") Set ToolbarItem = acToolbar.AddToolbarButton(0, \"放大\\")

Call ToolbarItem.SetBitmaps(\"E:\\图标\\3.ico\图标\\3.ico\")

Set ToolbarItem = acToolbar.AddToolbarButton(1, \"缩小\

Call ToolbarItem.SetBitmaps(\"E:\\图标\\4.bmp\图标\\4.bmp\")

Set ToolbarItem = acToolbar.AddToolbarButton(2, \"全景显示\

Set ToolbarItem = acToolbar.AddToolbarButton(3, \"最大显示\

Call ToolbarItem.SetBitmaps(\"E:\\图标\\5.ico\图标\\5.ico\")

acToolbar.Visible = True

acApp.MenuGroups(0).SaveAs \"d:\\mymenu.mnu\

End Sub

11、加载线型

'加载线型的子程序

Sub MLoadLineTypes()

Dim BL0 As Boolean

Dim I As Integer, ILen As Integer

Dim Str1 As String

Dim StrLine As String, StrLin As String

StrLin = ThisDrawing.Application.Path + \"\\Support\\\" + \"DZBL.lin\"

If Dir(StrLin) = \"\" Then

MsgBox \"没有找到线型文件\" + StrLin + \"不能进行操作\错误\"

End

End If

Open StrLin For Input As #1

On Error Resume Next

Do While Not EOF(1)

Line Input #1, StrLine

StrLine = Trim(StrLine & \" \")

ILen = Len(StrLine)

If ILen > 1 Then

Str1 = Mid(StrLine, 1, 1)

If Str1 = \"*\" Then

For I = 1 To ILen

If Mid(StrLine, I, 1) = \

Exit For

End If

Next

StrLine = Mid(StrLine, 2, I - 2)

BL0 = False

Call LineTypeExist(StrLine, BL0)

If Not BL0 Then '线型不存在则加载

ThisDrawing.Linetypes.Load StrLine, StrLin

End If

End If

End If

Loop

Close #1

'*FH3_LINE,FH3_LINE ----XXX----XXX----XXX----XXX

End Sub

12、文件File

'''**** File ***********************************

Sub Myfile()

Dim StrFilename As String

StrFilename = \"C:\\Documents and Settings\\yb.LH\\桌面\\drawing2.dwg\"

ThisDrawing.Application.Documents.Open StrFilename

For I = 0 To ThisDrawing.Application.Documents.count - 1

MsgBox ThisDrawing.Application.Documents(I).Name

Next

ThisDrawing.Application.Documents(\"Drawing5.dwg\").Activate '''注意大小写

ThisDrawing.Application.Documents(\"Drawing2.dwg\").Save

ThisDrawing.Application.Documents(\"Drawing2.dwg\").SaveAs \"d:\\drawing2.dwg\"

ThisDrawing.Application.Documents(\"drawing2.dwg\").Close

End Sub

13、控制命令输入窗口SendCommand

'''****************************************************************************** Sub MySendCommand()

ThisDrawing.SendCommand Chr(13) '回车

ThisDrawing.SendCommand Chr(32) '空格

ThisDrawing.SendCommand Chr(27) 'ESC

ThisDrawing.SendCommand Chr(27) + \"Z E \"

ThisDrawing.SendCommand \"_line \"

ThisDrawing.SendCommand \"_pan \"

End Sub

14、三维绘图

Sub yb3DMap()

Dim pt(2) As Double, z As Double

Dim box As Acad3DSolid

pt(0) = 500

pt(1) = 500

pt(2) = -5

Set box = ThisDrawing.ModelSpace.AddBox(pt, 1500, 1500, 10)

box.color = acYellow

For I = 1 To 200

pt(0) = Rnd * 1000

pt(1) = Rnd * 1000

z = Int(Rnd * 300) + 50

pt(2) = z / 2#

Set box = ThisDrawing.ModelSpace.AddBox(pt, Abs(Rnd * 100) + 20, Abs(Rnd * 100) + 20, z)

box.color = Int(Rnd * 100)

Next

ZoomAll

ThisDrawing.SendCommand \"-view _seiso \"

ThisDrawing.SendCommand Chr(27)

ThisDrawing.SendCommand \"_3dcorbit \"

End Sub

3DMesh

Sub Example_Add3DMesh() ' This example creates a 4 X 4 polygonmesh in model space.

Dim meshObj As AcadPolygonMesh

Dim mSize, nSize, count As Integer

Dim points(0 To 47) As Double

'Create the matrix of points

points(0) = 0: points(1) = 0: points(2) = 0

points(3) = 2: points(4) = 0: points(5) = 1

points(6) = 4: points(7) = 0: points(8) = 0

points(9) = 6: points(10) = 0: points(11) = 1

points(12) = 0: points(13) = 2: points(14) = 0

points(15) = 2: points(16) = 2: points(17) = 1

points(18) = 4: points(19) = 2: points(20) = 0

points(21) = 6: points(22) = 2: points(23) = 1

points(24) = 0: points(25) = 4: points(26) = 0

points(27) = 2: points(28) = 4: points(29) = 1

points(30) = 4: points(31) = 4: points(32) = 0

points(33) = 6: points(34) = 4: points(35) = 0

points(36) = 0: points(37) = 6: points(38) = 0

points(39) = 2: points(40) = 6: points(41) = 1

points(42) = 4: points(43) = 6: points(44) = 0

points(45) = 6: points(46) = 6: points(47) = 0

mSize = 4: nSize = 4

'creates a 3Dmesh in model space

Set meshObj = ThisDrawing.ModelSpace.Add3DMesh(mSize, nSize, points)

'Change the viewing direction of the viewport to better see the polygonmesh

Dim NewDirection(0 To 2) As Double

NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1

ThisDrawing.ActiveViewport.Direction = NewDirection

ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport

ZoomAll

End Sub

15、块 (综合练习)

Sub MyBlock()

Dim MySS As AcadSelectionSet

Dim PntTxtSta(0 To 2) As Double, PntTxtEnd(0 To 2) As Double, DTxtAngle As Double '文字插入点,角度

Dim MyPln As AcadLWPolyline

Dim Str1 As String, Str2 As String

Dim StrLineType As String, DLineWidth As Double, LLineColor As Long '线型名称、宽度、颜色

Dim Pns As Variant, Pntsta As Variant, PntEnd As V ariant, Pntln(0 To 3) As Double

Dim ExpObj As Variant

Call DeleAllSelect '删除所有选择集

Set MySS = ThisDrawing.SelectionSets.Add(\"ssa\")

MySS.Select acSelectionSetAll

If MySS.count < 1 Then

Exit Sub

End If

For I = MySS.count - 1 To 0 Step -1

Str1 = MySS(I).ObjectName

If Str1 = \"AcDbBlockReference\" Then

ExpObj = MySS(I).Explode

MySS(I).Delete

For J = 0 To UBound(ExpObj)

Select Case ExpObj(J).ObjectName

Case \"AcDbPolyline\"

Pnts = ExpObj(J).Coordinates

ExpObj(J).Delete

Set MyPln = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pnts)

I1 = UBound(Pnts)

For K = 0 To (I1 / 2 - 1) '宽度设定

MyPln.SetWidth K, DLineWidth, DLineWidth

Next

StrLineType = \"Continuous\"

LLineColor = 2

MyPln.LineType = StrLineType

MyPln.color = LLineColor

Case \"AcDbLine\"

Pntsta = ExpObj(J).StartPoint

PntEnd = ExpObj(J).EndPoint

Pntln(0) = Pntsta(0): Pntln(1) = Pntsta(1)

Pntln(2) = PntEnd(0): Pntln(3) = PntEnd(1)

Pnts = Pntln

ExpObj(J).Delete

Set MyPln =

ThisDrawing.ModelSpace.AddLightWeightPolyline(Pnts)

StrLineType = \"Continuous\"

LLineColor = 3

MyPln.LineType = StrLineType

MyPln.color = LLineColor

'宽度设定

MyPln.SetWidth 0, DLineWidth, DLineWidth

Case \"AcDbPoint\"

Pns = ExpObj(J).Coordinates

ExpObj(J).Delete

ThisDrawing.ModelSpace.AddPoint (Pns)

Case Else

ExpObj(J).Delete '其他如文字、点不再进行处理

End Select

Next

End If

'不是块的不处理

Next

End Sub

16、运行宏

‘’’-vbarun

Sub hong()

ThisDrawing.Application.RunMacro \"InsertRaster\"

End Sub

VB下的AutoCAD自动化一、概念

自动化技术允许一个应用程序驱动另外一个程序。驱动程序被称为自动化客户,另一个为自动化服务器。

VB环境下的AutoCAD自动化就是指用VB驱动和操纵AutoCAD。VB为自动化客户

端,AutoCAD为自动化服务器。

程序界面

**********************程序源代码***************************

Dim nn As Integer

Dim RS As Recordset

Private Sub CommandButton1_Click()

Dim I As Integer

Const PDBCN As String = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"

Set PCN = New ADODB.Connection

Set RS = New ADODB.Recordset

PCN.Open PDBCN + \"C:\\Documents and Settings\\yb.LH\\桌面\\移动拟合法内插\\data1.mdb\"

RS.Open \"select * from DSMR\

Set Me.Adodc1.Recordset = RS

' Me.DataGrid1.DataSource = RS

nn = RS.RecordCount

If RS.RecordCount > 0 Then MSFlexGrid1.Rows = RS.RecordCount + 1 Else Exit Sub

Me.MSFlexGrid1.ColWidth(0) = 500

Me.MSFlexGrid1.ColAlignment(0) = 3

For I = 1 To 3

Me.MSFlexGrid1.ColWidth(I) = 2500

Me.MSFlexGrid1.ColAlignment(I) = 3

Next

Me.MSFlexGrid1.TextMatrix(0, 0) = \"点号\"

Me.MSFlexGrid1.TextMatrix(0, 1) = \"X\"

Me.MSFlexGrid1.TextMatrix(0, 2) = \"Y\"

Me.MSFlexGrid1.TextMatrix(0, 3) = \"Z\"

RS.MoveFirst

I = 0

Do While Not RS.EOF

I = I + 1

Me.MSFlexGrid1.TextMatrix(I, 0) = RS.Fields(\"ID\")

Me.MSFlexGrid1.TextMatrix(I, 1) = RS.Fields(\"X\")

Me.MSFlexGrid1.TextMatrix(I, 2) = RS.Fields(\"Y\")

Me.MSFlexGrid1.TextMatrix(I, 3) = RS.Fields(\"Z\")

RS.MoveNext

Loop

' RS.Close

CommandButton2_Click

End Sub

Private Sub CommandButton2_Click()

Dim meshObj As AcadPolygonMesh

Dim mSize, nSize, count As Integer

'Create the matrix of points

' For I = 0 To nn

mSize = Int(Sqr(nn) - 1): nSize = Int(Sqr(nn) - 1)

ReDim points(mSize * nSize * 3 - 1) As Double

因篇幅问题不能全部显示,请点此查看更多更全内容