Product内のCATPartをSTEPファイルで出力|CATIAマクロの作成方法
今回の記事はマクロ案募集でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ワークベンチ:アセンブリーデザイン
マクロ案:Product内のパートファイルを、 STP形式でエクスポートする。(ST1ライセンス前提)
※STP/STEP(拡張子.stp):国際標準化機構{ISO]により規格された中間ファイル
CATIAではST1ライセンスを取得していないと使用不可なファイル形式
今回の内容はほとんど下記ページと同じです。
そのため本ページではあまり深くまでは踏み込んでいないのであらかじめご了承下さい。
マクロの機能
今回作成したマクロはCATPartをSTEPファイル(拡張子.stp)として出力するマクロです。
具体的な機能は以下のとおりです。
・CATPartを選択した場合はそのCATPartのみをSTEPファイルとして出力
・ファイル名は「各CATPartのパーツ番号.stp」
・マクロ実行後にデスクトップに新規作成される「STEP書き出し 日時」フォルダに出力
・出力後はフォルダを開く
※注意点
・設計モードになっているCATPartのみ対応
・「STEP書き出し 日時」と同名のフォルダがデスクトップにある場合はマクロ中断
(日時には現在の「年/月/日/時/分/秒」が入力されるため、同名フォルダは存在しないはず )
上記の注意点にも書かれているとおり設計モードのCATPartのみ出力することができます。
そのため構成部品数が多いProductの場合は特に、出力漏れがないか注意が必要です。
サンプルコード
マクロのコードは以下のとおりです。
マクロ実行後に選択したProduct以下にあるCATPartをすべてSTEPファイルとして出力します。
実行後にマクロの操作をキャンセルしたい場合は[Esc]キーを押下してください。
※コピペで実行可能ですが、保存場所のパスだけは自身の環境に合わせて書き直す必要あり。
下記コード45行目の"SavePath"の中身を自身の環境に合わせて書き換えないと、
66行目の「Set CreateFold = FileSys.CreateFolder(FoldPath)」でエラーが発生するので注意。
Option Explicit
Sub CATMain()
Dim ProDOC As ProductDocument
If TypeName(CATIA.ActiveDocument) <> "ProductDocument" Then
MsgBox "このマクロはProductDocument専用です。" & vbLf & _
"アセンブリーワークベンチに切り替えて実行してください。"
Exit Sub
End If
Set ProDOC = CATIA.ActiveDocument
'*********************************************
' Product選択
'*********************************************
Dim SEL
Set SEL = ProDOC.Selection
SEL.Clear
Dim InputType(0)
InputType(0) = "Product"
Dim msg As String
msg = "Productを選択してください。"
Dim Status As String
Status = SEL.SelectElement2(InputType, msg, False)
If ((Status = "Cancel") Or (Status = "Undo")) Then
Exit Sub
End If
SEL.Search ("パート・デザイン.パーツ,sel")
If SEL.Count = 0 Then
MsgBox "選択したProduct内にPartは存在しません。"
Exit Sub
End If
'*********************************************
' 書き出し用フォルダ作成
'*********************************************
Dim SavePath As String
SavePath = "C:\Users\ユーザー名\Desktop" '保存場所のパスを入力 ※必ず自分の環境のものに書き換えて下さい
Dim FoldName As String
FoldName = "STEP書き出し " & Year(Date) & Month(Date) & Day(Date) & _
Hour(Time) & Minute(Time) & Second(Time) '作成するフォルダ名を指定
Dim FoldPath As String
FoldPath = SavePath & "\" & FoldName '新規フォルダのパス"
Dim FileSys 'As FileSystem
Set FileSys = CATIA.FileSystem
Dim FoldExi As Boolean
FoldExi = FileSys.FolderExists(FoldPath)
If FoldExi = True Then
MsgBox "予期せぬエラーが発生しました。" & vbLf & _
"再度マクロを実行し直してください。"
Exit Sub
End If
Dim CreateFold As Folder
Set CreateFold = FileSys.CreateFolder(FoldPath)
'*********************************************
' IGES出力
'*********************************************
Dim i As Integer
Dim SELPart As Part
Dim SELDOC As Document
For i = 1 To SEL.Count
Set SELPart = SEL.Item(i).Value
Set SELDOC = SELPart.Parent
SELDOC.ExportData FoldPath & "\" & SELPart.Name, "stp" '.stpで出力"
Next i
SEL.Clear
Shell "C:\Windows\Explorer.exe " & FoldPath, vbNormalFocus
End Sub
今回のコードは以前にやった「Product内のCATPartをIGESファイルで出力」とほとんど同じなので、コードの詳細はそちらを参照下さい。以下ではリンク先ページのコードから変更した部分のみの解説をしていきます。
コード解説
本マクロのコードを上から順に部分ごとにわけて解説していきます。
STEP出力
Dim i As Integer
Dim SELPart As Part
Dim SELDOC As Document
For i = 1 To SEL.Count
Set SELPart = SEL.Item(i).Value
Set SELDOC = SELPart.Parent
SELDOC.ExportData FoldPath & "\" & SELPart.Name, "stp" '.stpで出力"
Next i
SEL.Clear
任意のドキュメントを別ファイルとして書き出すには
「Documentオブジェクト」の「ExportDataメソッド」を使います。
Documentオブジェクト.ExportData パス,“拡張子“
この構文によりDocumentオブジェクトを指定した拡張子で書き出すことができます。
パスには出力先のパス(ファイル名も含む)を入力、
拡張子には出力するファイルの拡張子を入力します。
「Product内のCATPartをIGESファイルで出力」の場合は拡張子の部分が「igs」でしたが、今回はSTEPファイルとして書き出すので拡張子の部分を「stp」に変更するだけです。(実際はフォルダ名も「IGES書き出し」から「STEP書き出し」に変更していますが)
まとめ
今回は任意のCATPartをSTEPファイルとして出力するマクロについての内容でした。
ほとんどIGESファイル出力と同じ方法なので、内容が同じになってしまっています。
ここではコードの解説などもかなり端折っているため、
「Product内のCATPartをIGESファイルで出力」ページも併せて読むことをお勧めします。









