[COLOR=green]'Unite all the solid bodies on a given layer[/color]
[COLOR=green]' then subtract all the solid bodies on a given layer from the resulting solid[/color]
[COLOR=blue]Option[/color] [COLOR=blue]Strict[/color] [COLOR=blue]Off[/color]
[COLOR=blue]Imports[/color] System
[COLOR=blue]Imports[/color] System.Collections.Generic
[COLOR=blue]Imports[/color] NXOpen
[COLOR=blue]Module[/color] Module1
[COLOR=blue]Sub[/color] Main()
[COLOR=blue]Dim[/color] theSession [COLOR=blue]As[/color] Session [COLOR=blue]=[/color] Session.GetSession()
[COLOR=blue]Dim[/color] workPart [COLOR=blue]As[/color] Part [COLOR=blue]=[/color] theSession.Parts.Work
[COLOR=blue]Dim[/color] layerUnite [COLOR=blue]As[/color] [COLOR=blue]Integer[/color] [COLOR=blue]=[/color] 1
[COLOR=blue]Dim[/color] layerSubtract [COLOR=blue]As[/color] [COLOR=blue]Integer[/color] [COLOR=blue]=[/color] 2
[COLOR=blue]Dim[/color] bodiesOnUniteLayer [COLOR=blue]As[/color] [COLOR=blue]New[/color] List(Of Body)
[COLOR=blue]Dim[/color] bodiesOnSubtractLayer [COLOR=blue]As[/color] [COLOR=blue]New[/color] List(Of Body)
[COLOR=green]'get list of solid bodies on given layer[/color]
[COLOR=blue]For[/color] [COLOR=blue]Each[/color] temp [COLOR=blue]As[/color] Body [COLOR=blue]In[/color] workPart.Bodies
[COLOR=blue]If[/color] temp.IsSolidBody [COLOR=blue]Then[/color]
[COLOR=blue]If[/color] temp.Layer [COLOR=blue]=[/color] layerUnite [COLOR=blue]Then[/color]
bodiesOnUniteLayer.Add(temp)
[COLOR=blue]ElseIf[/color] temp.Layer [COLOR=blue]=[/color] layerSubtract [COLOR=blue]Then[/color]
bodiesOnSubtractLayer.Add(temp)
End [COLOR=blue]If[/color]
End [COLOR=blue]If[/color]
[COLOR=blue]Next[/color]
[COLOR=green]'Unite solids on specified layer[/color]
[COLOR=blue]Dim[/color] markId1 [COLOR=blue]As[/color] Session.UndoMarkId
markId1 [COLOR=blue]=[/color] theSession.SetUndoMark(Session.MarkVisibility.Visible, "Unite solids on layer " [COLOR=blue]&[/color] layerUnite.ToString)
[COLOR=blue]Dim[/color] nullFeatures_BooleanFeature [COLOR=blue]As[/color] Features.BooleanFeature [COLOR=blue]=[/color] [COLOR=blue]Nothing[/color]
[COLOR=blue]Dim[/color] booleanBuilder1 [COLOR=blue]As[/color] Features.BooleanBuilder
booleanBuilder1 [COLOR=blue]=[/color] workPart.Features.CreateBooleanBuilderUsingCollector(nullFeatures_BooleanFeature)
booleanBuilder1.Tolerance [COLOR=blue]=[/color] 0.001
booleanBuilder1.Operation [COLOR=blue]=[/color] Features.Feature.BooleanType.Unite
[COLOR=blue]Dim[/color] added1 [COLOR=blue]As[/color] [COLOR=blue]Boolean[/color]
added1 [COLOR=blue]=[/color] booleanBuilder1.Targets.Add(bodiesOnUniteLayer.Item(0))
bodiesOnUniteLayer. [COLOR=green]Remove(bodiesOnUniteLayer.Item(0))[/color]
[COLOR=blue]Dim[/color] scCollector1 [COLOR=blue]As[/color] ScCollector
scCollector1 [COLOR=blue]=[/color] workPart.ScCollectors.CreateCollector()
[COLOR=blue]Dim[/color] bodies1() [COLOR=blue]As[/color] Body [COLOR=blue]=[/color] bodiesOnUniteLayer.ToArray
[COLOR=blue]Dim[/color] bodyDumbRule1 [COLOR=blue]As[/color] BodyDumbRule
bodyDumbRule1 [COLOR=blue]=[/color] workPart.ScRuleFactory.CreateRuleBodyDumb(bodies1)
[COLOR=blue]Dim[/color] rules1(0) [COLOR=blue]As[/color] SelectionIntentRule
rules1(0) [COLOR=blue]=[/color] bodyDumbRule1
scCollector1.ReplaceRules(rules1, [COLOR=blue]False[/color])
booleanBuilder1.ToolBodyCollector [COLOR=blue]=[/color] scCollector1
[COLOR=blue]Dim[/color] uniteFeature [COLOR=blue]As[/color] Features.BooleanFeature
uniteFeature [COLOR=blue]=[/color] booleanBuilder1.Commit()
booleanBuilder1.Destroy()
MsgBox("united bodies: " [COLOR=blue]&[/color] uniteFeature.GetBodies.Length.ToString)
[COLOR=blue]Dim[/color] unitedBody [COLOR=blue]As[/color] Body [COLOR=blue]=[/color] uniteFeature.GetBodies(0)
[COLOR=green]'subtract solids from specified layer[/color]
[COLOR=blue]Dim[/color] markId2 [COLOR=blue]As[/color] Session.UndoMarkId
markId2 [COLOR=blue]=[/color] theSession.SetUndoMark(Session.MarkVisibility.Visible, "Subtract solids on layer " [COLOR=blue]&[/color] layerSubtract.ToString)
[COLOR=blue]Dim[/color] booleanBuilder2 [COLOR=blue]As[/color] Features.BooleanBuilder
booleanBuilder2 [COLOR=blue]=[/color] workPart.Features.CreateBooleanBuilderUsingCollector(nullFeatures_BooleanFeature)
booleanBuilder2.Tolerance [COLOR=blue]=[/color] 0.001
booleanBuilder2.Operation [COLOR=blue]=[/color] Features.Feature.BooleanType.Subtract
booleanBuilder2.CopyTools [COLOR=blue]=[/color] [COLOR=blue]True[/color]
[COLOR=blue]Dim[/color] added2 [COLOR=blue]As[/color] [COLOR=blue]Boolean[/color]
added2 [COLOR=blue]=[/color] booleanBuilder2.Targets.Add(unitedBody)
[COLOR=blue]Dim[/color] scCollector2 [COLOR=blue]As[/color] ScCollector
scCollector2 [COLOR=blue]=[/color] workPart.ScCollectors.CreateCollector()
[COLOR=blue]Dim[/color] bodies2() [COLOR=blue]As[/color] Body [COLOR=blue]=[/color] bodiesOnSubtractLayer.ToArray
[COLOR=blue]Dim[/color] bodyDumbRule2 [COLOR=blue]As[/color] BodyDumbRule
bodyDumbRule2 [COLOR=blue]=[/color] workPart.ScRuleFactory.CreateRuleBodyDumb(bodies2)
[COLOR=blue]Dim[/color] rules2(0) [COLOR=blue]As[/color] SelectionIntentRule
rules2(0) [COLOR=blue]=[/color] bodyDumbRule2
scCollector2.ReplaceRules(rules2, [COLOR=blue]False[/color])
booleanBuilder2.ToolBodyCollector [COLOR=blue]=[/color] scCollector2
[COLOR=blue]Dim[/color] nXObject1 [COLOR=blue]As[/color] NXObject
nXObject1 [COLOR=blue]=[/color] booleanBuilder2.Commit()
booleanBuilder2.Destroy()
End [COLOR=blue]Sub[/color]
[COLOR=blue]Public[/color] [COLOR=blue]Function[/color] GetUnloadOption(ByVal dummy [COLOR=blue]As[/color] [COLOR=blue]String[/color]) [COLOR=blue]As[/color] [COLOR=blue]Integer[/color]
[COLOR=green]'Unloads the image when the NX session terminates[/color]
GetUnloadOption [COLOR=blue]=[/color] NXOpen.Session.LibraryUnloadOption.AtTermination
End [COLOR=blue]Function[/color]
End [COLOR=blue]Module[/color]