C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

Selection経由せずにコピペ可能か?2

こちらの続きです。
Selection経由せずにコピペ可能か?1 - C#ATIA

"AddNewSurfaceDatum" であれば出来るのでは?
と情報を頂きました。

この様なデータを用意しました。

この様なマクロを用意しました。

'catvba

Option Explicit

Sub CATMain()
    
    Dim doc As PartDocument
    Set doc = CATIA.ActiveDocument
    
    Dim pt As Part
    Set pt = doc.Part

    Dim entity As AnyObject
    Set entity = pt.HybridBodies.Item(1).HybridShapes.Item(1)

    Dim ref As Reference
    Set ref = pt.CreateReferenceFromObject(entity)

    Dim fact As HybridShapeFactory
    Set fact = pt.HybridShapeFactory
    
    Dim res As AnyObject
    Set res = fact.AddNewSurfaceDatum(ref)
    
    pt.HybridBodies.Item(1).AppendHybridShape res
    
    pt.Update

End Sub

実行結果はこちらです。

出来ました。同一Partファイル内であれば出来ます。

前回同様の方法で確認したところ、クリップボードは経由せずに
処理されています。


では本題。
新規のPartファイルにコピペ可能か? です。

この様に修正してみました。

'catvba

Option Explicit

Sub CATMain()
    
    Dim doc As PartDocument
    Set doc = CATIA.ActiveDocument
    
    Dim pt As Part
    Set pt = doc.Part

    Dim entity As AnyObject
    Set entity = pt.HybridBodies.Item(1).HybridShapes.Item(1)

    Dim ref As Reference
    Set ref = pt.CreateReferenceFromObject(entity)
    
    Dim docs As Documents
    Set docs = CATIA.Documents
    
    Dim newDoc As PartDocument
    Set newDoc = docs.Add("Part")
  
    Dim newPt As Part
    Set newPt = newDoc.Part
    
    Dim newHBody As HybridBody
    Set newHBody = newPt.HybridBodies.Add()
  
    Dim fact As HybridShapeFactory
    Set fact = newPt.HybridShapeFactory
    
    Dim res As AnyObject
    Set res = fact.AddNewSurfaceDatum(ref)
    
    newHBody.AppendHybridShape res
    
    newPt.Update

End Sub

新たなPartDocumentを作成して、AddNewSurfaceDatumメソッドを
実行するようにしました。

結果はこちら。

残念、エラーです。

恐らくですが、異なるPart間ではReferenceが共有利用出来ないの
だろうと思われます。


但しちょっと可能性を感じました。古い記載なのですが
こちらでチラッと記載した内容です。
異なるCATPart間での要素のコピペ - C#ATIA

中段ぐらいに "一時的にCATProductを作成しCATPartをぶら下げ、
CATProductのSelectionを使用してコピペしては?"
と記載しているのですが、これをSelectionではなくAddNewSurfaceDatum
メソッドで行えるかも知れませんが、ちょっと直ぐには
試せないかも知れません・・・(色々と忘れているので)