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

调用CATIA的SetComponents时触发‘Function Marked as Restricted’错误

问题分析与解决方案

错误原因

  1. 数组类型与传递不匹配:CATIA的SetComponents方法要求传入Variant类型的一维数组,且每个元素必须是Double类型。原代码中数组声明和赋值的方式,导致传递给COM接口的数组不符合类型要求;另外VBA向CATIA接口传递数组时,必须是基于0的一维数组,类型不兼容会触发该限制错误。
  2. 参数类型隐患:原函数的Position() As Variant参数,可能导致传入的平移分量不是Double类型,污染整个目标数组的类型,引发接口类型校验失败。

SetComponents方法的正确用法

SetComponents是CATIA Position对象的方法,用于通过12个分量定义产品位姿(前9个为旋转矩阵的三个列向量,后3个为平移向量),语法如下:

object.SetComponents(Components)

参数说明:

  • object:有效的Product.Position对象
  • Components:Variant类型一维数组,包含12个Double元素,顺序为:
    [X轴X分量, X轴Y分量, X轴Z分量, 
     Y轴X分量, Y轴Y分量, Y轴Z分量, 
     Z轴X分量, Z轴Y分量, Z轴Z分量, 
     平移X, 平移Y, 平移Z]
    

修正后的代码示例

Sub Positionieren(productToMove As Product, XCoord() As Double, YCoord() As Double, ZCoord() As Double, Position() As Double)
    ' 确保产品处于可编辑状态(按需添加,避免权限错误)
    productToMove.ProductContext.Activate
    
    Dim transformationMatrix As Variant
    ' 初始化符合要求的12元素Variant数组,所有元素为Double类型
    transformationMatrix = Array( _
        XCoord(0), XCoord(1), XCoord(2), _
        YCoord(0), YCoord(1), YCoord(2), _
        ZCoord(0), ZCoord(1), ZCoord(2), _
        Position(0), Position(1), Position(2) _
    )
    
    productToMove.Position.SetComponents transformationMatrix
End Sub

关键注意事项

  • 数组类型严格校验:必须使用Variant数组,且每个元素都是Double类型,禁止混合其他数据类型。
  • 参数类型优化:将Position() As Variant改为Position() As Double,确保平移分量都是数值类型。
  • 产品状态检查:调用方法前需确认产品处于可编辑状态,否则可能触发权限类错误。
  • 数组长度验证:确保XCoord、YCoord、ZCoord是长度为3的Double数组,Position是长度为3的Double数组,避免索引越界。

内容的提问来源于stack exchange,提问作者balla.zoltan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:41:06