こちらの続きです。
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
メソッドで行えるかも知れませんが、ちょっと直ぐには
試せないかも知れません・・・(色々と忘れているので)