C#ATIA

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

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

CATIA V5です。
こちらでコメントを頂きました。
指定した要素を新たなPartにコピペして保存 - C#ATIA

Selection経由せずにコピペを行う事は考えた事が無かったので、
取りあえず試してみます。

この様なデータを作りアクティブにしておきます。

続いてこの様なマクロを作りました。

'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 sel As Selection
    Set sel = doc.Selection
    
    sel.Clear
    sel.Add entity
    sel.Copy
    
End Sub

要は、形状セット内の平面をコピーするだけで終了です。

確認の為、マクロを実行しCtrl+Vをしてみるとペーストされます。

OKですね。

続いて・・・何でも良いのですが、こちらをコピーします。

ペーストするとOKですね。


ここからが本題。
文字をコピーし、マクロを実行した後に文字のペーストが出来るか?
を試してみます。

結果はこちら。

残念出来ませんでした。クリップボードを利用していると言う事ですね。


一応、覚えている範囲でですが、"AppendHybridShape" は、
HybridShapeFactoryで新たな要素を作る "AddNew~" メソッドに
関連します。
r1 HybridShapeFactory (Object)

"AddNew~" メソッドで作られた要素は画面上に表示されないので、
その後に形状セットに入れてやる必要があります。
その際に使用するのが "AppendHybridShape" メソッドです。
r1 HybridBody (Object)


”AddItem” ですが、ちょっと思い付かなかったのでオブジェクトブラウザで
検索してみましたが、関連しそうな雰囲気のものは見つかりませんでした。


"Append" についてもオブジェクトブラウザで検索しましたが、大量にヒット
した割には、関連しそうなものが見つかりませんでした。


可能性があるとすれば、HybridShapeFactoryオブジェクトに
"copy~" のようなメソッドが有れば・・・と思いましたが、
それも見つかりませんでした。

(個人的な)結論としてはSelection(=クリップボード)を利用しないで
要素をコピーする方法は無いと思われます。

※プログラム的なお話だと、不用意なインスタンスの生成を回避する為に
デザインパターンの "Factory Method パターン" をCATIAは採用しているのだと
思われます。