CATIA V5 VBA中是否有命令可返回当前打开文件名称以实现宏跨文件复用?
CATIA V5 宏动态适配不同3D文件的实现方案
你现有代码的核心问题是硬编码了固定文件名FILENAME.CATProduct,只要将这部分逻辑替换为动态获取目标3D文档的逻辑,即可无需每次修改代码适配不同文件,以下是两种常用实现方案:
方案1:调用当前已激活的3D文档(操作最简)
适用场景
运行宏前已提前打开目标CATProduct/CATPart文件,只需保证3D文件是最后一次激活的非工程图文档即可,无需手动选择文件。
修改后完整代码
Sub CATMain() Dim drawingDocument1 As DrawingDocument Set drawingDocument1 = CATIA.ActiveDocument Dim drawingSheets1 As DrawingSheets Set drawingSheets1 = drawingDocument1.Sheets Dim drawingSheet1 As DrawingSheet Set drawingSheet1 = drawingSheets1.Item("Sheet.1") Dim drawingViews1 As DrawingViews Set drawingViews1 = drawingSheet1.Views ' 动态获取当前打开的3D文档,兼容CATProduct和CATPart Dim targetDoc As Document Dim i As Integer For i = 1 To CATIA.Documents.Count If TypeName(CATIA.Documents.Item(i)) = "ProductDocument" Or TypeName(CATIA.Documents.Item(i)) = "PartDocument" Then Set targetDoc = CATIA.Documents.Item(i) Exit For End If Next If targetDoc Is Nothing Then MsgBox "未检测到打开的CATProduct/CATPart文件,请先打开目标3D文件后再运行宏" Exit Sub End If Dim targetProduct As Product Set targetProduct = targetDoc.Product ' 生成第一个等轴测视图 Dim drawingView1 As DrawingView Set drawingView1 = drawingViews1.Add("AutomaticNaming") Dim drawingViewGenerativeBehavior1 As DrawingViewGenerativeBehavior Set drawingViewGenerativeBehavior1 = drawingView1.GenerativeBehavior drawingViewGenerativeBehavior1.Document = targetProduct drawingViewGenerativeBehavior1.DefineIsometricView 0.707107, 0.707107, 0#, -0.408248, 0.408248, 0.816497 drawingView1.X = -1262.192063 drawingView1.Y = -1262.192063 drawingView1.[Scale] = 1# drawingViewGenerativeBehavior1.Update ' 生成第二个等轴测视图 Set drawingView1 = drawingViews1.Add("AutomaticNaming") Set drawingViewGenerativeBehavior1 = drawingView1.GenerativeBehavior drawingViewGenerativeBehavior1.Document = targetProduct drawingViewGenerativeBehavior1.DefineIsometricView -0.707107, 0.707107, 0#, -0.408248, -0.408248, 0.816497 drawingView1.X = 7266.177117 drawingView1.Y = -1262.192063 drawingView1.[Scale] = 1# drawingViewGenerativeBehavior1.Update End Sub
方案2:弹出文件选择框手动选择3D文件
适用场景
目标3D文件未提前打开,运行宏时直接在弹出的窗口中手动选择对应CATProduct/CATPart文件即可。
修改后完整代码
Sub CATMain() Dim drawingDocument1 As DrawingDocument Set drawingDocument1 = CATIA.ActiveDocument Dim drawingSheets1 As DrawingSheets Set drawingSheets1 = drawingDocument1.Sheets Dim drawingSheet1 As DrawingSheet Set drawingSheet1 = drawingSheets1.Item("Sheet.1") Dim drawingViews1 As DrawingViews Set drawingViews1 = drawingSheet1.Views ' 弹出文件选择框获取目标3D文件 Dim fileDialog As FileSelectionBox Set fileDialog = CATIA.FileSelectionBox("请选择目标CATProduct/CATPart文件") fileDialog.Filter = "CATIA 3D文件 (*.CATProduct;*.CATPart)|*.CATProduct;*.CATPart" If fileDialog.Show() <> "Normal" Then MsgBox "未选择任何文件,宏终止运行" Exit Sub End If Dim targetDoc As Document Set targetDoc = CATIA.Documents.Open(fileDialog.FilePath) Dim targetProduct As Product Set targetProduct = targetDoc.Product ' 生成第一个等轴测视图 Dim drawingView1 As DrawingView Set drawingView1 = drawingViews1.Add("AutomaticNaming") Dim drawingViewGenerativeBehavior1 As DrawingViewGenerativeBehavior Set drawingViewGenerativeBehavior1 = drawingView1.GenerativeBehavior drawingViewGenerativeBehavior1.Document = targetProduct drawingViewGenerativeBehavior1.DefineIsometricView 0.707107, 0.707107, 0#, -0.408248, 0.408248, 0.816497 drawingView1.X = -1262.192063 drawingView1.Y = -1262.192063 drawingView1.[Scale] = 1# drawingViewGenerativeBehavior1.Update ' 生成第二个等轴测视图 Set drawingView1 = drawingViews1.Add("AutomaticNaming") Set drawingViewGenerativeBehavior1 = drawingView1.GenerativeBehavior drawingViewGenerativeBehavior1.Document = targetProduct drawingViewGenerativeBehavior1.DefineIsometricView -0.707107, 0.707107, 0#, -0.408248, -0.408248, 0.816497 drawingView1.X = 7266.177117 drawingView1.Y = -1262.192063 drawingView1.[Scale] = 1# drawingViewGenerativeBehavior1.Update End Sub
注意事项
- 两种方案都兼容CATProduct和CATPart两种3D文件类型,不需要单独调整代码
- 方案2会自动打开你选中的3D文件,不会修改原文件内容,仅用于工程图视图关联
内容的提问来源于stack exchange,提问作者Davi Pristo
相关产品推荐
相关产品推荐

