网站首页  词典首页

请输入您要查询的论文:

 

标题 基于Creo二次开发实现AutoCAD布局图参数化
范文

    张文晓

    摘要:本文主要介绍了如何在Excel中利用VBA对Creo进行简单的异步模式下的二次开发,实现任意模型的任意投影视图的DWG文件自动导出,并且在AutoCAD里自动更新布局图,从而实现二维布局图的参数化。

    关键词:Excel;VBA;Creo;二次开发;异步模式;AutoCAD布局圖参数化

    中图分类号:TP391 文献标识码:A

    文章编号:1009-3044(2019)12-0295-03

    Parameterize AutoCAD layout Based on The Secondary Development in Creo

    ZHANG Wen-xiao

    (Ingersoll Rand Engineering Technology Center-Asia Pacific, Suzhou 215400, China)

    Abstract: This article mainly introduced how to use VBA in Excel to do the secondary development in simple asynchronous mode for Creo, and achieve automatic export of DWG file of any view of model, and update the 2D drawing in AutoCAD to parameterize 2D layout.

    Key words: Excel; VBA; Creo; Secondary Development; Asynchronous Mode; Parameterize 2D AutoCAD layout

    为了引出本文主题,我们要首先讨论一下制图软件。机械领域有一个形象的比喻,说图纸是工程师的语言。那么制图软件无疑是工程师手里的重要工具。制图软件包括二维软件、三维软件,二维软件和三维软件各有各的特点,应用于特定的场合。简而言之,笔者以为二维软件最大的特点是灵活,最大的缺点是无法参数化驱动。三维软件最大的优点是可以参数化驱动、三维模型用途广泛,缺点是建模烦琐、不易更改。

    那么,什么时候用三维软件?什么时候用二维软件?

    根据二者的特点,一般地,二维软件很适合做前期方案的模拟,三维软件适合后期做细节设计时建模、出图。当然,国内很多厂家仍然用二维软件来出图。

    既然二维软件仍然大有用处,那么如果能综合三维软件参数化的特点,以及二维软件灵活的特点,在三维软件中参数化画图,然后批量转换为二维图,并在画二维布局图时引用这些自动导出的图纸,那么就间接地实现二维布局图的参数化,那么势必在特定场合下会大大提高效率。

    当然二维图参数化,可以在AutoCAD中通过编程实现,但是,前提是必须针对某一特定结构编程,这样是无法做到通用的。下面,就以Creo和AutoCAD为例,说明如何结合三维软件和二维软件,实现任意结构二维图的参数化,并简要说明在哪些场合应用。

    1在Creo中利用FamilyTable建立参数化模型

    在Creo里利用FamilyTable批量地创建模型,是Creo参数化建模的重要功能。具体的操作方法网上或者PTC的帮助文档里有大量的资料以及实例可以参考。此过程亦不是本文所要论述的重点,故而在此不再赘述,请读者自行查找相关资料。

    2在Excel中编程实现从Creo中导出DWG图纸

    2.1General

    在此例中,Excel在Creo的二次开发过程中相当于一个启动器。除此之外,Excel表单里也存储着待导出的模型名称、导出DWG文件名、导出位置等程序需要的数据,用于程序运行时读取。

    当然,如果有必要,读者可以在Visual studio中开发自己的可执行的应用程序,这样就可以脱离excel单独运行。但就实现本例中的目的而言,在Excel里操作是最简单方式。

    2.2开发环境简介

    在Excel中通过VBA进行二次开发,实际是利用Creo Parametric提供的VB API中的一些开发接口来接入Creo Parametric。同时,利用OLE objects操作模型以及从模型中获取数据。

    具体地,就是在Excel VBA中引用VB API,并用CCpfcConnectionId.Create() and CCpfcAsyncConnection.ConnectById()两个函数建立Excel和Creo之间的连接。后续,再通过VB API里的一些函数和方法,调用Creo模型,针对模型实现后续操作。

    2.3 Creo VB API基础知识

    2.3.1 引用VB API

    首先需要创建一个对 Creo VB API的引用。在Excel里按alt+F11进入VBA代码编辑器,点击工具→引用,勾选“Creo VB API Type Library for Creo Parametric 4.0”。如下图所示。

    2.3.2 如何利用PTC给出的VB API指南

    事实上PTC公司已经给出了函数说明以及丰富的示例代码,供我们二次开发时参考,如果我们妥善加以利用,能起到事倍功半的效果。下面介绍一下如何得到这些参考:

    在Creo的安装路径下,找vbapi文件夹,笔者路径为C:\ptc\Parametric4_M050\Creo 4.0\M050\Common Files\vbapi。

    其中vbug.pdf文档是PTC公司提供的VB API用户操作指南。如果你想实现某一功能的代码,可以在此文档里按照一定的关键词检索;

    打开C:\ptc\Parametric4_M050\Creo 4.0\M050\Common Files\vbapi\vbapidoc路径下的IESwing.html文件,可以得到VB API Creo Parametric 3.0 (VB) APIWizard,可以从中查找你要用的具体函数;

    另外,进入PTC公司的e-support论坛,也能找到一些文章和解决方案。

    2.4 建立Excel与Creo的连接

    如果Creo没打开,可以用下面方式打开Creo并建立Excel与Creo的链接:

    Dim cAC As CCpfcAsyncConnection

    Set cAC = New CCpfcAsyncConnection

    Dim asyncConnection As IpfcAsyncConnection

    Set asyncConnection = cAC.Start("C:\ptc\Parametric4_M050\Creo 4.0\M050\Parametric\bin\ parametric.exe " + " -g:no_graphics -i:rpc_input", ".")

    如果Creo已经打开,则可以用下面方式建立二者之间的链接:

    Dim cAC As CCpfcAsyncConnection

    Dim asyncConnection As IpfcAsyncConnection

    Dim session As IpfcBaseSession

    Set cAC = New CCpfcAsyncConnection

    Set asyncConnection = cAC.Connect(Null, Null, Null, Null)

    Set session = asyncConnection.session

    注意,如果代码运行过程中,出现"Microsoft Office Excel is waiting for another application to complete an OLE action"报错,说明Excel调用Creo进程的时间,比Excel许用的等待时间长,所以出现提示。解决方案是——最好提前打開Creo,并登陆PDM系统(笔者用的是windchill),然后再建立连接。

    2.5 由模板创建Creo工程图并加载模型

    首先我们应建立一个图纸模板,并在模板中设置好图纸导出时视图的默认比例(建议设为1:1),线型等,以便导出的图纸是我们预期的格式。如何建立图纸模型本文不再赘述。

    建好模板之后,我们将在代码中,利用CreateDrawingFromTemplate函数,按预先建好的模板创建Creo工程图。具体代码如下:

    'Create drawing from template

    Dim descModelOpen As CCpfcModelDescriptor

    Set descModelOpen = New CCpfcModelDescriptor

    Set modelDesc = descModelOpen.CreateFromFileName(solidName)

    Call drawingOptions.Insert(0, EpfcDrawingCreateOption.

    EpfcDRAWINGCREATE_DISPLAY_DRAWING)

    Call drawingOptions.Insert(1, EpfcDrawingCreateOption.

    EpfcDRAWINGCREATE_SHOW_ERROR_DIALOG)

    Set drawing = session.CreateDrawingFromTemplate(drawingName, predefinedTemplate,

    modelDesc, drawingOptions)

    代码中drawingOptions.Insert用来设置创建图纸的选项。具体如何设置,读者可以在本文的2.3.2中介绍的User guide或者在VB API Wizard中搜索关键字drawingOptions,根据自己的需求设置。

    2.6 根据用户选择的view创建投影视图

    一个三维模型一般可以生成6个面的投影,即FRONT, BACK, LEFT, RIGHT, TOP, BOTTOM。

    程序里可以留接口给用户选择要哪一个面的投影。在程序里,Creo实际是通过一个matrix矩阵来控制生成视图的方向的。那么我们需要把用户需求(投影面),转化成程序语言(matrix矩阵)。具体实现的方法是:

    1. 获取用户输入的投影面(可以读取Excel表格中特定单元格),如Front;

    2. 获取用户投影的模型句柄;

    3. 获取模型类里,名字为Front的view的matrix矩阵;

    4. Normalize此矩阵;

    整个view创建过程示例代码如下:

    Dim myIpfcSheetOwner As IpfcSheetOwner

    Set myIpfcSheetOwner = drawing

    sheetNo = myIpfcSheetOwner.CurrentSheetNumber

    Dim myIpfcModel2D As IpfcModel2D

    Set myIpfcModel2D = drawing

    Set solidModel = myIpfcModel2D.GetCurrentSolid

    Set matrix = New CpfcMatrix3D

    Dim viewOwner As IpfcViewOwner

    Set viewOwner = solidModel

    Dim ProjView As IpfcView

    Set ProjView = viewOwner.GetView(ViewName)

    Set matrix = ProjView.transform.matrix

    Call NormalizeMatrix(matrix)

    Dim CCtransF As CCpfcTransform3D

    Set CCtransF = New CCpfcTransform3D

    Set transF = CCtransF.Create(matrix)

    Set pointLoc = New CpfcPoint3D

    Call pointLoc.Set(0, 0):Call pointLoc.Set(1, 0):Call pointLoc.Set(2, 0)

    Dim CCGeneralViewCreateInstructions As CCpfcGeneralViewCreateInstructions

    Set CCGeneralViewCreateInstructions = New CCpfcGeneralViewCreateInstructions

    Set genViewInstructions = CCGeneralViewCreateInstructions.Create(solidModel,

    sheetNo, pointLoc, transF)

    Set view2D = myIpfcModel2D.CreateView(genViewInstructions)

    2.7 在代码利用Creo中的MapKey将Creo工程图导出为DWG图纸

    利用VB API将Creo工程图导出为其他格式文件,大体上有两种方式:

    1.如果导出格式为PDF,DXF等格式,可以直接用函数IpfcModel.Export()导出,以导出DXF文件为例,代码如下:

    Dim model As IpfcModel

    Set model = drawing

    session.OpenFile(model.Descr).Activate

    Dim dwginstructions As IpfcDXFExportInstructions

    Dim exportInstructions As IpfcExportInstructions

    Dim CCpfcDWG As CCpfcDXFExportInstructions

    Set CCpfcDWG = New CCpfcDXFExportInstructions

    Set dwginstructions = CCpfcDWG.Create()

    Set exportInstructions = dwginstructions

    Call model.Export(outdir & "\" & drawingName & ".dxf", exportInstructions)

    2.如果导出格式为DWG,则不能用函数直接导出,因为VB的API里并没有预留直接导出DWG文件的接口。此时,可以用在程序里运行宏代码的方式实现。至于如何在程序中加入宏代码,以及宏代码在使用时的限制等,由于内容较多,具体实现步骤笔者会在另外一篇文章里详细叙述。在此只提供实例代码如图2。

    2.8 拭除内存,循环上述步骤

    每次导出DWG文件之后,要清空内存,以免运行下一张图纸的时候,由于模型已经在内存中存在而造成冲突报错。实现的方式依然可以用宏代码。由于比较简单,请读者参照笔者的另一篇关于如何在代码里使用宏代码的文章自己编写。

    3 在AutoCAD布局图里引用外部DWG图纸

    在布局图里,Insert-DWG Reference,即可插入外部图形参考。

    当设计方案有变动时,只需要更改Creo三维模型中的参数值,再运行一遍程序,即可导出更新之后的DWG图纸。然后再重新打开布局图的时候,参考外部的图纸会自动更新,从而实现了整个布局的更新。这也是整个过程的原理所在。

    至此,我们就实现了,二维布局图的参数化。简单总结一下就是利用:

    a. 三维参数化建模

    b. 二次开发程序批量导出投影视图

    c. 布局图里插入外部参考引用

    4 优势与不足

    下面简要说明用此方法创建参数化二维布局图的优势与不足:

    当然有的读者可能会问,那为什么不直接在三维软件里生成布局图?

    首先,三维软件里生成的布局图不便于像在二维软件里那样快速地移动、复制、修改,从而使用户可以快速地做一些装配模拟。这也是引言里阐述的为什么用二维软件创建布局图的重要原因。其次,三维软件里用族表创建视圖之后,需要逐一将模型加到图形里,然后逐一创建视图,才能看到所有方案的“全貌”。而用本文所述方法,只需要在二维布局图中插入外部参考时,全选所有的备参考图纸,即可一次性将所有图纸都插入布局图中。从而实现了,把三维模型中“藏”在族表下的层级并列的每个实例,平铺到一张二维图中,使用户可以一眼看到所有的设计方案。

    5 结论

    结合上述这种方式的优缺点,可以想见此工作方法很适合用于——当需要在AutoCAD里画大量布局图,并且布局图里的尺寸、结构需要频繁更改的场合。

    当然,这个方法有趣的地方在于,其用程序建立了数据-三维软件-二维软件之间的连接,可以使用户更加自由、方便地获取所需的二维视图,应用于设计过程。

    最后,本文旨在给读者提供一个设计思路和方法。鉴于篇幅有限,本文并没有展示所有的技术细节(例如如何在familytable里建模、如何创建投图模板、VB API和VBA中的代码有何区别、如何控制投影视图基点、比例、如何使用宏代码等等),有一些读者可以自行完成,编程相关部分留待其他文章中详述。

    参考文献:

    [1] Parametric Technology Corporation. PTC VB API帮助文档.USA:PTC, 2018.

    [2] 张继春. ProΠENGINEER二次开发实用教程[M]. 北京:北京大学出版社,2003.

    [3] 张帆. AutoCAD VBA开发精彩实例教程[M]. 北京:清华大学出版社,2003.

    【通联编辑:梁书】

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2024/12/22 20:18:44