| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Attribute an den Part vergeben (2510 mal gelesen)
|
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 14. Nov. 2005 13:00 <-- editieren / zitieren --> Unities abgeben:
Hallo alle zusammen, hab da wieder mal ein Problem, habe in meinem Produkt einen Part mit dem Namen "stift". Dem Part "stift"m öchte ich die Attribute vergeben "Durchmesser" "=6mm". Jetzt habe ich ein makro aufgezeichnet. In diesem Produkt funktioniert es, aber sobald ich ein anderes Produkt benutze mit einem Part namens "stift" bring er mir eine Fehlermeldung. Wie kann ich "HANDLE O-41" durch den Namen des Partnamens "stift" ersetzten. Damit das Programm einfach nach diesem Namen im Produkt sucht und ihm dann die Attribute vergibt. Code: Dim stift As String
funktioniert nicht.
Code: Imports System Imports NXOpenModule NXJournal Sub Main Dim theSession As Session = Session.GetSession() Dim assemblies_Component1 As Assemblies.Component = CType(theSession.Parts.Work.ComponentAssembly.FindObject("HANDLE O-41"), Assemblies.Component) Dim partLoadStatus1 As PartLoadStatus theSession.Parts.SetWorkComponent(assemblies_Component1, partLoadStatus1) partLoadStatus1.Dispose() Dim session_UndoMarkId1 As Session.UndoMarkId session_UndoMarkId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Edit Properties") theSession.Parts.Work.SetAttribute("Durchmesser", "=6mm") Dim nullAssemblies_Component As Assemblies.Component = Nothing Dim partLoadStatus2 As PartLoadStatus theSession.Parts.SetWorkComponent(nullAssemblies_Component, partLoadStatus2) partLoadStatus2.Dispose() End Sub End Module
Danke in voraus für eure hilfe.
Gruß l.pesch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
l.pesch Mitglied
Beiträge: 312 Registriert: 22.01.2004
|
erstellt am: 17. Nov. 2005 10:27 <-- editieren / zitieren --> Unities abgeben:
|
| Konstrukteur (m/w/d) Sondermaschinenbau | Leidenschaft für technologischen Fortschritt ausleben? Dabei sein, wenn Innovationen Wirklichkeit werden? Bei FERCHAU suchen wir Menschen mit dem gleichen Anspruch: als Expert:innen für unseren Kunden. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte. Als Berufseinsteiger:in unterstützt du deine Kolleg:innen mit neuen Ideen und festigst dein Wissen durch praktische Erfahrungen.... | Anzeige ansehen | Konstruktion, Visualisierung |
|
MarckyMON Mitglied Programmierer
Beiträge: 35 Registriert: 07.07.2008
|
erstellt am: 08. Jul. 2008 22:34 <-- editieren / zitieren --> Unities abgeben: Nur für l.pesch
Hi I.Pesch, vor wenigen Tagen habe ich mich auch dieselbe Frage wie Du gestellt. Heute hatte ich eine meogliche Loesung gefunden. Was ich von der NXOpen .NET API bzw. Journaling verstanden habe (und da bin ich auch frisch eingestiegen ), habe ich fesgestellt, dass Strings wie "HANDLE O-41" von einem Journal ausgegeben werden. Diese Strings verweisen auf bestimmte Objekte (Compenents, usw), dessen IDs von jedem Journal-Ablauf ausgegeben werden. Deswegen ist es unmoeglich (soviel ich es verstanden habe) diese bestimmte ID im Voraus herauszubekommen). Also, um dieses Problem umzugehen, und was ich in den letzten zwei Tagen als Loesungen kenne, ist folgendes: * Durch die ganze Produkt laufen, bis dein Part bzw. Component gefunden wird, und die Attribute dann setzen, oder * das Part durch eine Selektion auswaehlen und dann die Attribute setzen. Wenn Du mit "Produkt" dasselbe wie "Assembly" meinst, dann hoffe ich , dass der folgende Code Dich weiterhilft (ist die Loesung 1 von der obere Liste): Code:
Imports NXOpen Imports NXOpen.AssembliesModule SetComponentAttrib Sub Main() 'Retrieve the current session / instance of NX Dim theSession As Session = Session.GetSession() 'Retrieve the current work part (in this case, the root assembly) Dim workPart As Part = theSession.Parts.Work 'Create an undo mark, in case the user wishes to undo the action Dim setAttribMark As Session.UndoMarkId setAttribMark = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Set Attribute") 'Retrieve all child components / parts of the root assembly Try RetrieveChild(workPart.ComponentAssembly.RootComponent) Catch End Try End Sub Private Sub RetrieveChild(ByVal component As Component) 'Retrieve all child components / part of the passed component / part Dim childcomponents() As Component = component.GetChildren() 'Loop through all found child parts For index As Integer = 0 To childcomponents.Length - 1 'HIER MUSST DU DEN NAMEN DEINES TEILS ANPASSEN SOWIE DEINE ATTRIBUTE 'Sobald das Component/Teil mit dem Namen "stift" gefunden wird, dann setze die Attribute und danach die Schleife verlassen If childcomponents(index).Name = "stift" Then childcomponents(index).SetAttribute("Durchmesser", "6mm") Exit For End If 'Retrieve all children for the current child component RetrieveChild(childcomponents(index)) Next End Sub End Module
Sorry fuer die englischen Kommentaren, meine Muttersprache ist Englisch. Ich hoffe mein Deutsch war gut genug, dass Du meine Antwort verstanden hast!! Uebrigens wenn die zweite Loesung auch von Dir gebraucht wird, dann sag einfach bescheid.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|