Autodesk公司的AutoCAD软件广泛地应用于设计领域。AutoCAD作为强大而专业的工程绘图软件,近几年来在工程地质制图方面也得到了广泛应用,如钻孔柱状图、剖面图等。但由于CAD本身的原因以及地质图件的特殊性,完全依赖CAD而不借助第三方软件或对CAD进行二次开发,实现地质图件的计算机化也是一件非常困难的事情。好在CAD是一个灵活而又开放的系统,它提供了许多开放式的接口,允许用户通过这些接口对CAD进行二次开发,以满足不同用户的需要。
在AutoCAD R14以前的版本中,最常用的开发工具是AutoLisp和ADS,这两种开发工具都不适应当前可视化编程的需要。幸运的是,在AutoCAD R14版本中,Autodesk公司在AutoCAD中加入了ActiveX自动化服务功能(ActiveX Automation server capabilities),使得用户可以通过可视化编程工具,如Visual Basic(以下简称VB)、Delphi等对AutoCAD进行二次开发,不但提高了工作效率,也满足了不同专业的需要。最近我院开发了“工程地质CAD绘图系统”软件,荣获本单位优秀软件三等奖。该系统我们以AutoCAD R14为平台,VB为开发工具,应用ActiveX技术对AutoCAD进行了二次开发。本文简略地说明AutoCAD中的ActiveX对象模型结构及对模型对象的编程引用。
1 AutoCAD中的ActiveX对象模型
AutoCAD ActiveX提供了一种机制,或者说是一种方法,可以供开发者通过编程手段来操纵AutoCAD。ActiveX是由一系列的对象,按一定的层次结构组成的,每一个对象都代表了AutoCAD中的一个明确的功能。每一个对象本身包含着自己的属性和方法,通过方法可以实现对象的一些操作,如控制CAD的启动,打开一个文档,一条直线的生成。而属性则是对象自己本身所具有的一些性质,如一个文本对象,它的属性有文本的高度,宽度、文本的颜色,所在层等。应用程序正是通过对AutoCAD暴露的各级对象的方法和属性的引用控制AutoCAD工作的。
理解AutoCAD的对象模型是实现编程的基础。AutoCAD以层次结构组织对象(对象模型图可以参考R14版本中的帮助文件)。在顶层是Application对象(即AutoCAD 本身),其他对象均为Application对象的子对象。在Application对象下面是Preferences(优先设置)和Document(文档)对象,通过Preferences对象可以对AutoCAD Tools>Preferences菜单项中的几乎每一个选项进行访问和修改,以获取或改变AutoCAD的优先设置。Document对象是控制AutoCAD图形文件的直接对象,它代表某一个装入的CAD图形文件(一般设为当前激活的文件)。Document对象下面有Model Space(模型空间)和Paper Space(图纸空间)对象及Blocks(块)、Layers (层)、Plot(出图)、Selectionsets(选择集)、 views(视图)、 utility(功能)等一系列对象(集合),其含义与AutoCAD中相似。Model Space是当前图形文件中图形实体,如直线、圆、多义线等的集合,每个实体即是一个对象,可通过属性和方法改变实体或生成新实体。对非图形实体,如层(layer)、线形(line type)等的访问则通过访问Document对象下面的相应的集合类型的子对象,如Layers 、LineTypes等来实现。集合类型的对象可以使用VB中所有的集合操作方法。Plot对象提供了访问Plot对话框中各选项的桥梁,使应用程序具有用不同方式控制AutoCAD出图的能力。Utility对象使用户在AutoCAD命令行与CAD交互成为可能,通过它可以处理整型、浮点型、字符型等用户输入,还可以接受点(Point)或角(Angle)等AutoCAD的特殊量。以上简要地说明了CAD中的对象及其层次结构关系,有了这些理解对编程控制CAD就不难了。
2 AutoCAD对象的使用
2.1 AutoCAD application对象
如前所述,Application对象位于AutoCAD层次对象结构的顶层,它代表AutoCAD自身,所有的应用程序必须从Appliction对象的建立开始。
Dim aCADapp As Object '建立Application对象
Dim aCADdoc As Object '建立Document对象
Dim mospace As Object '建立Model Space 对象
On Error Resume Next
Set aCADapp = GetObject(, "autoCAD.application")
If Err Then
Err.Clear
Set aCADapp = CreateObject("autoCAD.application") ‘
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Set aCADDoc = aCADApp.ActiveDocument
上一语句是设aCADdoc为当前图形文档。
Set aCADutil = aCADDoc.Utility '与用户交互
aCADApp.Visible = True ‘此语句是使CAD可见。
Set mospace = aCADdoc.ModelSpace 设置mospace为当前图形文档的模型空间。
以上程序段是应用程序初始化的过程,即选择性地启动AutoCAD。如果CAD已经启动则跳此过程,反之则初始化启动CAD。一般对AutoCAD图形文档的操作,主要是与Application、Document、Utility和Model Space等对象发生关系。
Application对象是一系列对象的父对象,可以通过它的属性设置来改变AutoCAD的窗口设置。如下面代码:
aCADapp.Top=100 '设置AutoCAD窗口的位置
aCADapp.Left=200
aCADapp.Height=1000 '调整AutoCAD窗口的大小
aCADapp.Width=800
2.2 Document对象
(1) 对文件的操作
Document对象提供了大多数AutoCAD软件中有关文件的功能,可以通过它在AutoCAD中新建(New)、打开(Open)、输出(Export)、输入(Import)等文件功能操作。编程时先把Document对象设为Application对象的 ActiveDocument属性,以返回当前活动的图形文档。例:
Set aCADdoc=Application.ActiveDocument
请看下面的例子对文件的操作:
Dim Docname As String
Docname = "e:tempzk01.dwg"
If Dir(docname) <> "" Then
aCADdoc.Open docname '如果文件存在则打开CAD文件
Else
aCADdoc.new("aCAD") '若不存在则以aCAD.dwt为模板建立一个新文件。
End If
把当前文档存盘则可以用下面的语句:
if docname<>"" then 'docname不存在时存盘
aCADdoc.save
else
msgbox “该文件已经存在!” '提示该文件已经存在
end if
Document对象还提供了两个非常有用的方法—SetVariable 和 GetVariable,通过它们可以得到(用GetVariable)或改变(用SetVariable )AutoCAD的系统变量。
如语句:
aCADdoc.SetVariable "Orthomode", 1 '打开正交模式
dim CADver As String
CADver=aCADdoc.Getvariable("ACADver") '获取AutoCAD的版本号
(2) 对图形实体的操作
图形实体是指所有CAD的图元物体,如点(point)、线(Line)、圆(Circle)、弧(Arc)、文字(Text)等,它们包含于ModelSpace和PaperSpace集合对象中。对实体的操作总要从这两个集合开始,向下查找相应实体所属的方法或属性。而图形实体的操作包括实体的生成、编辑和查询。 ModelSpace与PaperSpace是所有图形实体的集合,因此要取得图中的某一实体,一般采用遍历查找的方法,下面代码是CAD图形实体的生成、编辑实体或查询。
生成一条直线的代码:
Dim lineobj As Object
Dim pt1(0 To 2) As Double
Dim pt2(0 to 2) as double
Pt1(0)=0#
Pt1(1)=0#
Pt1(2)=0#
Pt2(0)=100#
Pt2(1)=50#
Pt2(2)=0#
SetlineObj = moSpace.Addline(pt1,pt2)
‘画从坐标点pt1至坐标点pt2的直线
改变这条直线的颜色(假设直线实体句柄为"4C")的代码:
Dim tobj As object
Set tobj=aCADdoc.HandletoObject("4C")
tobj.Color=acRed ‘
tobj.Update
查询图形文件中所有实体的实体名、实体句柄、颜色、所在层、线形等参数,如下面的代码所示:
Dim ent As Object
Dim msgStr, NL As String
Dim I as Integer
NL = Chr(13) & Chr(10) ‘回车与换行
I=1
For Each ent in mospace
msgStr = "第" & Format(I) & "个实体信息" & NL & NL
msgStr = msgStr & "实体名: " & ent.EntityName & NL
msgStr = msgStr & "所在层: " & ent.Layer & NL
msgStr = msgStr & "颜色: " & Str(ent.Color) & NL
msgStr = msgStr & "线形: " & ent.Linetype & NL
msgStr = msgStr & "句柄: " & ent.Handle & NL
MsgBox msgStr
I=I+1
Next
相关文章
- 2021-09-08全国专业技术人员计算机应用能力考试用书 AutoCAD2004
- 2021-08-30从零开始AutoCAD 2014中文版机械制图基础培训教程 [李
- 2021-08-30从零开始AutoCAD 2014中文版建筑制图基础培训教程 [朱
- 2021-08-30电气CAD实例教程AutoCAD 2010中文版 [左昉 等编著] 20
- 2021-08-30高等院校艺术设计案例教程中文版AutoCAD 建筑设计案例
- 2021-08-29环境艺术制图AutoCAD [徐幼光 编著] 2013年PDF下载
- 2021-08-29机械AutoCAD 项目教程 第3版 [缪希伟 主编] 2012年PDF
- 2021-08-29机械制图与AutoCAD [李志明 主编] 2014年PDF下载
- 2021-08-29机械制图与AutoCAD [陶素连,周钦河 主编] 2013年PDF下
- 2021-08-28机械制图与AutoCAD 绘图 [宋巧莲,徐连孝 主编] 2012年P