C#ATIA

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

ショートカットキーにマクロを登録する

こちらのコメントで御質問頂いただきました。

最初の質問の方です。式では該当する機能があるものかどうか、不明です。
マクロであれば形状セット数の取得は簡単に出来ます。

'vba パラメータに形状セット数を表示する

Sub CATMain()
    '本来ならドキュメントの型をチェックすべきです。
    'Part以外がアクティブな場合エラーになります。
    
    Dim doc As PartDocument
    Set doc = CATIA.ActiveDocument
    
    Dim pt As Part
    Set pt = doc.Part
    
    Dim prms As Parameters
    Set prms = pt.Parameters
    
    'パラメータ取得
    Dim prm As IntParam
    Set prm = GetPrm(prms, "形状セット数")

    '形状セット数
    Dim hBdyCount As Long
    hBdyCount = GetHBodyCount(doc)
    
    'パラメータ値に反映
    prm.Value = hBdyCount
End Sub

Private Function GetHBodyCount( _
    ByVal doc As Document) As Long
    
    Dim sel As selection
    Set sel = doc.selection
    
    CATIA.HSOSynchronized = False
    
    sel.Clear
    sel.Search "CATPrtSearch.OpenBodyFeature,all"
    GetHBodyCount = sel.Count2
    sel.Clear
    
    CATIA.HSOSynchronized = True
End Function

Private Function GetPrm( _
    ByVal prms As Parameters, _
    ByVal name As String) As IntParam
    
    If IsExistPrm(prms, name) Then
        Set GetPrm = prms.Item(name)
    Else
        Set GetPrm = InitParm(prms, name)
    End If
End Function

Private Function IsExistPrm( _
    ByVal prms As Parameters, _
    ByVal name As String) As Boolean
    
    Dim intPrm As IntParam
    
    On Error Resume Next
        Set intPrm = prms.Item(name)
    On Error GoTo 0

    IsExistPrm = IIf(intPrm Is Nothing, False, True)
End Function

Private Function InitParm( _
    ByVal prms As Parameters, _
    ByVal name As String) As IntParam

    Set InitParm = prms.CreateInteger("", 0)
    InitParm.Rename name
End Function

紛らわしい為、パラメータ名は "形状セット数" としました。
Partファイルでのみですが、実行すれば取得できます。
f:id:kandennti:20190130141205p:plain

ここで困難なのは "リアルタイムで" の部分です。
プログラム的に考えれば、変化が起きたタイミングの検知し
このマクロを実行すれば良いのですが、通常であれば
イベント処理が真っ先に思いつきます。 
が、生憎CATIAのマクロでは、そのようなイベント処理を
行うことは出来ないだろうと思います。

おぼろげな記憶なのですが、やはり "リアルタイムで" を実行する
代案として「unofficial catia user forum」にここなさんが記載していた
イデアをご紹介します。

作業中に頻繁に使用するショートカットキーがあるでしょうか?
仮にこれが「Treeの表示/非表示」だとします。(僕は偶にです・・・)
デフォルトであれば F3キーとなっています。
このF3キーを押した際、「Treeの表示/非表示」とマクロの実行を
一度で行えるようにする と言うアイデアです。

すんなり出来ない、ショートカットキーのカスタマイズについては
こちらのサイトに詳しく記載されています。
〇CATIAの小技
登録できないアクセサレーターを登録する方法 | CATIAの小技

1)重複したシュートカットキーの登録が出来ない為、一度F3キーを
フリーにします。
f:id:kandennti:20190130141234p:plain
日本語環境の場合ですが、「Treeの表示/非表示」は「仕様」と言う
コマンド名です。(知らなかった・・・)
アクセレータに「F3」が記載されていますので、これを空欄にします。


2)「CATIAの小技」さんの手法でツールバーを作成します。


3)「CATIAの小技」さんの手法でツールバーにマクロをD&Dします。
 念のため、ツールバーに登録する前は、アクセレータはグレーアウトして
 設定できません。
f:id:kandennti:20190130141256p:plain
 登録するとアクセレータでの設定が可能となりますので、「F3」と
 記入すればOKです。
f:id:kandennti:20190130141309p:plain


4)これでF3キーでマクロは実行するようになりますが、元の
 「Treeの表示/非表示」が出来なくなってしまいます。その為
 最初のマクロを少し修正します。

'vba パラメータに形状セット数を表示する

Sub CATMain()
    '本来ならドキュメントの型をチェックすべきです。
    'Part以外がアクティブな場合エラーになります。
    
    '仕様コマンド
    CATIA.StartCommand "仕様"
    
    Dim doc As PartDocument
    Set doc = CATIA.ActiveDocument

    '以下は同じです    
・
・
・

このようにすることで、Treeの表示/非表示」とマクロの実行を
一度で行えるようなります。
・・・ちっともリアルタイムには、ならないのですが。