先日、海外にあったマクロのソースコードを見ていた時、
2点ほど自分の認識と異なる部分がありました。
その1つが、異なるCATPart間での要素のコピペです。
通常、単体のPartファイル(例としてHoge.CATPart)内で要素の
コピペを行う場合、Selectionクラスを使う事になります。
以前、"Unofficial CATIA User Forum" で
"異なるCATPart間での要素のコピペは、どのようにやるのか?"
と言う内容の質問が出てきました。 何故なら、Selectionクラスは
Documentクラスのプロパティとしての提供となるため、異なるからです。
(ペースト先をPiyo.CATPartとします)
そこで、
"一時的にCATProductを作成しCATPartをぶら下げ、CATProductの
Selectionを使用してコピペしては?"
と無責任な発言をした所、この方法で出来たようでした。
(自分は試しませんでした・・・)
この方法でも出来たようですが、やる事の割には結構手間のかかる
処理になるだろうと思うのですが、自分もこの方法しか無いと思って
いました。 先日見たマクロには、もっと単純な方法で行われていました。
Documentクラスのプロパティとしての提供されているSelectionクラスは、
インスタンスではなく、恐らく起動したCATIA自身が持つSelectionクラスへの
窓口みたいなものなのだろうと思います。
要は、Hoge.CATPartのSelectionでコピーし、Piyo.CATPartのSelectionで
ペーストするだけでよかったんです。
では、サンプルです。 Partファイルを2個作成します。
Hoge.CATPartには、形状セットと点や線やサーフェス(スケッチ類はNG)を作成し
Piyo.CATPartは何も無い状態でOKです。
ソースコードはこちら
(大文字小文字がおかしくなっていますが、動くはずです)
'VBA Sub CatMain() 'ドキュメント取得 Dim HogeDoc As partDocument Dim PiyoDoc As partDocument Set HogeDoc = CATIA.Documents.item("Hoge.CATPart") Set PiyoDoc = CATIA.Documents.item("Piyo.CATPart") 'セレクション取得 Dim HogeSel As selection Dim PiyoSel As selection Set HogeSel = HogeDoc.selection Set PiyoSel = PiyoDoc.selection 'hoge側の最初の形状セットの最初の要素をコピー HogeSel.Clear HogeSel.add HogeDoc.Part.HybridBodies.item(1).HybridShapes.item(1) HogeSel.Copy 'piyo側にペースト PiyoSel.add PiyoDoc.Part PiyoSel.PasteSpecial ("CATPrtResultWithOutLink") '結果として End Sub
申し訳ない事したなぁ。 単純で、恐らくこちらの方が速度も早い気がします。