向 渝 谭安平
(成都理工大学工程技术学院,四川 乐山 614000)
基于AUTOCAD的图形数据库技术研究
向 渝 谭安平
(成都理工大学工程技术学院,四川 乐山 614000)
目前协同设计是国内外研究的热点。在协同设计中不可避免会产生冲突,结果冲突是协同设计中需要解决的主要冲突之一。文章研究的主要目的就是应用SQL2000和VBA开发工具设计出一个统一的图形数据库,使协同设计者准确高效的对CAD图形进行操作、管理。同时数据库数据在网络中的传输信息量也要少,提高系统的响应速度和稳定性。
协同设计;图形数据库;VBA
实时协同设计技术研究则是网络支持的协同设计领域的热点研究内容之一。但由于Internet 网络带宽限制等诸多方面的影响,实时协同设计是较难实现的。
本文以分布和集中式结构混合构造了一个实时设计系统,用 SQL2000建立了一个统一的网络图形数据库。为实时协同设计提供了基础条件。
1.开发工具的选择
长期以来, AUTOCAD一直是主流的二维cad软件,它提供了强大的构造、管理通用图形对象的功能以及丰富的二次开发手段。以往的二次开发大多关注工程技术,较少涉及图形数据库技术,AUTOCAD2000版本后,增加了VBA作为开发工具,受到众多开发者的欢迎,相关书籍也增多。在 VBA环境中,开发者不仅可以使用 VB中的一切功能,而且可以存取AUTOCAD的整个对象结构,因此我们选择VBA工具实现实体数据库的开发。
2.实体数据
AUTOCAD的基本功能是绘图,绘出图形都是以实体的形式保存。每个实体都对应着相应的实体数据,这些数据是有唯一编号的。在cad的DXF组码中对每一个实体都进行了相应的标识,就如同房间号。相应的数据就存储在房间当中。本课题需要完成的主要任务就是实现图形和数据,数据和图形的转换,使图形和数据方便快捷的共享。图形中的实体数据包括实体的名称(如直线、圆、块等)、ID、点坐标、图层、线型等。
3.数据库的连接
AutoCAD的ActiveX Automation技术允许AutoCAD与其他具有ActiveX Automation技术的外部应用程序交换数据信息。这样,AutoCAD数据信息的来源就被扩大了,它既可以从其他应用程序获得远远超出原有的DWG等AutoCAD文件格式的数据信息,另一方面,也可以把自身图形文件中的信息存储到其他应用程序的文件中。一个最典型的例子就是AutoCAD可以把图形文件中的属性数据传送到Microsoft Excel中去,并存为Excel的报表,以便于管理。
图1 数据库应用程序的组织
在AutoCAD 2005 VBA中可用的数据库访问接口有三种:ActiveX数据对象(ADO)、数据访问对象(DAO)和远程数据对象(RDO)。本课题运用ActiveX数据对象(ADO)访问数据库。
1.用户事件的捕捉
设计者操作实体数据需要自动录入数据库,对设计者操作的捕捉主要用到 VBA中文档层事件。当系统中发生一个事件时,例如:当设计者添加、删除或修改一个对象,或者当用户执行 UNDO,REDO等命令时,文档层事件都会自动触发。课题用到文档层事件中的 Begin Command、Object Added、Object Modified和Begin Close事件等。例如当删除命令开始时,触发数据处理模块的代码如下:
Private Sub AcadDocument _BeginCommand(ByVal CommandName As String)
If CommandName = "ERASE" Then
Call delete ’ 删除实体并把实体数据录入数据库(delete宏为自写代码)
End If
End Sub
2.图形数据库的建立
图形数据库用SQL2000建立,数据库名为tuxing,包含四个数据结构表tuku(实体信息总表),delete(删除实体信息表),add(添加实体信息表),modify(修改实体信息表)。
实体数据信息在SQL图形数据库中的格式,如图2所示为直线数据在tuku表中格结构。
图2 直线数据格式
3.实体数据的处理
要对图形空间中实体数据进行准确的处理,需要每个实体有唯一的编号。在 AUTO CAD中每个实体对应一个唯一的objectID,因此objectID成为一个实体唯一的标识。在实体创建时,可对实体添加扩展数据,将实体对应的objectID号写入扩展数据,使扩展数据成为实体的新标识。扩展数据可以由设计者赋值,将原实体的扩展数据赋值给远端重新生成的实体,使原实体和生成实体都具有相同的标识并在 SQL图形数据库中对应唯一的数据。
(1)添加实体数据的处理图中,对齿轮剖面线的自动添加、位置公差和粗糙度的标注基本没涉及,使得齿轮参数设计不是很全面,需要设计者自行添加部分较多。
(1)齿轮剖面线
在VBA中,提供了AddHatch命令来对剖面进行添加,命令中需要设置剖面区域,剖面线类型,剖面线名称及剖面关联性。剖面区域需要是由实体围成的封闭区域。程序自动完成剖切时,需要区域选择是首尾相连依次选择。下面列举 实心式齿轮上部分剖面线自动生成程序:
patternName = "ANSI31"
PatternType = 0
bAssociativity = True
' Create the associative Hatch object
Set hatchOb =
ThisDrawing.ModelSpace.AddHatch(PatternType,
patternName, bAssociativity)
Dim outerLoop (0 To 1) As AcadEntity
Dim strr(11) As Double
strr(0) = 0.4 * da
strr(1) = 1.5 * da - df / 2
strr(2) = 0.4 * da + s
strr(3) = 1.5 * da - df / 2
strr(4) = 0.4 * da + s
strr(5) = 1.5 * da - d3 /2 - t
strr(6) = 0.4 * da + s - t
strr(7) = 1.5 * da - d3 / 2
strr(8) = 0.4 * da + t
strr(9) = 1.5 * da - d3 / 2
strr(10) = 0.4 * da
strr(11) = 1.5 * da - d3 /2 - t
Set outerLoop (0) =
ThisDrawing.ModelSpace.AddLightWeightPolyline(strr)
pt1(0) = 0.4 * da
pt1(1) = 1.5 * da - d3 /2 - t
pt2(0) = 0.4 * da
pt2(1) = 1.5 * da - df /2 Set outerLoop1(1) =
ThisDrawing.ModelSpace.AddLine(pt1, pt2)
' Append the outer loop to the hatch object,and display the hatch
hatchOb.AppendOuterLoop (outerLoop)hatchOb.Evaluate
(2)齿轮位置公差
VBA中提供了AddTolerance命令来添加公差的标注,在系统中程序自动读取设计者对齿轮位置公差参数的设置,并把它赋值到标注当中。选择设定的位置对齿轮进行标注。跳动公差标注程序如下:
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim direction(0 To 2) As Double
Dim toler As Double
toler = zhichidata.TextBoxtiao.text
' Define the tolerance object
textString = "{Fgdt;h}%%v0" & toler &"%%v{Fgdt;A}"
insertionPoint(0) = 0.5 * da + s + vc#:
insertionPoint(1) = 1.5 * da - 0.5 * da - vc#:
insertionPoint(2) = 0#
direction(0) = 1#: direction(1) = 0#:
direction(2) = 0#
' Create the tolerance object in model space
Set toleranceObj =
ThisDrawing.ModelSpace.AddTolerance(textString,
insertionPoint, direction)
(3)齿轮粗糙度
齿轮粗糙度的自动标注在程序段中,用插入块的方法来进行标注,在对齿轮绘图时,粗糙度块,已由后台程序读取设计者输入参数进行生成。
为了方便用户使用,菜单是一种常用的方法用户只需要通过点击菜单执行程序。要通过点击菜单能够执行相应的程序,实际上就是要凋用相应的宏。以下为菜单调用宏的程序段:
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("齿轮(" +Chr(Asc("&")) + "W)")
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
openMacro = Chr(3) + Chr(3) + Chr(95) + "work" +Chr(32)
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count +1,"直齿圆柱齿轮(C)", openMacro)
newMenu.InsertInMenuBar
(ThisDrawing.Application.MenuBar.Count + 1)
由于菜单只有在运行相应宏时才出现,所以用AUTOlisp工具编程,使CAD启动自动运行宏,让新菜单栏成为系统默认菜单。使实用更方便简洁。同时可运用“work”命令对窗口直接调用。系统菜单栏如图6。
图6 系统菜单栏
本设计采用VBA技术,基于AutoCAD平台开发出了直齿圆柱齿轮的参数化出图,采用莱单运行模式,方便了用户使用,模块化设计便于程序的移植,利用程序开发技术,简化了齿轮工程图的绘制工作量,大大方便了设计人员,同时本系统同对以前齿轮出图系统中的不足进行了补充。由于开发层度有限,系统中存在不足,在以后的进一步开发当中完善。
[1] 张帆.AutoCAD VBA 卡发精彩实例教程[M].北京:清华大学出版社,2004.4-78.
[2] 郑文纬,吴克坚.机械原理[M].北京:高等教育出版社,1997.24.39.
[3] 成大先.机械设计手册[M].北京:化学工业出版社,2004.142·178.
[4] 叶以农.AutoCAD 2000 ActiveX 与 VBA 参考手册[M].北京:中国电力出版社,2001.
[5] 佟士懋,邢芳芳,夏齐霄.AutoCAD ActiveX/VBA 二次开发技术基础及应用实例[M].北京:国防工业出版社,2006.
TP311
A
1008-1151(2011)06-01 2 0-0 2
2011-03-31
向渝(1982-),男,四川人,成都理工大学工程技术学院自动化系教师助教,硕士,研究方向为CADCAPPCAM。