You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CATScript/VBScript中向选中产品添加子产品结构?

解决CATIA V5 CATScript产品结构创建与几何束转换问题

需求与问题

  • 基础需求:运行宏前在产品树中选中任意层级的产品,宏执行时:
    1. 弹窗输入自定义名称
    2. 在选中产品下创建A_<名称>子产品
    3. 在A_<名称>下创建B_<名称>、C_<名称>、D_<名称>、E_<名称>四个子产品
  • 当前问题:原代码仅支持向根产品添加结构,尝试直接将Selection赋值给Product变量时因类型不匹配报错
  • 进阶需求:将A_<名称>产品转换为Geometrical Bundle(非集合),并添加允许向其添加Multibrancheables的电气发布属性

修改后的完整CATScript代码

Language="VBSCRIPT"
Sub CATMain()
    ' 声明变量
    Dim oSel As Selection
    Dim oTargetProduct As Product
    Dim sName As String
    Dim oMainChild As Product
    Dim oChildProducts As Products
    
    ' 获取选中对象
    Set oSel = CATIA.ActiveDocument.Selection
    If oSel.Count = 0 Then
        MsgBox "请先在产品树中选中一个产品!", vbExclamation
        Exit Sub
    End If
    
    ' 验证选中对象为Product类型
    Set oTargetProduct = oSel.Item(1).Value
    If Not TypeName(oTargetProduct) = "Product" Then
        MsgBox "选中对象必须是产品类型!", vbExclamation
        Exit Sub
    End If
    
    ' 获取输入名称
    sName = InputBox("请输入装配名称", "输入框", "name")
    If sName = "" Then
        MsgBox "名称不能为空!", vbExclamation
        Exit Sub
    End If
    
    ' --------------------------
    ' 1. 创建A_<名称>子产品
    ' --------------------------
    Set oMainChild = oTargetProduct.Products.AddNewComponent("Product", "")
    oMainChild.PartNumber = "A_" & sName
    oMainChild.Name = "A_" & sName
    
    ' --------------------------
    ' 2. 将A_<名称>转换为Geometrical Bundle
    ' --------------------------
    oMainChild.Activate
    oMainChild.SetGeometricalBundle True ' True表示转换为非集合类型的几何束
    
    ' --------------------------
    ' 3. 设置电气发布属性(允许添加Multibrancheables)
    ' --------------------------
    oMainChild.PublishForElectrical = True
    ' 设置允许Multibrancheables的属性
    oMainChild.SetAttribute("CATIAElectricalAllowMultibrancheables", "Yes")
    
    ' --------------------------
    ' 4. 在A_<名称>下创建B/C/D/E子产品
    ' --------------------------
    Set oChildProducts = oMainChild.Products
    ' 创建B_<名称>
    AddNamedProduct oChildProducts, "B_" & sName
    ' 创建C_<名称>
    AddNamedProduct oChildProducts, "C_" & sName
    ' 创建D_<名称>
    AddNamedProduct oChildProducts, "D_" & sName
    ' 创建E_<名称>
    AddNamedProduct oChildProducts, "E_" & sName
    
    MsgBox "产品结构创建完成!", vbInformation
End Sub

' 辅助函数:向Products集合添加指定名称的产品
Sub AddNamedProduct(oProducts As Products, sFullName As String)
    Dim oProd As Product
    Set oProd = oProducts.AddNewComponent("Product", "")
    oProd.PartNumber = sFullName
    oProd.Name = sFullName
End Sub

关键修改说明

1. 正确获取选中产品

  • 使用CATIA.ActiveDocument.Selection获取选中集合,再通过Item(1).Value取出第一个选中的Product对象
  • 添加了选中验证:判断选中数量、对象类型,避免非法输入导致报错

2. 动态适配父产品层级

  • 将原代码中固定的根产品oRootProduct替换为选中的oTargetProduct,所有子产品创建逻辑基于该父节点,支持任意层级的选中产品

3. 几何束转换与电气属性设置

  • 调用Product.Activate确保目标产品处于激活状态
  • 使用SetGeometricalBundle True将产品转换为非集合类型的Geometrical Bundle
  • 通过PublishForElectrical = True开启电气发布,再用SetAttribute设置允许添加Multibrancheables的属性

4. 代码优化

  • 提取AddNamedProduct辅助函数,避免重复代码,提升可维护性

内容的提问来源于stack exchange,提问作者Janwillem3DGeoInt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:25:39