"Partファイルから生成した、DrawのViewのリンク元の形状セット名を取得したい"
と言うご質問を頂きました。
残念ながら、今のところ僕にはお望みの方法がわかりません。
現在ファイル間リンクに関しては、リンク元のファイルパスとリンクタイプの取得が
可能だったと思います。
手元に残っているサンプルコードです。
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を利用しているので、ひょっとしたらお望みの結果まで
たどり着けるのかも知れません。