Hi,
I have modified my journal to scan the assembly but the result is not correct: Family member are not recognized
Find herewith an assembly for test
Thanks in advance for your help
_____________________________________________________
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.Assemblies
Imports NXOpen.Features
Imports System.Windows.Forms
Imports NXOpen.UF
Imports NXOpen.Utilities
Imports System.Collections.Generic
Module Main
Dim s As Session = Session.GetSession()
Dim ufs As UFSession = UFSession.GetUFSession()
Dim lw As ListingWindow = s.ListingWindow
Dim NXMessageBox As NXMessageBox = NXOpen.UI.GetUI().NXMessageBox
Dim Folder As String = Nothing
Dim workPart As Part = s.Parts.Work
Dim PartList As List(Of Part) = New List(Of Part)
Dim theUfSession As UFSession = UFSession.GetUFSession()
Dim loadStatus As PartLoadStatus = Nothing
Dim is_family_instance As Boolean
Sub Main()
Dim basePart As BasePart = s.Parts.BaseWork
If basePart Is Nothing Then
NXMessageBox.Show("", NXMessageBox.DialogType.Error, "No Work Part")
Return
End If
Do_The_Job()
End Sub
Sub Do_The_Job()
Dim dp As Part = s.Parts.Display
Dim c As ComponentAssembly = s.Parts.Display.ComponentAssembly
Scan(c.RootComponent, 0)
' Ajout la tête d'assemblage ou la part unitaire dans la liste à traiter (version 1.1)
If Not PartList.Contains(dp) Then PartList.Add(dp)
ufs.Ui.SetStatus("Nombre de parts trouvées= " & PartList.Count)
For Each part As Part In PartList
'Echo(vbCrLf & "Traitement de : " & part.FullPath)
'Echo("")
s.Parts.SetDisplay(part, False, True, loadStatus)
' ----------------------------------------------
' Test si c'est un membre de famille
' ----------------------------------------------
theUfSession.Part.IsFamilyInstance(workPart.Tag, is_family_instance)
If is_family_instance.ToString()=False Then
lw.WriteLine("La part " & s.Parts.Work.Leaf & " n'est pas un membre de famille")
Else
lw.WriteLine("La part " & s.Parts.Work.Leaf & " est un membre de famille")
End If
Next
' remet la tete d'assemblage en display part
s.Parts.SetDisplay(dp, False, True, loadStatus)
End Sub
Public Sub Scan(ByVal component As Component, ByVal niveau As Integer)
' ce sous-programme scanne récursivement l'assemblage
' il ne met pas dans la liste , les parts supprimées et non ouvertes
Try
Dim part As Part = CType(component.Prototype, Part)
Dim enfants As Component() = component.GetChildren()
If Not PartList.Contains(part) Then
PartList.Add(part)
For Each comp As Component In enfants
Scan(comp, niveau + 1)
Next
End If
Catch ex As Exception
End Try
End Sub
Public Sub Echo(ByVal output As String)
lw.Open()
lw.WriteLine(output)
End Sub
Public Function GetUnloadOption(ByVal dummy As String) As Integer
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
End Function
End Module
______________________________________________________________________________
Regards
Didier Psaltopoulos