问题:主要测量一个装配体中的各个部件的重心到指定基准面的垂直距离,并根据各个零件的质量,计算每个基准面上的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
到此,就获得了各个零件的重心点到各个基准面的距离了,且带有正负方向。