Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Problem mit falschen Komponenten-Namen in Baugruppe gelöst!

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Problem mit falschen Komponenten-Namen in Baugruppe gelöst! (2720 mal gelesen)
Sirus
Ehrenmitglied
Administrator CAx / PDM (früher Konstrukteur)


Sehen Sie sich das Profil von Sirus an!   Senden Sie eine Private Message an Sirus  Schreiben Sie einen Gästebucheintrag für Sirus

Beiträge: 1543
Registriert: 03.06.2004

NX11 mit TC10.1 auf W7
NX12 Beta-Tester
Cinema4D

erstellt am: 12. Feb. 2013 11:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hallo zusammen

das problem mit den falschen komponenten-namen in baugruppen,
somit der falschen anzeige-namen der zwangsbedingungen ist
nun mit folgendem programm (von gtac) gelöst.

evtl. kann das auch einer verwenden...

---------------------------------------------

Option Strict Off

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.UI
Imports NXOpen.Utilities

Module rename_components_to_part_number

  Public s As Session = Session.GetSession()
  Public ufs As UFSession = UFSession.GetUFSession()
  Public lw As ListingWindow = s.ListingWindow

  Sub Main()

      Dim is_active As Boolean = False
      ufs.UF.IsUgmanagerActive(is_active)
      If is_active = False Then
        MsgBox("This program should be used in an NXManager environment.", _
                                                      MsgBoxStyle.Exclamation)
        Return
      End If

      Dim dp As Integer = 0
      dp = check_for_missing_display_part()

      If dp = 1 Then
        Return
      End If

      Dim dispPart As Part = s.Parts.Display
      Dim thisComp As NXOpen.Tag = NXOpen.Tag.Null

      Do
        thisComp = ask_next_component(dispPart.Tag, thisComp)
        If thisComp <> NXOpen.Tag.Null Then
            Dim partName As String = ""
            Dim refsetName As String = ""
            Dim instanceName As String = ""
            Dim origin(2) As Double
            Dim csysMatrix(8) As Double
            Dim transform(3, 3) As Double
            ufs.Assem.AskComponentData(thisComp, partName, refsetName, _
                            instanceName, origin, csysMatrix, transform)

            Dim partNumber As String = ""
            partNumber = ask_component_part_number(partName, thisComp)
            Dim thisInstance As NXOpen.Tag = _
                                ufs.Assem.AskInstOfPartOcc(thisComp)

            ' this changes what shows up in Component Properties->General->Name
            ufs.Obj.SetName(thisComp, partNumber)

            ' uncomment the following line to change the instance name
            'ufs.Assem.RenameInstance(thisInstance, partNumber)


        End If

      Loop Until thisComp = NXOpen.Tag.Null


  End Sub

  Public Function ask_component_part_number(ByVal partName As String, _
                                    ByVal comp As NXOpen.Tag) As String
      Dim partNumber As String = ""
      Dim partRev As String = ""
      Dim partFileType As String = ""
      Dim partFileName As String = ""
      ufs.Ugmgr.DecodePartFileName(partName, partNumber, _
                                  partRev, partFileType, partFileName)
      Return partNumber

  End Function

  Public Function ask_next_component(ByVal dispPartTag As NXOpen.Tag, _
                              ByVal comp As NXOpen.Tag) As NXOpen.Tag
      Dim type As Integer = 0
      Dim subtype As Integer = 0

      Do
        ufs.Obj.CycleObjsInPart(dispPartTag, _
                                UFConstants.UF_component_type, comp)
        If NXOpen.Tag.Null = comp Then
            Return comp
        End If

        ufs.Obj.AskTypeAndSubtype(comp, type, subtype)

        If subtype = UFConstants.UF_part_occurrence_subtype Then
            Return comp
        End If

      Loop Until comp = NXOpen.Tag.Null

      Return comp

  End Function

  Public Function check_for_missing_display_part() As Integer

      Dim dispPart As Part = Nothing

      Try
        dispPart = s.Parts.Display
      Catch ex As Exception
        lw.Open()
        lw.WriteLine("+++Error: " & ex.ToString())
      End Try

      If dispPart Is Nothing Then
        lw.Open()
        lw.WriteLine("There is no current Displayed Part")
        ufs.UF.PrintSyslog("+++ERROR: There is no current Displayed Part", _
                                                                      False)
        Return 1
      End If
      Return 0

  End Function

  Public Function GetUnloadOption(ByVal dummy As String) As Integer

      Return Session.LibraryUnloadOption.Immediately

  End Function

