Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Root Component kann nicht gefunden werden?

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX
Autor Thema:  Root Component kann nicht gefunden werden? (2040 mal gelesen)
little_ug
Mitglied
CAX/PDM Admin / PM


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

Beiträge: 389
Registriert: 20.03.2003

erstellt am: 20. Mrz. 2009 10:18    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,
habe hier ein kleines programm welches durch die ganze BG laufen soll und die Teile vom Reference Set auf ganzes Teil stellen soll.

Hier mein Programm:

Option Strict Off
Imports System
Imports System.Collections
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.Assemblies

Module NXJournal
Sub Main

    Dim s As Session = Session.GetSession()
    Dim ufs As UFSession = UFSession.GetUFSession()
    Dim parents As Tag()

If s.Parts.Work Is Nothing Then
    Windows.Forms.MessageBox.Show("Kein Teil geladen! - No Part Loaded!")
    Exit Sub
End If

'modulabfrage
    Dim module_id As Integer = 0
    ufs.UF.AskApplicationModule(module_id)
    If module_id = UFConstants.UF_APP_DRAFTING Then
        Windows.Forms.MessageBox.Show("Bitte ins Modeling wechseln / Please change to modeling")
        Exit Sub
End If

    For Each a_part As Part In s.Parts
        Dim root As Component = a_part.ComponentAssembly.RootComponent

        If Not root Is Nothing Then
            ufs.Assem.WhereIsPartUsed(a_part.Tag, parents)
            If parents.Length = 0 Then
                Dim children As ArrayList = New ArrayList
                getAllChildren(root, children)
                Dim kids(children.Count - 1) As Component
                Dim inx As Integer = 0
                For Each obj As Object In children
                    kids(inx) = obj
                    inx = inx + 1
                Next

                a_part.ComponentAssembly.ReplaceReferenceSetInOwners( _
                    "Entire Part", kids)
            End If
        End If

    Next

End Sub

Sub getAllChildren(ByVal comp As Component, ByRef children As ArrayList)

    For Each child As Component In comp.GetChildren()
        children.Add(child)
        getAllChildren(child, children)
    Next

End Sub

End Module


Jetzt bekomme ich hier ein problem (Zeile29) ComponentAssembly.RootComponent....
Ich glaube er findet den RootComponent nicht.

Hat jemand eine Idee?

Danke

------------------
Gruß

Michael

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 21. Mrz. 2009 11:17    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 Nur für little_ug 10 Unities + Antwort hilfreich


Module1.txt

 
Hallo Michael,

in Deinem Code scheint ein prinzipieller Fehler zu sein:

Einerseits gehst Du die PartCollection durch (For Each a_part As Part In s.Parts) um alle geöffneten Parts zu bekommen. Jedes dieser Parts versuchst Du nun, zur RootKomponente zu machen (Dim root As Component = a_part.ComponentAssembly.RootComponent) und rekursiv die Children auszulesen.
Root ist per Definition allerdings ausschließlich der oberste Knoten eines Assemblies. Damit ist die Bauchlandung im wahrsten Sinne des Wortes vorprogrammiert.

Zum korrekten Auslesen der Struktur wird Root nur ein mal zum Start der Rekursion vorgegeben. Der Rest ergibt sich alleine durch die jeweils vorhandenen oder auch nicht vorhandenen Children einer Komponente.

Gruß, Michael

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

little_ug
Mitglied
CAX/PDM Admin / PM


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

Beiträge: 389
Registriert: 20.03.2003

erstellt am: 23. Mrz. 2009 13:49    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 Michael,
vielen Dank für deine Hilfe. Du hast vollkommen recht.
Ich bekommen jetzt nur leider nicht mein RefSet ersetzt.
Hast du hier noch eine Idee?

Vielen Dank.

------------------
Gruß

Michael

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 24. Mrz. 2009 10:18    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 Nur für little_ug 10 Unities + Antwort hilfreich

Hallo Michael,

Idee: ja, Zeit für's Detail: nein.
Schieb' mal den Code für's RefSet in die Rekursion und hol' Dir dort die Variablen für ReplaceReferenceSetInOwners.

Gruß, Michael

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

little_ug
Mitglied
CAX/PDM Admin / PM


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

Beiträge: 389
Registriert: 20.03.2003

erstellt am: 26. Mrz. 2009 20:16    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

Super, vielen Dank hat funktioniert!

------------------
Gruß

Michael

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

Sirus
Ehrenmitglied
CAD Applikationsentwickler


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: 1564
Registriert: 03.06.2004

SolidWorks2022

erstellt am: 19. Dez. 2011 09:42    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 Nur für little_ug 10 Unities + Antwort hilfreich

hallo michael

kannst du bitte die lösung auch noch hier
reinstellen, wäre eine grosse hilfe, danke.

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

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



Fachplaner (m/w/d) Bautechnik / Bauingenieur (m/w/d)

Ihr wollt gestalten, mitdenken und entwickeln. Ihr sucht Möglichkeiten, Neues zu lernen, Karriere zu machen oder euch weiter zu qualifizieren. Ein sicherer und attraktiver Arbeitsplatz, an dem ihr Verantwortung übernehmen und eigene Ideen einbringen könnt, ist euch wichtig.

Dann kommt mit, WASser arbeiten. Wir suchen euch als:

Fachplaner (m/w/d) ...

Anzeige ansehenBauwesen
little_ug
Mitglied
CAX/PDM Admin / PM


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

Beiträge: 389
Registriert: 20.03.2003

erstellt am: 19. Dez. 2011 11:29    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

Hi, is schon ziemlich alt... habs dann irgendwie so gemacht...:

Dim assembly As ComponentAssembly = wP.ComponentAssembly
getComponents(assembly.RootComponent)
replace_ref_set()


    Private Sub getComponents(ByVal comp As Component)

        Dim comp_part As Component

        If TypeOf comp.Prototype Is Part Then
            comp_part = comp

            If Not comp_list.Contains(comp_part) Then
                comp_list.Push(comp_part)
            End If

        End If

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

        For Each child As Component In children
            getComponents(child)
        Next child

    End Sub

    Private Sub replace_ref_set()

        For Each cmp As Component In comp_list

            Try
                Dim cmps(0) As Assemblies.Component
                cmps(0) = cmp
                Dim erl As ErrorList
                erl = wP.ComponentAssembly.ReplaceReferenceSetInOwners(refsetname, cmps)
                erl.Dispose()
            Catch ex As Exception
                'Echo(ex.Message)
            End Try


        Next

    End Sub

------------------
Gruß

Michael

have you tried turning it off and on again

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)2023 CAD.de | Impressum | Datenschutz