
I don't think this will come as news to anyone, but edge blend features depend on edges in the model. This sounds really obvious (which it is), but given how even minor edits can create or remove dozens of edges, it is surprising how stable the edge blend features really are. When a parent edge is modeled away, the edge blend feature will 'remember' where it used to be and display a warning icon in the feature tree. Occasionally, these warnings are very useful to track down unintentional changes; but more often than not, you are well aware of the changes and simply want to remove the old blend parents and get rid of the warning.
The Code
The journal below will search through the feature tree and remove any missing parents from the edge blends.
The code below should run on NX 7.5 or above.
Option Strict Off Imports System Imports System.Collections.Generic Imports NXOpen Module BlendCleaner_75 Sub Main() Dim theSession As Session = Session.GetSession() Dim workPart As Part = theSession.Parts.Work Dim lw As ListingWindow = theSession.ListingWindow lw.Open() Const undoName As String = "Blend Cleaner" Dim markId1 As Session.UndoMarkId markId1 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, undoName) Dim numCleaned As Integer = 0 Dim nullFeature As Features.Feature = Nothing Dim currentFeat As Features.Feature = workPart.CurrentFeature Dim prevFeat As Features.Feature = Nothing For Each tempFeat As Features.Feature In workPart.Features If tempFeat.FeatureType = "BLEND" Then Dim myBlend As Features.EdgeBlend = tempFeat Dim blendWarnings() As String = myBlend.GetFeatureWarningMessages() Dim needsCleaning As Boolean = False For Each myLine As String In blendWarnings If myLine.ToLower.Contains("consumed") Then needsCleaning = True End If Next If needsCleaning Then 'make previous feature the current feature prevFeat.MakeCurrentFeature() 'edit blend feature with rollback 'workPart.Features.SetEditWithRollbackFeature(myBlend) Dim blendBuilder As Features.EdgeBlendBuilder = workPart.Features.CreateEdgeBlendBuilder(myBlend) Dim validEdges As New List(Of Edge) Dim myCollector As ScCollector Dim myExp As Expression Dim valid As Boolean For i As Integer = 0 To blendBuilder.GetNumberOfValidChainsets - 1 blendBuilder.GetChainsetAndStatus(i, myCollector, myExp, valid) Dim myObjects() As TaggedObject = myCollector.GetObjects For Each temp As Edge In myObjects Try temp.GetLength() validEdges.Add(temp) Catch ex As NXException 'lw.WriteLine(" error: " & ex.Message) 'edge has been consumed or suppressed End Try Next Dim edgeMultipleSeedTangentRule1 As EdgeMultipleSeedTangentRule edgeMultipleSeedTangentRule1 = workPart.ScRuleFactory.CreateRuleEdgeMultipleSeedTangent(validEdges.ToArray, 0.5, True) Dim rules1(0) As SelectionIntentRule rules1(0) = edgeMultipleSeedTangentRule1 myCollector.ReplaceRules(rules1, False) Dim csIndex1 As Integer csIndex1 = blendBuilder.AddChainset(myCollector, myExp.Value.ToString) Next blendBuilder.CommitFeature() blendBuilder.Destroy() numCleaned += 1 currentFeat.MakeCurrentFeature() 'workPart.Features.SetEditWithRollbackFeature(nullFeature) End If End If prevFeat = tempFeat Next If numCleaned > 0 Then theSession.SetUndoMarkVisibility(markId1, undoName, Session.MarkVisibility.Visible) End If lw.Close() End Sub End Module
Warnings
The code above will remove any missing edge parents and will set the selection intent rule to 'tangent edges'. If this selection intent rule is not what you desire, modify the code accordingly. Also, the journal was not thoroughly tested with variable radius edge blends. If you find any bugs or encounter unexpected results, leave a comment or email me at info@nxjournaling.com
