ちょっと業務上欲しくなったので、CATPartファイルをIgesに変換する為の
マクロを作成しました。" マクロにする必要ある? " と思った方、正解です。
単に変換するだけであれば、必要性を感じないのですが、オプションの
こちらの部分を変更しソリッドとサーフェスで二回変換してます。
オプションを表示させる際、CATIA起動後の一回目は少し間が空くんですよね。
二回目以降はストレス無く表示されるのですが。
又、変換処理時間が結構かかる場合もあるので、バッチモードを利用し
オペレーションを奪われないようにしました。
'vba sample_ExpIges_Surf_Solid_ver0.0.1 using-'ver0.0.10' 'アクティブなPartファイルをIges(Surface/Solid)でエクスポート Option Explicit Sub CATMain() 'ドキュメントのチェック If Not KCL.CanExecute("PartDocument") Then Exit Sub 'ドキュメント取得/チェック Dim PDoc As PartDocument: Set PDoc = CATIA.ActiveDocument If PDoc.Saved = False Then If MsgBox("変更されています。上書き保存し作業を続けますか?", vbYesNo) = vbNo Then Exit Sub PDoc.Save End If 'アクティブパス Dim FullPath As String: FullPath = PDoc.FullName If FullPath = vbNullString Then MsgBox "新規ファイルです。一度保存を行ってから再実行してください!" Exit Sub End If Dim Path As Variant: Path = KCL.SplitPathName(FullPath) 'エクスポート用パス Dim SurfPath As String SurfPath = KCL.GetNewName(Path(0) & "\" & Path(1) & "_Surface.igs") Dim SolidPath As String SolidPath = KCL.GetNewName(Path(0) & "\" & Path(1) & "_Solid.igs") 'Iges設定取得 0-Surface 1-Solid Dim IgsMSBO As Long IgsMSBO = CATIA.SettingControllers.Item("CATIdeIgesSettingCtrl").ExportMSBO 'catiaの実行ファイルパス取得 Dim CatPath As String CatPath = CATIA.SystemService.Environ("CATDLLPath") '環境ファイルパス取得 Dim EnvironmentPath As Variant EnvironmentPath = KCL.SplitPathName(CATIA.SystemService.Environ("CATEnvName")) '確認 Dim Msg As String Msg = "[ " & Path(1) & " ]をIges(サーフェス/ソリッド)に変換します。" & vbNewLine & _ "宜しいですか?" If MsgBox(Msg, vbYesNo) = vbNo Then Exit Sub 'バッチ用マクロファイル作成 Dim MacroPath As String MacroPath = KCL.GetNewName(Path(0) & "\" & Path(1) & ".catvbs") Call KCL.WriteFile(MacroPath, CreateCatvbsSource(FullPath, SurfPath, SolidPath, MacroPath, IgsMSBO)) 'バッチモード起動 Call ExecuteButchMode(CatPath & "\CNEXT.exe", EnvironmentPath(0), EnvironmentPath(1), MacroPath) MsgBox "変換処理を始めました!" End Sub 'バッチモード起動 Private Sub ExecuteButchMode( _ ByVal CatExePath As String, _ ByVal EnvDirPath As String, _ ByVal EnvPath As String, _ ByVal MacroPath As String) Dim Cmd As String Cmd = CatExePath & " -direnv " & EnvDirPath & _ " -env " & EnvPath & " -batch -macro " & _ Chr(34) & MacroPath & Chr(34) Call CreateObject("Wscript.Shell").Exec(Cmd) End Sub 'CatVbsソース Private Function CreateCatvbsSource( _ ByVal ReadPath As String, _ ByVal SurfPath As String, _ ByVal SolidPath As String, _ ByVal MacroPath As String, _ ByVal MSBO As Long) As String Dim ArySurf As Variant: ArySurf = KCL.SplitPathName(SurfPath) Dim ArySolid As Variant: ArySolid = KCL.SplitPathName(SolidPath) Dim Msg As String Msg = "[" & ArySurf(0) & "] に" & _ "[" & ArySurf(1) & "." & ArySurf(2) & "] と" & _ "[" & ArySolid(1) & "." & ArySolid(2) & "] を作成しました" CreateCatvbsSource = _ "Sub CATMain()" & vbNewLine & _ " FullPath = " & Chr(34) & ReadPath & Chr(34) & vbNewLine & _ " SurfPath = " & Chr(34) & SurfPath & Chr(34) & vbNewLine & _ " SolidPath = " & Chr(34) & SolidPath & Chr(34) & vbNewLine & _ " IgsMSBO = " & CStr(MSBO) & vbNewLine & _ " Call ExpIges(FullPath, SurfPath, SolidPath, IgsMSBO)" & vbNewLine & _ " Call CATIA.Quit" & vbNewLine & _ " Set Fso = CreateObject(" & Chr(34) & "Scripting.FileSystemObject" & Chr(34) & ")" & vbNewLine & _ " Call Fso.DeleteFile(" & Chr(34) & MacroPath & Chr(34) & ", True)" & vbNewLine & _ " Msgbox " & Chr(34) & Msg & Chr(34) & vbNewLine & _ "End Sub" & vbNewLine & _ "Private Sub ExpIges(ByVal ReadPath, ByVal SurfPath, ByVal SolidPath, ByVal MSBO)" & vbNewLine & _ " Set PDoc = CATIA.Documents.Open(CStr(ReadPath))" & vbNewLine & _ " Set IgsSetAtt = CATIA.SettingControllers.Item(" & Chr(34) & "CATIdeIgesSettingCtrl" & Chr(34) & ")" & vbNewLine & _ " IgsSetAtt.ExportMSBO = 0" & vbNewLine & _ " Call PDoc.ExportData(SurfPath, " & Chr(34) & "igs" & Chr(34) & ")" & vbNewLine & _ " IgsSetAtt.ExportMSBO = 1" & vbNewLine & _ " Call PDoc.ExportData(SolidPath, " & Chr(34) & "igs" & Chr(34) & ")" & vbNewLine & _ " IgsSetAtt.ExportMSBO = MSBO" & vbNewLine & _ "End Sub" End Function
・バッチモードのCATIAを起動し、アクティブなCATPartをそちらでも開く為
保存しておく必要が有ります。
(マクロ実行中に確認・上書き保存は可能です)
・処理後は、アクティブなCATPartファイルと同一フォルダ内に
[アクティブなCATPartファイル] + [_Surface.igs]
[アクティブなCATPartファイル] + [_Solid.igs]
の二つのファイルが出来上がります。
・変換後のファイル名が重複するものになる場合は、
ファイル名の最後に [_(数字)] が付いたファイルとなります。
(上書きしません)
・一時的にcatvbsファイルが作成されますが、処理後は削除します。
・バッチモード起動を利用している為、小さなファイルは逆に遅いです・・・。
GUI起動の場合、CATIAは二個までの制限(同一リリースの場合)があると
思うのですが、バッチモード起動の場合はメモリの許す限り起動出来そうな
雰囲気があります。二つ起動した方が早いかも。
又、こちらの記載もバッチモード起動で解決出来るかな?
DrawをPDFでエクスポート (未解決) - C#ATIA