关于catia的vba二次开发测量的一个小功能


问题:主要测量一个装配体中的各个部件的重心到指定基准面的垂直距离,并根据各个零件的质量,计算每个基准面上的M*R和M*R^2,也就是配重和转动惯量相关数据

初次接触CATIA,走了好多弯路,由于会使用VB,所以上来就写代码,然后发现方向不对,又回过头来看catia的特性结构和相关实例。

这里建议catia二次开发的初学者们参考 catia V5 的文档和CATIA二次开发技术基础这本书。

 

接下来介绍一下,结构图如下(从自带的文档中截取的):

首先获得Application

  Set CATIA = GetObject(, "CATIA.Application")

  或者创建一个

  Set CATIA = CreateObject("CATIA.Appliaction")

然后就可以由Application获取document了

 

'判断是不是零件文档
Function IsPartDocument(ByVal pDoc As Document) As Boolean
    If (UCase(TypeName(pDoc)) = "PARTDOCUMENT") Then
        IsPartDocument = True
    Else
        IsPartDocument = False
    End If
End Function
'判断是不是产品文档
Function IsProductDocument(ByVal pDoc As Document) As Boolean
    If (UCase(TypeName(pDoc)) = "PRODUCTDOCUMENT") Then
        IsProductDocument = True
    Else
        IsProductDocument = False
    End If
End Function

 

获取某一个product的原点的旋转矩阵和偏移向量

dim base(11)

product1.Position.GetComponents (base)

这里说一下,base(0)-base(8)是该产品在当前工作台中的旋转矩阵,base(9)-base(11)是该产品的坐标原点的偏移向量。

在catia的装配体中,是以第一个零件的坐标系作为装配体的坐标系的,我把它理解为世界坐标系。

 

获取点的偏移向量

dim ps(2)

Set mMeasurable = rootWorkBench.GetMeasurable(ref1)
mMeasurable.GetPoint (ps)

这里ps获得偏移向量是相对于世界坐标系的偏移向量。

于是有下图:

  世界坐标系原点为O,基准坐标系原点为B,所计算的零件重心点坐标为P

  根据向量关系有:BP=OP-OB

获得MP向量后,根据基准面相对于世界坐标系的旋转矩阵,进行投影,也就是与矩阵进行相乘即可。

Function CalcMatrix(ByRef base() As Double, ByRef part() As Double, ByRef pt() As Double) As Double()
    Dim ret(2) As Double
    Dim p(2) As Double
    Dim i As Integer
    
    '世界坐标下的向量bp(基准坐标原点到重心点的向量)
    p(0) = pt(0) - base(9)
    p(1) = pt(1) - base(10)
    p(2) = pt(2) - base(11)
    '根据旋转矩阵,将向量进行投影转换
    For i = 0 To 2
        ret(0 + i) = p(0) * base(0 + 3 * i) + p(1) * base(1 + 3 * i) + p(2) * base(2 + 3 * i)
    Next

    Debug.Print (ret(0) & "    " & ret(1) & "    " & ret(2))

    CalcMatrix = ret

End Function

到此,就获得了各个零件的重心点到各个基准面的距离了,且带有正负方向。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM