C#ATIA

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

表題欄の細々した項目をパラメータで変更する3

こちらの続きです。
表題欄の細々した項目をパラメータで変更する2 - C#ATIA

表題欄用のパラメータが必要なのですが、DrawのパラメータってPartと違って
コピペ出来ないのですね。知りませんでした。

こんな感じのものを作りたいんですよ。
f:id:kandennti:20210727085608p:plain

毎回作るのは面倒な為、マクロで作っちゃいます。

'vba
Option Explicit

'作成用のパラメーター名
Private Const ALLKEYS = "date,custamer,partname,partnumber,drawnumber,material"

Sub CATMain()

    'ドキュメントのチェック をしたかったらKCL使ってね
'    If Not CanExecute("DrawingDocument") Then Exit Sub
    
    'ドキュメント
    Dim dDoc As DrawingDocument
    Set dDoc = CATIA.ActiveDocument

    'キーワード
    Dim keys As Variant
    keys = Split(ALLKEYS, ",")

    'パラメータ
    Dim prms As Parameters
    Set prms = dDoc.Parameters.RootParameterSet.AllParameters
    
    'パラメータ作成-値は空
    Dim i As Long
    Dim prm As Parameter
    For i = 0 To UBound(keys)
        If Not isExists(prms, keys(i)) Then
            Set prm = prms.CreateString(CStr(keys(i)), "")
            prm.Rename CStr(keys(i))
        End If
    Next
    
End Sub

'パラメータの有無
Private Function isExists( _
    ByVal prms As Parameters, _
    ByVal name As String) _
    As Boolean

    isExists = True

    Dim prm As Parameter
    
    On Error Resume Next
        Set prm = prms.Item(name)
    On Error GoTo 0

    If prm Is Nothing Then
        isExists = False
    End If

End Function

定数 "ALLKEYS” の中の名前のパラメータを作っています。
今後、追加も削除もここ一行の修正で良いので楽です。
・・・これをsplitして配列作る方法は、海外の何処かで見かけて
感心しました。pythonじゃこんな事しないけど、VBAエディタの
貧弱さから考えると、この方法が一番楽な気がしてます。

パラメータを作成した直後にリネームしているのですが、
素のままだと、表示上は ”date” でも内部的に "drawing.date" に
なってしまい都合悪かったので。(設定の影響かも知れません)