C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

起動中のCATIAから環境設定パスを取得

内容的にはこちらの続きです。
バッチモードでCATScriptを実行する - C#ATIA


前回はバッチモード起動の際のパラメータがよく分らず、ショートカットから
拾い出しましたが、マクロから環境設定パスを取得できないか
試してみました。

念の為、環境設定とは
「Environment Editer XXXX」(環境エディタ)で起動した際に表示されるものです。
f:id:kandennti:20160413121753p:plain
僕の場合、複数リリースをインストールしているので、重複しないよう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" が見つかりました。 ちょっと感動。