



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于DwgDirectX和扩展实体数据开发AutoCAD图纸明细表提取程序摘要:基于对OpenDWG技术的分析,配合使用DwgDirectX 和AutoCAD扩展实体数据,开发在脱离AutoCAD平台的情况下批量提取DWG文件中明细表的程序,详细的介绍了工程图明细表信息读写实现技术,并给出了关键代码。关键词:明细表 AutoCAD OpenDWG DwgDirectX 扩展实体数据引言:产品的设计过程中产生了大量的装配图,图纸中的明细表纪录了组成该装配件的零部件的信息,标题栏纪录了该图本身的一些属性。工程图中的设计和管理信息集中体现在标题栏和明细栏中,这些信息描述了产品的装配结构。一般情况下,标题栏位于图纸的右下角,每张图纸的设计和管理信息集中反映在标题栏中,包括图号、名称、幅面、比例、设计、校对、审核、版本等;明细栏位于标题栏上方,其中收集了部件装配图中用到的零件清单,包括零件序号、代号、名称、材料、重量等。已有很多文献介绍了基于工程图的位置和形状特征来进行数据提取,但是这些算法对数据的位置和形状特征要求比较苛刻,实际提取过程中会出现数据漏提或错提,而且对于进行了分栏的明细表数据提取更是困难重重。本文提出一种使用基于DwgDirectX和扩展实体数据进行数据提取的方法,可以使数据提取不再受到工程图的位置和形状特征的制约,使数据提取准确、快速。关于附着实体扩展数据在明细表中的应用详见笔者的另一篇论文VBA操作AutoCAD扩展实体数据开发零部件序号标注及明细表关联生成系统。一OpenDWG Toolkit技术剖析AutoCAD的DWG格式是一种非公开的二进制格式。OpenDWG Toolkit(简称“ODT”)是OpenDWG 联盟(“OpenDWG Alliance”,现为“Open Design Alliance”)推出的一组开发工具,其中用来读写DWG格式文件的库DwgDirectX,通过DwgDirectX利用VB、VC等语言可在脱离AutoCAD的情况下直接对DWG读写,能够快捷地访问AutoCAD图形里的各种实体或对象类型,将DWG文件格式解读成为一种开放的工业标准文件格式,对外屏蔽了DWG的版本差异,支持处理AutoCAD 2.5到最新版本DWG文件。数据结构如图所示:DwgDirectX组织数据的方式与ObjectARX非常相似,包括图块(Block)、图层(Layer)、线型(LineType)、形文件(ShapeFile)、视图(View)、视口(ViewPort)、标注样式(DimStyle)、用户坐标系(UCS)、注册应用程序(RegApp)9个容器表,块表包括ModelSpace(模型空间)和PaperSpace(图纸空间)两种基本类型。需要检索扩展数据的实体包含在块表的ModelSpace(模型空间)或PaperSpace(图纸空间)中,本文针对块表的ModelSpace(模型空间)进行操作。二使用DwgDircetX脱离AutoCAD进行数据读写1引用DwgDircetX,建立VB开发环境要实现使用ODT进行数据提取(本文以DwgDirectX1.12版本为例,最新版本为3.0)必须具备的库文件有8个:DwgDircetX.Dll、OdaX.Dll、DD_Alloc.dll、DD_Db.dll、D_Ge.dll、D_Gi.dll、D_Reg.dll、D_Root.dll,在VB中对DwgDircetX.Dll、OdaX.Dll进行引用,然后在VB中添加模块(Module),加入声明:Global odaApp As AcadApplicationGlobal odaDoc As AcadDocument声明之后的“odaDoc”与VBA中的“ThisDrawing”等同使用,这样便可脱离AutoCAD操作实体对象了。2提取明细表数据子过程代码不依赖工程图的位置和形状特征来进行数据提取,而以附着的扩实体数据进行提取,前提是我们已经在绘图过程中,对标题拦和明细栏数据附着了约定规则的扩展实体数据。例如:扩展数据按表中的模式进行附着:序号应用类型实体类别序号数据种类编码(Item)1ListSNList 1序号图号名称数量材料单重总重备注45678910112ListSNList 2序号图号名称数量材料单重总重备注45678910113ListSNList 3序号图号名称数量材料单重总重备注4567891011-ListSNList -序号图号名称数量材料单重总重备注4567891011nListSNList n序号图号名称数量材料单重总重备注4567891011对按上表模式进行了扩展数据附着的明细表实体数据提取自过程如下:提取序号为 Number 明细表数据,声明ListArray为字符型一维数组,保存提取的明细表数据:Public ListArray(0 To 7) As StringPublic Sub ListGET_ByNum (Number As Integer) Dim pDb As IAcadDatabaseDim pb As IAcadBlockDim ent, Pent As IAcadEntityDim XDT, XDV As VariantDim Count,i, j, Lbnd, Ubnd As IntegerDim Item As IntegerDim num As String Set pDb = odaDoc.Database For Each pb In pDb.Blocks If pb.Name = *MODEL_SPACE Then Count = 0 For Each ent In pb Count = Count + 1 Next For i = 0 To Count - 1 Set Pent = pDb.Blocks.Item(*MODEL_SPACE).Item(i) If Pent.ObjectName = AcDbText Then Pent.GetXData ListSN , XDT, XDV If (Not IsEmpty(XDT) And IsArray(XDT) Then Lbnd = LBound(XDT) Ubnd = UBound(XDT) For j = Lbnd To Ubnd If XDT(j) = 1070 Then num = XDV(j) ElseIf XDT(j) = 1071 Then Item = XDV(j) If (num = Number And Item = 4) Then ListArray(0) = Pent.textString 序号 ElseIf (num = Number And Item = 5) Then ListArray(1) = Pent.textString 图号 ElseIf (num = Number And Item = 6) Then ListArray(2) = Pent.textString 名称 ElseIf (num = Number And Item = 7) Then ListArray(3) = Pent.textString 数量 ElseIf (num = Number And Item = 8) Then ListArray(4) = Pent.textString 材料 ElseIf (num = Number And Item = 9) Then ListArray(5) = Pent.textString 单重 ElseIf (num = Number And Item = 10) Then ListArray(6) = Pent.textString 总重 ElseIf (num = Number And Item = 11) Then ListArray(7) = Pent.textString 备注 End If End If Next j End If End If Next i End If Next End Sub执行此子过程则将提取到的序号为Number的明细表数据保存在数组MxlTxtArray中,如此在第1个序号和最大序号之间建立循环,便可将所有序号对应的明细提取得到。对标题栏数据的提取与明细表提取类似。3将提取的数据进行整理生成符合企业标准要求的数据写入DWG文件首先编制写入DWG文件文本(Text)子过程代码如下:Public Sub WriteTXT(Xpt As Double, Ypt As Double, Zpt As Double, textString As Variant, height As Double )Dim Textobj As AcadTextDim InsertionPoint(0 To 2) As Double InsertionPoint(0) = Xpt: InsertionPoint(1) = Ypt: InsertionPoint(2) = Zpt If textString Then Set Textobj = odaDoc.ModelSpace.AddText(textString, InsertionPoint, height) Textobj.Layer = 字体层 Textobj.Alignment = acAlignmentMiddleLeft Textobj.TextAlignmentPoint = InsertionPoint Textobj.StyleName = FSDBHZ Textobj.Update End IfEnd Sub打开输入模块文件template.Dwg,进行录入:Set OdaHost = CreateObject(DWGdirectX.OdaHostApp) 生成应用程序对象Set odaApp = OdaHost.ApplicationSet odaDoc = odaApp.Documents.Open(App.path & template.Dwg) WriteTXT Xpt, Ypt, Zpt, textString, height 序号图号名称 数量材料单件总计备注Xpt X坐标Ypt Y坐标Zpt Z坐标,一般为0textString 内容:序号图号名称 数量材料单件总计备注height 高度 odaDoc.SaveAs (App.path & & DwgFilesName) DwgFilesName:输出DWG文件名 odaDoc.Close三结论本文提出了基于DwgDirectX利用扩展实体数据提取图纸信息的程序设计思路和实现方法,并给出了关键代码,AutoCAD扩展实体数据与DwgDirectX的配合使用为企业实现信息化系统技术集成提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卸货平台安全培训课件
- 2025年度韩城矿业公司高校毕业生招聘86人笔试参考题库附带答案详解
- 2025年国网宁夏电力有限公司第二批招聘高校毕业生调剂笔试参考题库附带答案详解
- 2025山东威海市乳山鑫蜜客人力资源有限公司招聘书记员7人笔试参考题库附带答案详解
- 2025天津东疆综合保税区管理委员会招聘10人笔试参考题库附带答案详解
- 2025四川长虹新网科技有限责任公司招聘装调工等岗位31人笔试参考题库附带答案详解
- 2025人保财险嘉兴市分公司社会招聘3人(浙江)笔试参考题库附带答案详解
- 2025中国机械工业集团有限公司国机集团总部社会招聘19人笔试参考题库附带答案详解
- 地铁岗前安全培训课件
- 地铁基坑汛期安全培训课件
- 《构成设计基础》全套教学课件
- 项目初步验收汇报
- 2025年山东省济宁市电工等级低压电工作业(应急管理厅)真题(含答案)
- otc药品管理办法
- 康复医学科病历书写规范与质量控制
- 商用厨房设计汇报
- 战术搜索教学课件
- 教科版五年级科学上册第一单元《光》测试卷及答案(含四题)
- Linux操作系统基础任务式教程(慕课版)课件 任务4 使用Linux操作系统中的硬盘
- 自控系统报警管理制度
- 口腔服务5S管理
评论
0/150
提交评论