内容的にはこちらの続きです。
バッチモードでCATScriptを実行する - C#ATIA
前回はバッチモード起動の際のパラメータがよく分らず、ショートカットから
拾い出しましたが、マクロから環境設定パスを取得できないか
試してみました。
念の為、環境設定とは
「Environment Editer XXXX」(環境エディタ)で起動した際に表示されるものです。
僕の場合、複数リリースをインストールしているので、重複しないようCATUserSettingPathと
丸が丸に表示されないので、CATWidthMMOfScreen,CATHeightMMOfScreenぐらいしか
変更していないのですが。(LUMライセンスの方は、もう一個設定が必要なはずです)
先日紹介した "CATIA Wiki" に詳しく記載されていると思います。(多分)
Environment – CATIA-Wiki
以前、こちらで
お手軽に言語判定を行いたい - C#ATIA
「起動されているCATIAのCatSettingsファイルが、何処にあるのか
判断する方法がわかりません」 と書きましたが、
先程の "CATIA Wiki" にもサンプルが記載されておりこんな感じで
取得できることもわかりました。
'vba MsgBox CATIA.SystemService.Environ("CATUserSettingPath")
ここからが本題です。
前回のバッチファイルの "CAT" "DIRENV" "ENV" の3つに該当するパスやファイル名
を取得します。
- 環境設定パスを取得したいCATIA V5を起動します。
(要は普段起動しているCATIAを起動します)
ファイル名は何でも良いのですが、一応 "GetEnvironmentPath.vbs" として
おきます。
Language = "VBSCRIPT" '************************* Const ScriptName = "GetEnvironmentPath" 'ver0.01 'CATIA V5 環境指定バッチモード起動に必要なパスを取得します 'http://kantoku.hatenablog.com/entry/2016/04/08/185540 '************************* '********* Call CatMain wscript.Quit 0 '********* Sub CatMain() '環境パスを取得するCATIAの取得 Dim Cat 'As Application Set Cat = GetCatia If Cat Is Nothing Then Exit Sub 'catiaの実行ファイルパス取得 Dim CatPath ' As String CatPath = Cat.SystemService.Environ("CATDLLPath") '環境ファイルパス取得 Dim EnvironmentPath ' As Variant EnvironmentPath = SplitPathName(Cat.SystemService.Environ("CATEnvName")) '出力文字 Dim ExpTxt ' As String ExpTxt = "Set CAT=" + Chr(34) + CatPath + "\CNEXT.exe" + Chr(34) + vbNewLine + _ "Set DIRENV=" + Chr(34) + EnvironmentPath(0) + Chr(34) + vbNewLine + _ "Set ENV=" + Chr(34) + EnvironmentPath(1) + Chr(34) 'このスプリクトパス取得 Dim ScriptPath 'As String ScriptPath = CreateObject("Scripting.FileSystemObject").GetFolder(".") '保存 Dim ExpName 'As String ExpName = "Cat-Dll_Env-Path.txt" Dim ExpPath 'As String ExpPath = ScriptPath + "\" + ExpName If IsExists(ExpPath) Then Dim Msg 'As String Msg = "「" + ExpName + "」が存在します。上書きしますか?(いいえ-キャンセル)" If MsgBox(Msg, vbYesNo, ScriptName) = vbNo Then Exit Sub End If Call WriteFile(ExpPath, ExpTxt) '終了 MsgBox ExpPath + vbNewLine + "を作成しました", vbOKOnly, ScriptName End Sub '起動中のcatiaの取得 Private Function GetCatia() 'As Application On Error Resume Next Set GetCatia = GetObject(, "CATIA.Application") If GetCatia Is Nothing Then MsgBox "CATIA V5 を起動してください", vbOKOnly, ScriptName Err.Clear wscript.Quit 0 End If On Error GoTo 0 End Function 'パスとファイル名分割 'Return: 0-Path 1-BaseName Private Function SplitPathName(ByVal FullPath) 'As Variant Dim Path(1) 'As String With CreateObject("Scripting.FileSystemObject") Path(0) = .GetParentFolderName(FullPath) Path(1) = .GetBaseName(FullPath) End With SplitPathName = Path End Function 'ファイルの有無 Private Function IsExists(ByVal Path) 'As Boolean IsExists = CreateObject("Scripting.FileSystemObject").FileExists(Path) End Function 'ファイルの書き込み Private Sub WriteFile(ByVal Path, ByVal Txt) Call CreateObject("Scripting.FileSystemObject") _ .OpenTextFile(Path, 2, True).Write(Txt) End Sub
CATVBAやCATScriptではNGのはずです。
- "GetEnvironmentPath.vbs" をダブルクリックで起動します。
- メッセージが出て終了です。
"GetEnvironmentPath.vbs" と同一フォルダ内に "Cat-Dll_Env-Path.txt"
と言うファイルが出来上がります。 中はこんな感じです。
Set CAT="C:\Program Files\Dassault Systemes\B22\win_b64\code\bin\CNEXT.exe" Set DIRENV="C:\Users\XXXXXX\AppData\Roaming\DassaultSystemes\CATEnv" Set ENV="CATIA.V5-6R2012SP4"
- これを前回のバッチファイルに書き換えれば、環境設定されたバッチモードで起動
できるようになります。
"CAT" の取得は環境変数で直ぐに取得方法がわかったのですが、
"DIRENV" "ENV" の2つについてはどうすれば良いのか全くわからず
殆ど諦めかけていました。 この部分です。
Cat.SystemService.Environ("CATEnvName")
"CATEnvFullPath" とか "CATEnvPath" とか色々試しているうちに
"CATEnvName" が見つかりました。 ちょっと感動。