自分が作業して欲しくなったので突貫で作りました。
こんなスケッチ1を作ります。
続いて、こんなスケッチ2を作ります。
基本的にスケッチ1が変更されても、スケッチ2の形状は影響は有りません。
但し、"オフセット.20" はスケッチ1に対して参照の拘束が付いています。
まぁクリアランスを確認したい とかです。
ここで問題になるのは、スケッチ1が削除される場合です。
こんな風になりますよね?
”すべての子を削除” のチェックを外し、実行してしまうと
まぁエラーになります。形状には影響無いので無視したいところ
なのですが。
要は
・参照の拘束
・外部との拘束
と言うことです。
で、この様なスケッチ拘束を削除するマクロです。
'vba Part_RemoveExternalElmConst Ver0.0.1 using-'KCL0.0.12' by Kantoku Option Explicit Private Const EXTERNAL_ELEMENT_NAME = "CATIAGeometry" Sub CATMain() 'ドキュメントのチェック If Not CanExecute(Array("PartDocument")) Then Exit Sub Dim doc As Document Set doc = CATIA.ActiveDocument 'スケッチ取得 Dim skts As Collection Set skts = GetSketchList(doc) If skts.count < 1 Then MsgBox "スケッチがありません!", vbExclamation Exit Sub End If '処理確認 Dim msg As String msg = "個のスケッチに対して処理します。宜しいですか?" If MsgBox(skts.count & msg, vbYesNo + vbQuestion) = vbNo Then Exit Sub '削除対象の拘束取得 Dim del_lst As Collection Set del_lst = GetRemoveConstraintList(skts) If del_lst.count < 1 Then MsgBox "削除すべきスケッチ拘束が有りません!", vbExclamation Exit Sub End If '削除 Dim cnt As Long cnt = RemoveConstraint(del_lst) 'done doc.Part.Update MsgBox cnt & "個のスケッチ拘束を削除しました" End Sub 'リスト内拘束の削除 Private Function RemoveConstraint(ByVal cons As Collection) As Long RemoveConstraint = cons.count Dim sel As Selection Set sel = KCL.GetParent_Of_T(cons(1), "PartDocument").Selection CATIA.HSOSynchronized = False sel.Clear Dim con As Constraint For Each con In cons sel.Add con Next sel.Delete sel.Clear CATIA.HSOSynchronized = True End Function '削除対象拘束リスト '条件:参照チェックON & 外部要素との拘束 Private Function GetRemoveConstraintList(ByVal skts As Collection) As Collection Dim lst As Collection Set lst = New Collection Dim skt As Sketch Dim con As Constraint For Each skt In skts For Each con In skt.Constraints Debug.Print con.Name & " : " & CStr(con.Mode) If con.Mode = catCstModeDrivingDimension Then GoTo continue If Not HasExternalElementConstraint(con) Then GoTo continue lst.Add con continue: Next Next Set GetRemoveConstraintList = lst End Function 'ドキュメント内のスケッチリスト Private Function GetSketchList(ByVal doc As Document) As Collection Dim sel As Selection Set sel = doc.Selection CATIA.HSOSynchronized = False With sel .Clear .Search "CATPrtSearch.Sketch,all" End With Dim lst As Collection Set lst = New Collection Dim i As Long For i = 1 To sel.Count2 lst.Add sel.Item2(i).Value Next sel.Clear CATIA.HSOSynchronized = True Set GetSketchList = lst End Function '自身のスケッチ要素以外との拘束か? Private Function HasExternalElementConstraint(ByVal con As Constraint) As Boolean HasExternalElementConstraint = True Dim elm As AnyObject Dim idx As Long idx = 0 On Error Resume Next Do While Err.Number = 0 Err.Number = 0 idx = idx + 1 Set elm = con.GetConstraintElement(idx) If InStr(elm.Name, EXTERNAL_ELEMENT_NAME) > 0 Then Exit Function End If Loop HasExternalElementConstraint = False End Function
同一スケッチ内の参照拘束は、確認の意味もあるだろうと思う為、削除しません。
(残っていても、ダメージは少ないだろうと思ってます)
最近は細々したものばかり・・・。