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

CATIA宏需求:实现点Length与参数的全关联更新

CATIA宏改造:实现点与参数的全关联

问题背景

现有CATIA宏可创建4个点,但仅在首次创建时,点的Length属性会关联预设参数的数值,存在两个缺陷:

  • 参数值更新时,点的Length不会同步变化
  • 双击宏创建的点,仅显示Length = value,无法看到完整的参数关联路径(如Length = value = CATIA_V5R22_VENT-HOLES-DEFINITION-BACKREST_V01\HOLES_PARAMETERS\HOLE_RADIUS)

解决方案

核心是绑定参数对象而非传递静态数值,通过关联参数的引用实现全联动,同时让CATIA识别并显示完整参数路径。以下是改造后的完整代码:

Private Function GetParameterReference(part As Object, categoryName As String, parameterName As String) As Object
    Dim parameters As Object
    Dim parameter As Object
    Set parameters = part.parameters
    On Error Resume Next
    Set parameter = parameters.Item(categoryName & "\\" & parameterName)
    If Not parameter Is Nothing Then
        Set GetParameterReference = part.CreateReferenceFromObject(parameter)
    Else
        Set GetParameterReference = Nothing  ' 返回空引用表示未找到参数
    End If
    On Error GoTo 0
End Function

Sub points(hybridBody As Object)
    Dim partDocument As Object
    Set partDocument = CATIA.Documents.Item("CATIA_V5R22_VENT-HOLES-DEFINITION-BACKREST_V01.CATPart")
    Dim part1 As Object
    Set part1 = partDocument.part
    
    ' 获取HOLE_RADIUS参数的引用(而非数值)
    Dim holeRadiusRef As Object
    Set holeRadiusRef = GetParameterReference(part1, "HOLES_PARAMETERS", "HOLE_RADIUS")
    
    ' 若未找到参数,直接退出避免报错
    If holeRadiusRef Is Nothing Then
        MsgBox "未找到参数 HOLES_PARAMETERS\HOLE_RADIUS", vbExclamation
        Exit Sub
    End If
    
    Dim hybridShapes1 As Object
    Set hybridShapes1 = hybridBody.hybridShapes
    Dim hybridShapeLinePtDir1 As Object
    Set hybridShapeLinePtDir1 = hybridShapes1.Item("Horiz. Axis")
    
    Dim reference1 As Object
    Set reference1 = part1.CreateReferenceFromObject(hybridShapeLinePtDir1)
    
    Dim hybridShapeIntersection1 As Object
    Set hybridShapeIntersection1 = hybridShapes1.Item("Inter. Right")
    Dim reference2 As Object
    Set reference2 = part1.CreateReferenceFromObject(hybridShapeIntersection1)
    
    Dim hybridShapeFactory1 As Object
    Set hybridShapeFactory1 = part1.hybridShapeFactory
    ' 创建点时先传递临时数值,后续替换为参数引用
    Dim hybridShapePointOnCurve1 As Object
    Set hybridShapePointOnCurve1 = hybridShapeFactory1.AddNewPointOnCurveWithReferenceFromDistance(reference1, reference2, 0, True)
    hybridShapePointOnCurve1.distanceType = 1
    ' 绑定参数引用到Distance属性,实现全关联
    hybridShapePointOnCurve1.Distance.SetReferenceFromObject holeRadiusRef
    hybridShapePointOnCurve1.Name = "Point.1"
    hybridBody.AppendHybridShape hybridShapePointOnCurve1
    part1.InWorkObject = hybridShapePointOnCurve1
    part1.Update
End Sub

关键修改说明

  1. 函数改造:将GetParameterValue改为GetParameterReference,返回参数的Reference对象而非静态数值,为关联绑定提供基础。
  2. 绑定参数引用:创建点后,通过hybridShapePointOnCurve1.Distance.SetReferenceFromObject将点的Length属性与目标参数绑定,而非直接赋值数值。
  3. 错误处理:增加参数不存在时的提示逻辑,避免宏执行报错。
  4. 全联动实现:绑定参数引用后,当HOLE_RADIUS参数值更新时,点的位置会自动同步;双击点时,CATIA会显示完整的参数关联路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:31:13