こちらのコメントで御質問頂いただきました。
最初の質問の方です。式では該当する機能があるものかどうか、不明です。
マクロであれば形状セット数の取得は簡単に出来ます。
Sub CATMain()
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ファイルでのみですが、実行すれば取得できます。
ここで困難なのは "リアルタイムで" の部分です。
プログラム的に考えれば、変化が起きたタイミングの検知し
このマクロを実行すれば良いのですが、通常であれば
イベント処理が真っ先に思いつきます。
が、生憎CATIAのマクロでは、そのようなイベント処理を
行うことは出来ないだろうと思います。
おぼろげな記憶なのですが、やはり "リアルタイムで" を実行する
代案として「unofficial catia user forum」にここなさんが記載していた
アイデアをご紹介します。
作業中に頻繁に使用するショートカットキーがあるでしょうか?
仮にこれが「Treeの表示/非表示」だとします。(僕は偶にです・・・)
デフォルトであれば F3キーとなっています。
このF3キーを押した際、「Treeの表示/非表示」とマクロの実行を
一度で行えるようにする と言うアイデアです。
すんなり出来ない、ショートカットキーのカスタマイズについては
こちらのサイトに詳しく記載されています。
〇CATIAの小技
登録できないアクセサレーターを登録する方法 | CATIAの小技
1)重複したシュートカットキーの登録が出来ない為、一度F3キーを
フリーにします。
日本語環境の場合ですが、「Treeの表示/非表示」は「仕様」と言う
コマンド名です。(知らなかった・・・)
アクセレータに「F3」が記載されていますので、これを空欄にします。
2)「CATIAの小技」さんの手法でツールバーを作成します。
3)「CATIAの小技」さんの手法でツールバーにマクロをD&Dします。
念のため、ツールバーに登録する前は、アクセレータはグレーアウトして
設定できません。
登録するとアクセレータでの設定が可能となりますので、「F3」と
記入すればOKです。
4)これでF3キーでマクロは実行するようになりますが、元の
「Treeの表示/非表示」が出来なくなってしまいます。その為
最初のマクロを少し修正します。
Sub CATMain()
CATIA.StartCommand "仕様"
Dim doc As PartDocument
Set doc = CATIA.ActiveDocument
・
・
・
このようにすることで、Treeの表示/非表示」とマクロの実行を
一度で行えるようなります。
・・・ちっともリアルタイムには、ならないのですが。