以前、こちらのブログを見て "こんな事できるんだ" と思いました。
How to Create a Parametric Set inside a Geometrical Set - VB Scripting for CATIA V5
そのままコピペでは動かなかったのと、不要な部分を
コメント化しました。
'vba Sub CATMain() Set oDoc = CATIA.ActiveDocument Set oPart = oDoc.Part Set oParams = oPart.Parameters Dim HB As HybridBodies Set HB = oPart.HybridBodies Dim HB1 As HybridBody Set HB1 = HB.Add() Set oRootParams = oParams.RootParameterSet 'Set oMainBody = oPart.MainBody '←ここ直した Call oParams.CreateSetOfParameters(HB1) '←ここ直した oPart.Update End Sub
確かに出来ます。 これが出来るのであれば
形状セット内の "パラメータ.2" の中にパラメータを作成したくなります。
Length型のパラメータを作成するコードを追加します。
'vba Sub CATMain() ・・・ Call oParams.CreateSetOfParameters(HB1) '←ここ直した Dim length1 As Length '←ここ追加 Set length1 = oParams.CreateDimension("", "LENGTH", 100#) '←ここ追加 oPart.Update End Sub
実行するとこんな感じです。
あれ? あぁ確かに "パラメータ.2" を指定していないから当然かぁ。
"パラメータ.2" を調べてみると "ParameterSet型" です。
Parentプロパティが "パラメータ.2" の入っている "形状セット.1" なので
そちらを調べてみると
"ParameterSet型"のものが見つからないんです。
他にも調べたのですが、Length型のパラメータが出来上がった "パラメータ" は
見つかるのですが、 "パラメータ.2" が、見つからないんです。
直接 "パラメータ.2" 内に作成できないのであれば、コピペで出来ないかな?
と思い、こんな風にしてみました。
'vba Sub CATMain() ・・・ Set length1 = oParams.CreateDimension("", "LENGTH", 100#) '←ここ追加 'ここから Dim Sel As Selection: Set Sel = oDoc.Selection With Sel .Clear .Add length1 .Copy .Clear .Add HB1 .Paste End With 'ここまでさらに追加 oPart.Update End Sub
実行してみると
確かに "パラメータ.2" を指定していないからそうなるよなぁ。
じゃ "パラメータ.2" を名前で検索してコピペすれば良いと思い
こんな感じにしました。
'vba Sub CATMain() ・・・ Set length1 = oParams.CreateDimension("", "LENGTH", 100#) '←ここ追加 'ここから Dim Sel As Selection: Set Sel = oDoc.Selection With Sel .Clear .Add length1 .Copy .Clear .Search "Name='パラメータ.2',all" '←ここ変更 .Paste End With 'ここまでさらに追加 oPart.Update End Sub
そうすると、やっと望んでいる形になりました。
いや、でも "パラメータ.2" の名前になるとは限らない。
それじゃ、タイプで検索しHitした最後の要素を取得しようと
思い、変更しました。
'vba Sub CATMain() ・・・ Set length1 = oParams.CreateDimension("", "LENGTH", 100#) '←ここ追加 'ここから Dim Sel As Selection: Set Sel = oDoc.Selection With Sel .Clear .Add length1 .Copy .Clear .Search "CATKnowledgeSearch.AdvisorParameterSet,all" '←さらに変更 Dim ParSet As ParameterSet '←さらに変更 Set ParSet = .Item(.Count2).Value '←さらに変更 .Clear '←さらに変更 .Add ParSet '←さらに変更 .Paste End With 'ここまでさらに追加 oPart.Update End Sub
もう既にコードがグチャグチャですが、結果はこちら
名前の依存は無くなり、少し使い道が出来ました。
・・・のですが、出来上がった "長さ.2" のパラメータを取得する
方法が良くわからないんです。
パラメータとして最後に追加された要素なのだから、これで行けるかな?
と思ったのですが
'vba ・・・ oPart.Update Dim Leng As Length '←さらにさらに追加 Set Leng = oParams.Item(oParams.Count) '←さらにさらに追加 End Sub
これはダメなんです。 パラメータの最後の方は、パーツ番号等プロパティで
使用されるものが予約されている感じなんです。
"パラメータ.2" と同様に、タイプで検索しHitした最後の要素を取得しよう
と思ったのですが、タイプがわからないんです。
oParams.Itemをループし、最後にHitしたLength型が該当するのだろうと
思うのですが、面倒過ぎです。
CreateSetOfParameters関数は、マクロ実行後手動で作業する為の
ものなのだろうか・・・。
追記です。
トイレに行ったらこれで取得できる事を思い出しました。
'vba Sub CATMain() Set oDoc = CATIA.ActiveDocument Set oPart = oDoc.Part Set oParams = oPart.Parameters Dim HB As HybridBodies Set HB = oPart.HybridBodies Dim HB1 As HybridBody Set HB1 = HB.Add() Call oParams.CreateSetOfParameters(HB1) Dim length1 As Length Set length1 = oParams.CreateDimension("", "LENGTH", 100#) Dim Sel As Selection: Set Sel = oDoc.Selection Dim Leng As Length With Sel .Clear .Add length1 .Copy .Clear .Search "CATKnowledgeSearch.AdvisorParameterSet,all" Dim ParSet As ParameterSet Set ParSet = .Item(.Count2).Value .Clear .Add ParSet .Paste 'よく考えたらコピペ後は選択状態なので、これで取得可能でした。 Set Leng = .Item(1).Value .Clear End With oPart.Update End Sub