CATDrawingをDXF/PDFファイルで出力|CATIAマクロの作成方法
今回の記事は「お問い合わせ」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
件名: 図面変換
メッセージ本文:
Drawingをdxfとpdfに出力していますが、枚数が多いのでマクロを使って簡単にできないでしょうか?
本サイトではCATProduct内のCATPartを別ファイルとして出力する「IGESファイルで出力」「STEPファイルで出力」「STLファイルで出力」のマクロの紹介をしています。これらのマクロでは共通して「ExportDataメソッド」を使って別ファイルとして出力しています。
CATDrawingの場合もこれらのマクロと同じで 「ExportDataメソッド」を使うことで「dxf」「pdf」のような別ファイルとして出力することができます。(手動でいう[名前を付けて保存]で拡張子を変更しているイメージ)
マクロの機能
今回作成したマクロはCATDrawngをDXFファイル(拡張子.dxf)/PDFファイル(拡張子.pdf)として出力するマクロです。アクティブなCATDrawing内にあるシートがすべて各ファイルで出力されます。
具体的な機能は以下のとおりです。
・ファイル名は「ドキュメント名_シート名(.dfx/.pdf)」
・マクロ実行後にデスクトップに新規作成される「DXF/PDF 日時」フォルダに出力
・出力後はフォルダを開く
※注意点
・「DXF/PDF 日時」と同名のフォルダがデスクトップにある場合はマクロ中断
(日時には現在の「年/月/日/時/分/秒」が入力されるため、同名フォルダは存在しないはず )
サンプルコード
マクロのコードは以下のとおりです。マクロ実行後にアクティブドキュメント(CATDrawing)内のシートをすべてDXF/PDFファイルとして出力します。
※コピペで実行可能ですが、保存場所のパスだけは自身の環境に合わせて書き直す必要ありです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
Option Explicit Sub CATMain() 'アクティブドキュメント確認 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If 'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument '出力先フォルダを作成 Dim FileSys 'As FileSystem Set FileSys = CATIA.FileSystem Dim SavePath As String SavePath = "C:\Users\ユーザー名\Desktop" '保存場所のパスを入力 ※必ず自分の環境のものに書き換えて下さい Dim FoldName As String FoldName = "DXF&PDF " & Year(Date) & Month(Date) & Day(Date) & _ Hour(Time) & Minute(Time) & Second(Time) '作成するフォルダ名を指定 Dim FoldPath As String FoldPath = SavePath & "\" & FoldName '"'新規フォルダのパス 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) 'ファイル名(パス)作成 Dim FileName As String FileName = FoldPath & "\" & Replace(doc.Name, ".CATDrawing", "") '"' '図面出力 Call doc.ExportData(FileName, "dxf") 'dxfで出力 Call doc.ExportData(FileName, "pdf") 'pdfで出力 '出力先フォルダを開く Shell "C:\Windows\Explorer.exe " & FoldPath, vbNormalFocus End Sub |
コード解説
アクティブドキュメントの定義
1 2 3 4 5 6 7 8 9 10 |
'アクティブドキュメント確認 If TypeName(CATIA.ActiveDocument) <> "DrawingDocument" Then MsgBox "CATDrawingのみ対応のマクロです。" Exit Sub End If 'アクティブドキュメント定義 Dim doc As DrawingDocument Set doc = CATIA.ActiveDocument |
まずはじめにアクティブドキュメントの定義をします。
今回のマクロはCATDrawingでのみ有効なものなので、アクティブドキュメントがCATDrawing以外の場合はTypeName関数を使った条件分岐でマクロを終了するようにしています。
条件分岐の先、つまりはアクティブドキュメントがCATDrawingの場合は変数「doc」にアクティブドキュメントを代入します。
出力先フォルダを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
'出力先フォルダを作成 Dim FileSys 'As FileSystem Set FileSys = CATIA.FileSystem Dim SavePath As String SavePath = "C:\Users\ユーザー名\Desktop" '保存場所のパスを入力 ※必ず自分の環境のものに書き換えて下さい Dim FoldName As String FoldName = "DXF&PDF " & Year(Date) & Month(Date) & Day(Date) & _ Hour(Time) & Minute(Time) & Second(Time) '作成するフォルダ名を指定 Dim FoldPath As String FoldPath = SavePath & "\" & FoldName '"'新規フォルダのパス 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) |
DXF/PDFファイルを出力するためのフォルダを作成します。
まずは保存場所のパスを取得します。
上記のコードでは保存場所を「SavePath = “C:\Users\ユーザー名\Desktop”」
つまりはデスクトップとしています。
※このとき、このパスはご自身のPCのパスに書き換えて下さい。
多くの場合、「ユーザー名」の部分を自分のものにすれば問題ないと思います。
次に、作成するフォルダの名称を指定します。
上記コードでは「DXF&PDF 日時」というフォルダ名で作成しています。
(日時には現状の日時の年から秒までを取得し、その数字の羅列を入力しています。
たとえば2020年1月2日3時4分56秒の場合、「20200102030456」と入力されます。)
このようにフォルダ名を時間によって変更させることで
デスクトップ上に同じフォルダが存在しないようにしています。
ただ必ずしも存在しないとは言えないので
万が一同じフォルダが存在した場合にはマクロを終了するようにしています。
フォルダの存在を確認するには「FileSystemオブジェクト」の「FolderExistsメソッド」を使います。
最後に、これまでに決めた「保存場所」と「フォルダ名」を組み合わせてフォルダを新規作成します。
フォルダの作成は「FileSystemオブジェクト」の「CreateFolderメソッド」を使って行います。
「FolderExistsメソッド」「CreateFolderメソッド」の使い方は下記ページを参照ください。
DXF/PDFファイル出力
1 2 3 4 5 6 7 8 |
'ファイル名(パス)作成 Dim FileName As String FileName = FoldPath & "\" & Replace(doc.Name, ".CATDrawing", "") '"' '図面出力 Call doc.ExportData(FileName, "dxf") 'dxfで出力 Call doc.ExportData(FileName, "pdf") 'pdfで出力 |
今回のマクロのメインの部分の処理「DXF/PDFファイル出力」をしていきます。
任意のドキュメントを別ファイルとして書き出すには
「Documentオブジェクト」の「ExportDataメソッド」を使います。
Documentオブジェクト.ExportData パス,“拡張子“
この構文によりDocumentオブジェクトを指定した拡張子で書き出すことができます。
パスには出力先のパス(ファイル名も含む)を入力、
拡張子には出力するファイルの拡張子を入力します。
CATDrawingに対してExportDataメソッドを使うと、そのドキュメント内のシートがすべて自動で出力されます。(このときファイル名はシート名を取得し自動で付けられます)
今回のコードではDXFもPDFも同じフォルダに、まとめて書き出しています。
別ファイルとして出力する方法は理解できたと思うので、この部分は任意で書き換えて下さい。
出力先フォルダを開く
1 2 |
'出力先フォルダを開く Shell "C:\Windows\Explorer.exe " & FoldPath, vbNormalFocus |
最後にデスクトップに作成したフォルダを「Shell関数」を使って開きます。
Shell関数についてはExcelマクロでもよく使われ、多くの解説ページがあるためここでは割愛します。
まとめ
今回はCATDrawingをDXFとPDFファイルとして出力するマクロについての内容でした。
イメージとしては冒頭でもいったとおり[名前を付けて保存]で拡張子を変更している操作をVBAで行っているだけです。ただVBAで行うと数十、数百枚のシートも一括でDXF/PDFファイルとして出力することができます。
このようにExportDataメソッドはCATPartだけでなくCATDraawingにも有効なので、ぜひいろいろ実験して他にも使い道を探してみて下さい。