C#ATIA

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

ProductのCGRファイルを差し替える

CATIA V5です。
ちょっとやったことが無かったので試してみました。

データの状態はこんな感じです。

"test1"はCGRファイルです。やる気満々なネーミングでスイマセン。

こちらを "C:\temp\test2.cgr" のCGRファイルと差し替えます。

'vba
Option Explicit

Sub CATMain()

    ' 変更後のCGRのファイルパス
    ' 本当はファイルの有無のチェックを入れてください
    Dim replacePath As String
    replacePath = "C:\temp\test2.cgr"

    ' 親分Productsの取得
    Dim productDoc As ProductDocument
    Set productDoc = CATIA.ActiveDocument

    Dim rootProducts As Products
    Set rootProducts = productDoc.Product.Products

    ' 変更前Product取得
    Dim targetProduct As Product
    Set targetProduct = rootProducts.Item(1)

    ' 差し替え
    ' http://catiadoc.free.fr/online/interfaces/interface_Products.htm#ReplaceComponent
    Dim replaceProduct As Product
    Set replaceProduct = rootProducts.ReplaceComponent( _
        targetProduct, _
        replacePath, _
        True _
    )

    MsgBox "Done"

End Sub

こちらにドキュメントが有るのですが
r1 Products (Collection)
ReplaceComponentメソッドなのですが、第三引数は "高速複数インタンス化" 等で
同じ参照先になっているProductをまとめて差し替えるかどうか? の様です。
(iMultiInstancesの説明は無い・・・)

試していませんが、ReplaceComponentメソッドは差し替えるProductの親の
Productsで行う必要があるような気はしています。

又、新たに差し替えるパスのファイルが無くてもエラーが発生しないようなので、
事前にファイルの有無はチェックした方が安全なようです。