關於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