End Module

------------------
gruss urs 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Sirus
Ehrenmitglied
Administrator CAx / PDM (früher Konstrukteur)


Sehen Sie sich das Profil von Sirus an!   Senden Sie eine Private Message an Sirus  Schreiben Sie einen Gästebucheintrag für Sirus

Beiträge: 1543
Registriert: 03.06.2004

erstellt am: 19. Feb. 2013 13:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hallo zusammen

hab da noch was besseres gemacht...

----------------------------------------

Imports System
Imports System.Windows
Imports System.Windows.Forms
Imports NXOpen
Imports NXOpen.Assemblies

Module Comp_Name

Dim s As session = session.GetSession()
Dim lw As ListingWindow = s.ListingWindow

Sub ProcessAssemblyTree(ByVal c As Component)

Dim children As Component() = c.GetChildren()

For Each child As Component In children

' ----- lesen komponentenname
'LW.WriteLine("komponentenname = " + child.Name)

' ----- lesen partname
'LW.WriteLine("partname = " + child.DisplayName)

' ----- aus DisplayName wird neuer comp.name / trimmen bei "/"
dim comp_name As String() = child.DisplayName.Split("/")

'LW.WriteLine("comp_name = " + comp_name(0))

' ----- ändern comp_name in grosse schrift
dim comp_name_gross As string = comp_name(0).toupper()
'LW.WriteLine("comp_name_gross = " + comp_name_gross)

' ----- schreiben des neuuen comp_name, aber nur wenn nicht identisch....
if (child.Name = comp_name_gross) then
'MessageBox.Show("gleich = " + comp_name_gross + " = " + child.Name)
'LW.WriteLine("gleich = " + comp_name_gross + " = " + child.Name)

else
'MessageBox.Show("ungleich = " + comp_name_gross + " = " + child.Name)
LW.WriteLine("ungleich = " + comp_name_gross + " = " + child.Name)

child.SetName(comp_name_gross)

end if

ProcessAssemblyTree(child)
Next

End Sub

Sub Main()

Try
Dim part1 As Part = s.Parts.Work

Dim c As Component = part1.ComponentAssembly.RootComponent

ProcessAssemblyTree(c)

Catch e As Exception
lw.Open()

' ----- hier wird angegeben wenn der comp_name grösse als 30 zeichen ist!
'(Failed: A maximum of 30 characters may be entered)
lw.WriteLine("Failed: " & e.Message)
End Try

End Sub

Public Function GetUnloadOption(ByVal dummy As String) As Integer

Return Session.LibraryUnloadOption.Immediately

End Function
End Module

------------------
gruss urs 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Sirus
Ehrenmitglied
Administrator CAx / PDM (früher Konstrukteur)


Sehen Sie sich das Profil von Sirus an!   Senden Sie eine Private Message an Sirus  Schreiben Sie einen Gästebucheintrag für Sirus

Beiträge: 1543
Registriert: 03.06.2004

NX11 mit TC10.1 auf W7
NX12 Beta-Tester
Cinema4D

erstellt am: 19. Feb. 2013 16:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


...oder noch besser anstelle "trimmen" mit "abschneiden"...

--------------------------

' ----- aus DisplayName wird neuer comp.name / abschneiden der letzten 3 zeichen "/00"
dim comp_name As String = child.DisplayName.Substring(0, child.DisplayName.Length - 3)
'LW.WriteLine("comp_name = " + comp_name)

' ----- ändern comp_name in grosse schrift
dim comp_name_gross As string = comp_name.toupper()
'LW.WriteLine("comp_name_gross = " + comp_name_gross)

' ----- schreiben des neuen comp_name, aber nur wenn nicht identisch....

if (child.Name = comp_name_gross) then
'MessageBox.Show("gleich = " + comp_name_gross + " = " + child.Name)
'LW.WriteLine("gleich = " + comp_name_gross + " = " + child.Name)

else
'MessageBox.Show("ungleich = " + comp_name_gross + " = " + child.Name)
LW.WriteLine("Anpassung Komponentenname: " + child.Name + " wird " + comp_name_gross)
child.SetName(comp_name_gross)

end if

------------------
gruss urs 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2017 CAD.de