C#ATIA

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

プロダクトからCATPartを生成2

こちらの続きです。
プロダクトからCATPartを生成 - C#ATIA

CATPartを生成しつつ、Igesでエクスポートします。
・・・Stepのライセンス無いのでIgesですが、同じでしょう。

'vba プロダクトからCATPartを生成しつつIgesでエクスポート
'この辺を参考にしました
'https://ww3.cad.de/foren/ubb/Forum137/HTML/005735.shtml
'https://www.scripting4v5.com/additional-articles/catia-macro-sendkeys/

Private Const EXPORT_DIR = "C:\temp\"

Sub CATMain()

    Dim prodDoc As ProductDocument
    Set prodDoc = CATIA.ActiveDocument

    Dim prod As Product
    Set prod = prodDoc.Product

    'プロダクトからCATPartを生成の実行
    Dim partDoc As PartDocument
    Set partDoc = execProd2Part(prod)

    'Igesで保存
    Dim exportPath As String
    exportPath = EXPORT_DIR & prod.Name & "_2Part"
    Call partDoc.ExportData(exportPath, "igs")

    '閉じる
    partDoc.Close
    
    'おしまい
    MsgBox "done"

End Sub

'プロダクトからCATPartを生成を実行し
'結果のPartDocumentを返す
Private Function execProd2Part( _
    ByVal prod As Product) _
    As PartDocument
    
    Dim prodDoc As ProductDocument
    Set prodDoc = prod.Parent
    
    '現在のドキュメント数
    Dim docCount As Long
    docCount = CATIA.Documents.Count
    
    'Treeのトップを選択
    Dim sel As Selection
    Set sel = prodDoc.Selection
    
    CATIA.HSOSynchronized = False
    
    sel.Clear
    sel.Add prod

    'プロダクトからCATPartを生成
    CATIA.StartCommand "CATProductToPartCmdHeader"
    CATIA.RefreshDisplay = True
    
    'OKボタン - VBAエディタでも大丈夫
    Dim WSShell
    Set WSShell = CreateObject("WScript.Shell")

    WSShell.SendKeys "c:FrmActivate"
    WSShell.SendKeys "{ENTER}"

    CATIA.HSOSynchronized = True

    'ドキュメントが増えるまで待機
    Do Until CATIA.Documents.Count > docCount
        DoEvents 'めっちゃ重要
    Loop

    Set execProd2Part = CATIA.ActiveDocument

End Function

不安ながら出来てます・・・多分。

OKボタンを押すのは

SendKeys "{Enter}"

より、こちらの方が安定していました。

又、ネックになっていた事が

    'ドキュメントが増えるまで待機
    Do Until CATIA.Documents.Count > docCount
        DoEvents 'めっちゃ重要
    Loop

で、解決しました。


非同期処理についてですが、薄ら記憶はあったので調べてみた所
こちらのExecuteBackgroundProcessusが該当します。
r1 SystemService (Object)
試してはいないのですが、但しHelpの記載からGUIのCATIAからは
失敗しそうな雰囲気を感じます。
かといってバッチ起動のCATIAで "{ENTER}" が成功する雰囲気を
全く感じない為、”無理だろうな” と勝手な判断しました。