読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

ファイル間リンクの取得

"Partファイルから生成した、DrawのViewのリンク元の形状セット名を取得したい"
と言うご質問を頂きました。
残念ながら、今のところ僕にはお望みの方法がわかりません。
現在ファイル間リンクに関しては、リンク元のファイルパスとリンクタイプの取得が
可能だったと思います。
f:id:kandennti:20151217183544p:plain

手元に残っているサンプルコードです。

Option Explicit

'ファイル間リンクの取得
Sub CATMain()
    Dim oStiEngine As StiEngine
    Dim oStiDBItem As StiDBItem
    
    Set oStiEngine = CATIA.GetItem("CAIEngine")
    Set oStiDBItem = oStiEngine.GetStiDBItemFromAnyObject(CATIA.ActiveDocument)
    Call GetStiDBItem(oStiDBItem)
End Sub

'プロダクトTree取得-再帰
Private Sub GetStiDBItem(ByVal oStiDBItem As StiDBItem)
    Dim oStiDBChildren As StiDBChildren
    Dim oStiChild As StiDBItem
    Dim i As Integer
    
    Set oStiDBChildren = oStiDBItem.GetChildren
    If oStiDBChildren.Count < 1 Then Exit Sub
    For i = 1 To oStiDBChildren.Count
        Set oStiChild = oStiDBChildren.Item(i)
        With oStiChild
            If .IsRoot Then
                Debug.Print "---------------"
                Debug.Print "ドキュメント名: " + GetDocName(oStiChild)
                Debug.Print " ファイルパス: " + .GetDocumentFullPath
                Debug.Print "---------------"
            End If
        End With
        'この指定が無いと、最悪時無限ループに入る
        If oStiDBChildren.LinkType(i) = "CATLinkTypeProduct" Then
                Call GetStiDBItem(oStiChild)
        End If
    Next
End Sub

'Documentを取得し名前を返す。取得できない時はリンク切れ
Private Function GetDocName(ByVal oStiDBItem As StiDBItem) As String
    Dim oDoc As Document
    
    On Error Resume Next
        Set oDoc = oStiDBItem.GetDocument
        If Err.Number = 0 Then
            GetDocName = oDoc.Name
        Else
            GetDocName = "リンク切れ"
        End If
    On Error GoTo 0
End Function

以前、"Unofficial CATIA User Forum" に投稿した古いものです。
元々、PartやProductでの利用を想定していたのですが、
Part-Draw間のリンクでも利用できそうです。
実行した際の結果はイミディエイトウィンドウに出力しています。

---------------
ドキュメント名: Part1.CATPart
 ファイルパス: V:\temp\Part1.CATPart
---------------
---------------
ドキュメント名: Part1.CATPart
 ファイルパス: V:\temp\Part1.CATPart
---------------
---------------
ドキュメント名: Part1.CATPart
 ファイルパス: V:\temp\Part1.CATPart

リンクタイプに関してはこのコードでは取得していません。 試した記憶が
あるので何処かにサンプルコードが残っているはずなのですが・・・。
(StiDBChildrenクラスのLinkTypeメソッドだとは思います。)

"Sti~" で始まる見慣れないオブジェクト達は、SMARTEAM関連のもので
SMARTEAMを持っていなくてもマクロでは一部利用できるようです。


以前こちらで紹介した Digital Photos
ユーザーサイドのCATIA 関連サイト - C#ATIA
独特なサンプルの中の一つにリンク関連のものがあります。
Catia V5 Get Links
以前試した際、エラーが消えるまで直し試したのですが、
上手く動きませんでした。(どの様な結果が得られるかもわかりません)
WinAPIを利用しているので、ひょっとしたらお望みの結果まで
たどり着けるのかも知れません。