こちらの続きです。
プロダクトから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}" が成功する雰囲気を
全く感じない為、”無理だろうな” と勝手な判断しました。