"Crumbs" from Wave Geometry Linker?

I am learning as I go and piecing code together to accomplish what I need.

The main goal is to export a light weight parasolid for System Layout (AutoCAD). I have tried different code and different manual steps and nothing comes close to what this code does.

The process is after blanking/hiding what is not needed through the assembly, run this code....pull into the assembly the component solids with Wave Geometry Linker, continue using Linked Exterior with all unblanked solids in the Assembly, remove Parameters from the resulted Sheet Bodies, and export as a parasolid file.

The main issue I need help on is that when the code is ran, I get unwanted sheet bodies at 0,0,0. Example....If I take a simple unit and blank out all the screw heads (M8, M10, M12), I get one set of M12 sheet bodies at 0,0,0. If I blank any combination of M12s and leave at least one M12 unblanked, I do not get the extra sheet bodies. I have ran this code with an assembly that had many sub-assemblies. I would get a handful of unwanted sheet bodies at 0,0,0 from the sub-assemblies.

I have tested many options. If I suppress items instead of blank them, I do not receive the extra sheet bodies, but for some reason my final parasolid file can be up to twice as large compared to blanking items. Also, it seems like the last item blanked in the navigator "determines" what are the extra sheet bodies at 0,0,0.

I am only guessing that the Wave Geometry Linker is the issue. I am working with NX11.

Update-
I did some troubleshooting and the extra sheet bodies actually show up right after this...

ufs.Modl.CreateLinkedExterior(extData, extFeat)

I am unsure if the extra sheet bodies show up from something in the Wave Geometry Linker or actually from the Linked Exterior operation.


Option Strict Off

Imports System
Imports System.IO
Imports System.Windows.Forms
Imports System.Collections
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities
Imports NXOpen.Assemblies
Imports Microsoft.VisualBasic

Module create_linked_exterior_and_export_parasolid_result

Dim theSession As Session = Session.GetSession()
Dim ufs As UFSession = UFSession.GetUFSession()

Sub Main()

Dim FolderBrowserDialog1 As New FolderBrowserDialog
Dim filepath As String
Dim filename As String

With FolderBrowserDialog1
.RootFolder = Environment.SpecialFolder.Desktop
.SelectedPath = "T:\data\medm\biw\"
.Description = "Select the Tool Folder to Save in..."
If .ShowDialog = DialogResult.OK Then
filepath = .SelectedPath
Else
Exit Sub
End If
End With

Redo:
filename = ""
filename = filename + InputBox("Filename: ", "Filename for Exported Parasolid", "MAAXXXXXL_XX_DATE")

Dim myPath As String = IO.Path.Combine(filepath, filename & ".x_t")
Dim UserResponse As Integer

If IO.File.Exists(myPath) Then
UserResponse = MsgBox ("File """ & filename & ".x_t""" & " already exists. Do you want to replace it?", vbYesNo, "Journal - Export Reduced Parasolid")
If UserResponse = vbYes Then
IO.File.Delete(myPath)
Else 'No
Goto Redo
End If
End If

Dim dPart As Part = theSession.Parts.Display
Dim bodies() As Body = AskAllBodies(dPart)
Dim comps(bodies.Length - 1) As Assemblies.Component
Dim xforms(bodies.Length - 1) As NXOpen.Tag
Dim body_tags(bodies.Length - 1) As NXOpen.Tag
Dim proto As NXObject

For ii As Integer = 0 To bodies.Length - 1
If bodies(ii).IsOccurrence() Then
comps(ii) = bodies(ii).OwningComponent
proto = bodies(ii).Prototype
body_tags(ii) = proto.Tag
If NOT bodies(ii).IsBlanked Then
ufs.So.CreateXformAssyCtxt(comps(ii).Tag, _
comps(ii).Tag, NXOpen.Tag.Null, xforms(ii))
End If
Else
comps(ii) = Nothing
body_tags(ii) = bodies(ii).Tag
xforms(ii) = NXOpen.Tag.Null
End If
Next

Dim directions(,) As Double = _
{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {-1, 0, 0}, {0, -1, 0}, {0, 0, -1}}
Dim n_faces As Integer
Dim faces() As Tag = Nothing
Dim comp_index() As Integer = Nothing

ufs.Modl.IdentifyExteriorUsingHl(bodies.Length, body_tags, _
xforms, 6, directions, _
dPart.Preferences.Modeling.DistanceToleranceData, _
UFConstants.UF_LINKED_HL_RES_COARSE, n_faces, faces, comp_index)

Dim extData As UFModl.LinkedExt
With extData
.at_timestamp = False
.bodies = body_tags
.delete_openings = True
.faces = faces
.group_results = UFConstants.UF_LINKED_EXT_GROUP_NONE
.mass_props = False
.num_bodies = bodies.Length
.num_faces = n_faces
.xform_index = comp_index
.xforms = xforms
End With

Dim extFeat As NXOpen.Tag = Nothing
Dim mark As Session.UndoMarkId = theSession.SetUndoMark( _
Session.MarkVisibility.Visible, "Create Linked Exterior")

ufs.Modl.CreateLinkedExterior(extData, extFeat)

Dim n_groups As Integer
Dim groups() As NXOpen.Tag = Nothing
Dim n_subfeats As Integer
Dim subfeats() As NXOpen.Tag = Nothing
Dim mass_props(46) As Double

ufs.Modl.AskLinkedExterior(extFeat, extData, n_groups, groups, _
n_subfeats, subfeats, mass_props)

Dim bList As ArrayList = New ArrayList
Dim bTag As NXOpen.Tag

For ii As Integer = 0 To n_subfeats - 1
ufs.Modl.AskFeatBody(subfeats(ii), bTag)
bList.Add(bTag)
Next

Dim bTags() As NXOpen.Tag = bList.ToArray(GetType(NXOpen.Tag))
ufs.Modl.DeleteBodyParms(bTags)

ufs.Ps.ExportData(bTags, myPath)

MsgBox ("Successfully Completed the Task.", vbInformation, "Journal - Export Reduced Parasolid")

End Sub

Function AskAllBodies(ByVal thePart As Part) As Body()
Dim theBodies As New System.Collections.ArrayList()
Dim aBodyTag As Tag = NXOpen.Tag.Null
Do
ufs.Obj.CycleObjsInPart(thePart.Tag, _
UFConstants.UF_solid_type, aBodyTag)
If aBodyTag = NXOpen.Tag.Null Then
Exit Do
End If

Dim theType As Integer, theSubtype As Integer
ufs.Obj.AskTypeAndSubtype(aBodyTag, theType, theSubtype)
If theSubtype = UFConstants.UF_solid_body_subtype Then
theBodies.Add(theSession.GetObjectManager.GetTaggedObject(aBodyTag))
End If
Loop While True

Return DirectCast(theBodies.ToArray(GetType(Body)), Body())
End Function

Public Function GetUnloadOption(ByVal dummy As String) As Integer
GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY
End Function

End Module