少し前に作成したこちらのマクロ、使いにくくてしょうがない。
クリックしたスケッチ点にHVの拘束を付ける - C#ATIA
何処かに、拘束が重複しないように整えてくれるマクロ、落ちてないでしょうか?
(標準な機能では無いですよね?)
非常に下らないのですが、スケッチの拘束の参照のON OFFを切り替える
マクロを作ってみました。
最近、この操作を頻繁に行って疲れてきたので。
(そもそもそんな拘束を作りたくないのですが、ルール上仕方なく・・・)
こんなコードです。
'vba スケッチ オフセット拘束 モード切り替えテスト Sub CATMain() 'ワークベンチチェック If Not CATIA.GetWorkbenchId = "CS0WKS" Then MsgBox "スケッチ作業中のみ使用できます" Exit Sub End If '選択準備 Dim sel As Variant ' Selection Set sel = CATIA.ActiveDocument.Selection Dim filter As Variant filter = Array("Constraint") Dim msg As String msg = "拘束を選択 / ESC=キャンセル" '選択 Do sel.Clear Select Case sel.SelectElement2(filter, msg, False) Case "Cancel", "Undo", "Redo" Exit Sub End Select Call ChangeMode(sel.Item(1).value) Loop End Sub '拘束モード切り替え Private Sub ChangeMode(ByVal con As Constraint) con.Mode = IIf(con.Mode = catCstModeDrivenDimension, _ catCstModeDrivingDimension, _ catCstModeDrivenDimension) End Sub
通常の場合であれば、これだけで十分機能するのですが、
問題は通常じゃない時です。
例えば、こんな状態です。(普段は拘束名は表示しないのです。邪魔なので。)
過剰拘束の状態なのですが、オフセット7,8,12の何れかを参照にすれば
解消されますよね。
上記のマクロでオフセット7を選択すると
消えたのではなく、黒くなって見えにくくなっちゃいます。
一度スケッチャーから抜け、再度入ると正しく表示してくれます。
スケッチ解析を見てみると
クリックしたオフセット7が "不明" なのは理解できますが、
過剰拘束が解消したオフセット8,12は問題無いのですが、黒いんです。
そもそも黒い拘束は何を意味しているのでしょうか??
Helpのスケッチャーの "色の使用" を見ても黒色の説明が無さそう・・・。
(そもそも黒なのか?)
何となくUpdate待ちのような気がしたので、Updateさせることに
しました。
'拘束モード切り替え Private Sub ChangeMode(ByVal con As Constraint) con.Mode = IIf(con.Mode = catCstModeDrivenDimension, _ catCstModeDrivingDimension, _ catCstModeDrivenDimension) Dim pt As Part Set pt = KCL.GetParent_Of_T(con, "Part") Call pt.UpdateObject(con) End Sub
結論から書くと、これでは問題の解消にはなりませんでした。
'Call pt.UpdateObject(con) Call pt.Update
こうすると上手く出来るのですが(何故か最初は失敗する事が多い)、
作業しているスケッチより、PartのTreeの上部でエラーが出ている場合、
上手く行かないような気がするので、単純なUpdateはしたくないのが
本音です。
仕方が無いので、作業中のスケッチをUpdateすることにしました。
'拘束モード切り替え Private Sub ChangeMode(ByVal con As Constraint) con.Mode = IIf(con.Mode = catCstModeDrivenDimension, _ catCstModeDrivingDimension, _ catCstModeDrivenDimension) Dim pt As Part Set pt = KCL.GetParent_Of_T(con, "Part") Dim skt As Sketch Set skt = KCL.GetParent_Of_T(con, "Sketch") Call pt.UpdateObject(skt) End Sub
これも最初に失敗する事があるのですが、比較的安定して正しく表示
されるようになりました。
一応、CATIA.RefreshDisplay の切り替えのみをテストしましたが、
効果がないです。 それを考えると表示だけの問題では無さそうです。
(そもそもこんな拘束を作りたくない・・・)