Hi,
Thanks a lot.
I modified the journal for a more simple directory selection and I tried it in NX10
But the result is in UGII_BASE_DIR and not in my selected folder
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)
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 SAVE_AS_Attribut As String = ""
Dim DXF_Attribut As String = ""
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)
' ----------------------------------------------
'demande chemin sauvegarde
' ----------------------------------------------
lw.Open()
Dim FolderBrowserDialog As FolderBrowserDialog = New FolderBrowserDialog()
FolderBrowserDialog.SelectedPath = "C:"
FolderBrowserDialog.Description = "Selectionner le dossier ou doivent être sauvegardé les pièce"
If (FolderBrowserDialog.ShowDialog() <> DialogResult.OK) Then Return ' Sort si le user n'a rien indiqué
Folder = FolderBrowserDialog.SelectedPath
'lw.WriteLine("Le directory choisi est :" & Folder)
' ----------------------------------------------
'demande numero projet
' ----------------------------------------------
Dim numeroProjet As String = ""
numeroProjet = InputBox("Enter project number", "numero projet", "")
Dim loadStatus As PartLoadStatus = Nothing
For Each part As Part In PartList
'Echo(vbCrLf & "Traitement de : " & part.FullPath)
'Echo("")
s.Parts.SetDisplay(part, False, True, loadStatus)
' ----------------------------------------------
' Save As...
' ----------------------------------------------
Dim partSaveStatus1 As PartSaveStatus
Try
SAVE_AS_Attribut = s.Parts.Work.GetStringUserAttribute("SAVE_AS", -1)
'lw.WriteLine("L'attribut Save As de la part" & s.Parts.Work.Leaf +" est : " & SAVE_AS_Attribut)
'lw.WriteLine("" )
IF SAVE_AS_Attribut = "YES" THEN
part.SetUserAttribute("DXF", -1, "", Update.Option.Now)
partSaveStatus1 = s.Parts.Work.SaveAs(Folder+"\"+s.Parts.Work.Leaf+"_"+numeroProjet+".prt")
partSaveStatus1.Dispose()
END IF
Catch ex as Exception
End Try
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
Thanks in advance
Regards
Didier Psaltopoulos