ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CATIA二次开发对话框代码:Automation与CAA选型及VBA实战

CATIA二次开发对话框代码:Automation与CAA选型及VBA实战 简介这份资源面向CATIA二次开发初学者与CAA框架实践者聚焦对话框代码的完整实现帮助读者理解如何在CATIA环境中自定义用户界面、收集输入并反馈到三维模型。压缩包共536个文件约2.88MB以365个h头文件、10个cpp源文件、10个catrsc资源脚本、4个catdlg对话框定义及若干bmp位图、mk编译脚本、vcproj工程文件为主另含dll、lib、exe等编译产物完整呈现从对话框模板设计、CDialog派生类编写到消息映射与数据绑定的工程结构。其中CatalogBrowser示例演示了目录浏览器对话框的搭建思路涉及CListCtrl层次数据展示、控件事件响应及CATIA对象访问等关键技术点。已有219人学习下载适合希望系统掌握CAA对话框开发流程、对照工程文件理解资源脚本与代码组织方式的开发者参考。1. CATIA二次开发对话框代码从 Automation 到 CAA 的选型分水岭很多人第一次接触 CATIA 二次开发都是被一个很朴素的需求推着走的把重复的建模动作、参数填写、批量导出塞进一个自己画的对话框里点一下按钮就完事。标题里的「对话框代码」说的就是这件事——在 CATIA 里弹出一个自定义界面收集用户输入再驱动 CATIA 的文档、零件、装配体去执行操作。它解决的是「把脚本变成工具」这一步适合已经会写几行 CATIA 宏、但每次都要改代码里硬编码参数的工程师。但这里有个分水岭决定了你后面所有代码长什么样你是走 Automation自动化路线还是走 CAA组件应用架构路线。前者用 VBA 或 C# 通过 COM 接口调 CATIA对话框用 VBA 的 UserForm 或 .NET 的 WinForm后者是 C 写插件对话框用 CAA 自己的 Dialog 框架编译成 DLL 挂进 CATIA。选错了不是代码写不出来的问题而是你花两周做的东西在同事机器上根本跑不起来。下面按「先立住选型、再动手复现、最后排坑」的顺序把这条路走一遍。2. 两条技术路线的对话框实现差异与选型依据2.1 Automation 路线VBA UserForm 与 .NET WinForm 的取舍Automation 路线的本质是 CATIA 暴露了一套 COM 自动化接口你用任何支持 COM 的语言都能调它。VBA 是 CATIA 内置的打开「工具 → 宏 → 宏编辑器」就能写对话框直接用 VBA 编辑器里的 UserForm拖控件、写事件零配置。这是新手最快能跑通「对话框代码」的方式没有之一。但 VBA UserForm 的短板也很明显控件丑、布局靠手拖、高分屏下缩放玄学、复杂逻辑一多代码就散。所以有经验的工程师会转向 .NET WinForm用 C# 写一个独立的 exe 或 dll通过Marshal.GetActiveObject(CATIA.Application)拿到正在运行的 CATIA 实例WinForm 负责界面C# 负责调 CATIA 接口。界面能力直接拉满还能用 WPF。代价是环境依赖目标机器要有对应版本的 .NET FrameworkCATIA 的 COM 接口要注册正常而且GetActiveObject在 CATIA 没启动时会抛异常得先CreateObject兜底。我一般建议一次性小工具、只在几台机器上用VBA 够了要分发给一个部门、要长期维护、界面要求高直接上 C# WinForm别在 VBA 上耗。2.2 CAA 路线什么时候必须放弃 AutomationAutomation 有个硬边界它只能做 CATIA 已经开放出来的操作。一旦你要碰自定义特征、深度定制工作台、拦截 CATIA 内部事件、做和原生功能无缝融合的界面Automation 就够不着了。这时候只能上 CAA用 C 写对话框基于 CAA 的CATDlgDialog系列类编译成 DLL 放到 CATIA 的安装目录下随 CATIA 启动加载。CAA 的对话框代码和 WinForm 完全不是一个世界控件是CATDlgCombo、CATDlgEditor、CATDlgPushButton这些类布局靠SetGrid和SetColumn手动排事件靠回调函数绑定。学习曲线陡编译环境要装 RADERapid Application Development Environment还要配 CATIA 的 CAA 头文件和库路径。热词里出现的「rade重装」「ds license server 没有怎么办」基本都是 CAA 开发者在配环境时踩的坑。选型判断很简单如果你的对话框只是「收集参数 → 调已有 API → 完成」Automation 全覆盖如果对话框要嵌进 CATIA 原生界面、要操作自定义对象、要做 CATIA 本身没有的功能才上 CAA。绝大多数「对话框代码」需求其实停在 Automation 就够了别一上来就啃 CAA。2.3 一个判断表按需求选路线需求特征推荐路线对话框技术分发方式批量改参数、导出、重命名AutomationVBA UserForm.catvba 宏文件界面复杂、多人使用、要维护AutomationC# WinFormexe 或 dll 注册自定义特征、深度定制工作台CAACATDlgDialogCAA DLL 挂载拦截 CATIA 事件、改原生行为CAACATDlgDialogCAA DLL 挂载临时验证一个想法AutomationVBA UserForm本地宏这张表不是绝对的但能帮你省掉至少一周的试错。下面进入动手部分以最常见的 Automation VBA UserForm 为主线因为它是「对话框代码」这个词最直接的落地形态。3. 用 VBA UserForm 写第一个能跑的 CATIA 对话框3.1 建宏、插 UserForm、拖出最小控件集打开 CATIA菜单「工具 → 宏 → 宏…」新建一个宏库比如叫DlgDemo语言选 VBA点「编辑」进入 VBA 编辑器。在左侧工程树里右键插入一个 UserForm。这就是你的对话框画布。从工具箱拖三个控件上去一个TextBox命名为txtRadius一个CommandButton命名为btnCreateCaption 改成「生成圆柱」再拖一个Label写「半径」。布局不用讲究先跑通。双击btnCreateVBA 会自动生成btnCreate_Click事件框架代码就写在这里面。这一步的关键不是界面好不好看而是确认你的 CATIA 能正常打开 VBA 编辑器、能插入 UserForm。如果这一步就报错多半是 CATIA 安装时没勾 VBA 组件或者宏安全性设置拦住了先去「工具 → 选项 → 常规 → 宏」里把安全性调低再试。3.2 对话框驱动 CATIA 建圆柱的完整代码Private Sub btnCreate_Click() 读取输入框做基本校验 Dim r As Double If Not IsNumeric(txtRadius.Text) Then MsgBox 半径必须是数字 Exit Sub End If r CDbl(txtRadius.Text) If r 0 Then MsgBox 半径必须大于 0 Exit Sub End If 拿到当前 CATIA 应用对象 Dim catApp As Object Set catApp GetObject(, CATIA.Application) 新建一个 Part 文档 Dim catDoc As Object Set catDoc catApp.Documents.Add(Part) 取 Part 对象和它的形状工厂 Dim partObj As Object Set partObj catDoc.Part Dim shapeFactory As Object Set shapeFactory partObj.ShapeFactory 用参考平面建草图画圆再拉伸 Dim refPlane As Object Set refPlane partObj.OriginElements.PlaneXY Dim sketch As Object Set sketch shapeFactory.AddNewSketch() sketch.SetAbsoluteAxisData Array(0, 0, 0, 1, 0, 0, 0, 1, 0) Dim factory2D As Object Set factory2D sketch.OpenEdition() factory2D.CreateCircle 0, 0, r, 0, 0 sketch.CloseEdition partObj.Update 拉伸高度固定 20实际项目里应该也做成输入 Dim pad As Object Set pad shapeFactory.AddNewPad(sketch, 20) partObj.Update 刷新视图 catApp.ActiveWindow.ActiveViewer.Refit MsgBox 圆柱已生成半径 r End Sub逻辑说明先校验输入避免非数字或负数把 CATIA 接口调用搞崩GetObject(, CATIA.Application)拿当前运行的 CATIA 实例注意逗号前留空表示不指定文件Documents.Add(Part)新建零件文档ShapeFactory是建几何特征的总入口草图用OpenEdition打开编辑、CreateCircle画圆、CloseEdition关闭AddNewPad拉伸第二个参数是高度最后Refit让视图自适应不然新建的圆柱可能不在视野里。参数说明txtRadius.Text是字符串必须CDbl转数字CreateCircle的前三个参数是圆心 x、y 和半径后两个是圆的起始角和终止角传 0 表示整圆AddNewPad的高度单位跟随 CATIA 当前的长度单位设置一般是毫米。这些参数在 CATIA 的自动化对象模型文档里都能查到但文档很厚建议按需查别通读。3.3 让对话框从宏列表里直接弹出来上面的代码写在 UserForm 里但 UserForm 不会自己弹。你需要在宏库里加一个普通模块写一个入口过程Sub ShowDlg() DlgDemo.DlgForm.Show End SubDlgForm是你 UserForm 的名字按实际改。然后在 CATIA 的宏列表里就能看到ShowDlg双击运行对话框弹出。这一步很多人卡住是因为把入口过程写在了 UserForm 的代码页里UserForm 的代码页只放控件事件入口过程要放在标准模块里这是 VBA 的规矩。4. 对话框代码的避坑与排查五个血泪现场4.1 现象GetObject报「ActiveX 部件不能创建对象」原因CATIA 没在运行或者 COM 接口没注册。GetObject只能拿已经运行的实例CATIA 没开就找不到。解决先判断拿不到就CreateObject新建一个。代码改成On Error Resume Next Set catApp GetObject(, CATIA.Application) If catApp Is Nothing Then Set catApp CreateObject(CATIA.Application) catApp.Visible True End If On Error GoTo 0注意CreateObject新建的 CATIA 默认可能不可见要显式设Visible True否则用户以为程序卡死了。4.2 现象对话框在别人机器上打不开报宏安全性错误原因CATIA 默认宏安全性是「中」或「高」会拦截未签名的宏。解决让对方在「工具 → 选项 → 常规 → 宏」里把安全性调到「低」或者你给宏做数字签名。分发场景下更稳的做法是写清楚环境要求别指望对方会调。这也是为什么多人使用时我更推荐 C# WinForm——它不受 CATIA 宏安全性限制。4.3 现象AddNewPad报错提示草图无效原因草图没有正确关闭编辑或者草图里没有任何几何元素。OpenEdition之后必须CloseEdition中间至少要画一个元素。解决确认CreateCircle在CloseEdition之前执行且CloseEdition之后调一次partObj.Update再拉伸。顺序错了CATIA 拿到的草图是空的。4.4 现象生成的圆柱位置不对或者视图里看不到原因草图坐标系没设对或者没调Refit。SetAbsoluteAxisData的参数是草图原点和两个轴方向传错就偏了。解决先用Array(0,0,0, 1,0,0, 0,1,0)这个标准值跑通确认能出东西再改坐标系。视图看不到就加catApp.ActiveWindow.ActiveViewer.Refit。4.5 现象CAA 对话框编译过不了报找不到 CATDlgDialog原因RADE 环境没配好或者 CATIA 的 CAA 头文件路径没加进项目。解决确认 RADE 安装完整项目属性里的 include 路径指向 CATIA 安装目录下的CAA相关文件夹库路径指向对应的.lib。热词里「rade重装」不是玩笑CAA 环境出问题重装 RADE 往往比逐个排查快。这也是 CAA 门槛高的直接体现。5. 进阶把对话框做成可复用工具的三个具体技巧第一个技巧是参数持久化。每次打开对话框都要重填参数很烦用 VBA 的SaveSetting和GetSetting把上次输入存进注册表下次打开自动带出来 关闭对话框时保存 Private Sub btnCreate_Click() SaveSetting DlgDemo, Params, Radius, txtRadius.Text ... 其余逻辑 End Sub 对话框初始化时读取 Private Sub UserForm_Initialize() Dim lastR As String lastR GetSetting(DlgDemo, Params, Radius, 10) txtRadius.Text lastR End SubSaveSetting的四个参数是应用名、节名、键名、值GetSetting多一个默认值参数。这样工具用起来就有「记忆」了体验提升很明显。第二个技巧是错误处理统一收口。CATIA 接口调用失败时抛的错误信息对用户毫无意义用On Error GoTo把错误集中到一个处理段翻译成人话再弹给用户Private Sub btnCreate_Click() On Error GoTo ErrHandler ... 主逻辑 Exit Sub ErrHandler: MsgBox 操作失败 Err.Description vbCrLf _ 请检查 CATIA 是否已打开零件文档。, vbExclamation End Sub第三个技巧是验证方法。对话框代码写完别只测正常路径。故意输入空值、负数、超大值、非数字看程序是崩还是给提示故意在 CATIA 没打开时运行看是否优雅降级故意在已有 Part 文档时运行看是新建还是复用。我自己的习惯是每加一个输入框就先把它的边界值全试一遍翻车往往就翻在这些地方。这套习惯帮我省掉了无数次「演示时当场报错」的尴尬。希望帮到你。本文还有配套的精品资源点击获取
返回列表