| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Attribute in Vb.NET (3152 mal gelesen)
|
JoeG Mitglied Systemadmin NX und Autocad
Beiträge: 122 Registriert: 18.10.2002 NX3
|
erstellt am: 28. Sep. 2007 09:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum Ich bastle gerade an einem Programm um die Part-Attribute des aktuellen Teils zu verändern. Bearbeiten (SetAttribute) und auslesen (GetStringAttribute) läuft bereits. Sollange die Attribute vorhanden sind habe ich kein Problem, kann mir jemand sagen wie man mit Vb.NET prüfen kann ob ein Attribut vorhanden ist? Mit dem erstellen hab ich auch meine Problem vielleicht hat da auch einer einen Tip? Danke Joe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SysRAdmin Mitglied SysAdmin
Beiträge: 39 Registriert: 05.12.2006
|
erstellt am: 28. Sep. 2007 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Hallo Joe hier mal ein kleines Beispiel: Module Attribute Sub Main Dim s As Session = session.GetSession Dim teil As part teil = s.Parts.Work dim attrib as string Try attrib= teil.GetStringAttribute("meinAttribut") messagebox.show(attrib) catch messagebox.show("Attribut nicht vorhanden") teil.SetAttribute("meinAttribut","meinWert") end try End Sub End Module MfG Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoeG Mitglied Systemadmin NX und Autocad
Beiträge: 122 Registriert: 18.10.2002 NX3
|
erstellt am: 04. Okt. 2007 07:21 <-- editieren / zitieren --> Unities abgeben:
|
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 24. Sep. 2009 15:45 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Moin Leute, ich hab eine kleine Frage und zwar schreibe ich auf einen Body ein Attribut und möchte dies wieder auslesen: bd As Body In p.Bodies bd_attr_info.Title = "TEST" bd.SetAttribute(bd_attr_info.Title, 4711) bd.GetRealAttribute(bd_attr_info.Title) (Bei den Bodies handelt es sich um Routing Aufmasskörper - könnte mir vorstellen, dass es damit zu tun hat) Gruß Patric ------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 24. Sep. 2009 18:37 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
|
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 25. Sep. 2009 08:17 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Nein leider hat das auch nicht geklappt. Ich vermute es liegt an der Deklarierung der Objekte und dass die Attribute in der Komponente gespeichert werden und nicht direkt auf dem Objekt. Folgende Informationen wollte ich aus dem Part abgreifen: In der Routingstückliste werden die Informationen "weight" + "length" wie Attribute abgefragt. Routing Characteristics WEIGHT = 13.000000 Objektmerkmale LENGTH = 1073.701661 WEIGHT_TEST = 4711 (Integer) Gruß Patric
------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 26. Sep. 2009 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Zitat: Original erstellt von master001: Ich vermute es liegt an der Deklarierung der Objekte und dass die Attribute in der Komponente gespeichert werden und nicht direkt auf dem Objekt.
Generell kann jedes NXObject Attribute haben. Wo die Attribute letztlich dranhängen, entscheidet wie beim interaktiven Arbeiten, so auch beim Programmieren, die Auswahl des (NX)Objekts. Auch ein Part kann als NXObject betrachtet werden. Wenn Part Attribute abgefragt werden sollen, wird einfach das Part als NXObject angegeben, z.B.: obj = Ctype(Session.Getsession.Parts.work, NXObject) Um festzustellen, an welchem Objekt String Attribute dran sind, anbei ein kleines Programm. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 27. Sep. 2009 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
hmmm Deine dll arbeitet merkwürdig... Ich bekomme unterschiedliche Inhalte angezeigt, wenn ich die Datei mit der Routingkomponente in eine Baugruppe packe und dann die dll ausprobiere, erhalte ich ein anderes Ergebnis, als wenn ich im Anschluss eine Routing Stückliste eingefügt habe und dann die dll ausführe. Auf das Attribut Length wird dann auch noch nicht angezeigt... Vielen Dank erstmal ! ! ! Ich muss mal schauen wie ich an das Ergebnis komme was ich mir letztendlich erhoffe ;-) Schönes Wochenende Gruß Patric ------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 28. Sep. 2009 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Da ist absolut nichts merkwürdiges dran. Wenn andere Daten (mit anderen Objekten und damit anderen Attributen) verarbeitet werden, ist doch klar, daß auch ein anderes Ergebnis zustande kommt, oder nicht ? Merkwürdig finde ich dagegen die Zuordnung der Attribute: Die hängen teils an Routing- Elementen, teils am Part, teils an einer Komponente. Ist das so beabsichtigt ? Daß die Länge nicht angezeigt wird, ist einfach zu erklären: Das Attribut, das zu einem Routing Stock gehört, ist vom Typ Real. Abgefragt wurden in der ersten Version nur String Attribute. Anbei erweiterte Version mit der Abfrage von Real Attributen. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 20. Okt. 2009 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Moin Michael, sorry, dass ich erst jetzt antworte, ab und an muss ich ja bei meiner Projektarbeit hier auch voran kommen ;-) Punkt 1 --> ich hab jetzt endlich mal etwas besseres als den Text-Editor Punkt 2 bekomm den Zugriff auf die Stockattribute leider immernoch nicht hin. Die Attribut sind so verschieden zugeordnet, weil ich ein bisschen gespielt habe. Unteranderen wollte ich auch aus Testzwecken mal ein Attribut auf einen Body schreiben (das hat ja auch geklappt) nur verstehe ich nicht, dass wenn ich direkt im Anschluss versuche das Attribut zu lesen warum das Attribut dann nicht gefunden wird :-( ich muss den Zugriff auch, zur Zeit, noch in NX4 hinbekommen. Die NX5 hab ich nur auf meiner MA-Lizenz@Home Gruß Patric ------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 20. Okt. 2009 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Hallo Patric, gratuliere zu Punkt 1. Was ist es denn geworden ? Mädchen oder Junge ? Zu P2: Hast Du schon mal interaktiv geprüft, ob das Atribut tatsächlich dort (an dem gewünschten NXObject) sitzt, wo Du es haben willst ? Falls ja, muß es sich auch wieder auslesen lassen. NX4 macht hier kein Problem. Der Zugriff auf Attribute ist in 4 & 5 identisch. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 20. Okt. 2009 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Moin Michael, ich hab VB-Express also wenn ich per Hand die Informationen der Aufmass abfrage, wird das gewünschte Attribut angezeigt. bd.SetAttribute(bd_attr_info.Title, 4711) bd.GetIntegerAttribute(bd_attr_info.Title) (ich hab inzwischen alle Varianten getestet: GetIntegerAttribute GetRealAttribute GetStringAttribute leider ohne Erfolg... ich bin jetzt soweit, das ich das Gewicht auslese und dann folgenden eintrag in meinem Infofenster erhalte: ------------------------------------------------------------ GEWICHT = 2119.000000 (Floating Pt) Was ist eigentlich Floating Pt??? Gruß Patric
------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005 Win 10 UG NX 12
|
erstellt am: 20. Okt. 2009 17:00 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
|
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 20. Okt. 2009 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Hallo Patric, Zitat: ich hab VB-Express
Na dann willkommen im Club... Floating Pt entspricht einem Real- Attribut, also einer Gleitkommazahl. Bei den Routing- Attributen fragst Du wahrscheinlich nur die falschen NXObjekte ab. Hier macht es programmseitig keinen Unterschied, ob Du Bodies, Routing- Objekte oder irgend was anderes abfragst. Über DisplayObjectsDetails (das entspricht dem interaktiven Information-> Object) läßt sich das aktuelle Objekt ganz einfach kontrollieren. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 21. Okt. 2009 08:03 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Moin Michael, also jetzt wird mir für jedes Objekt das Informationsfenster angezeigt mit allen Attributen, aber wie kann ich das einzele attribut abfragen? ich wollte ja nicht erst das informationsfenster in einen String einlesen um dann darin nach den Attributen zu suchen..? Gruß Patric ------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 21. Okt. 2009 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Patric, DisplayObjectsDetails ist zur Kontrolle des aktuellen Objekts gedacht, nicht zum Ermitteln der Attribute. Sprich: Du hast, woher auch immer, das hast Du mir bislang leider nicht verraten, ein NXObject. Dieses NXObject kann über get*attribute nach seinen Attributen gefragt werden. Wenn nun die "falschen" Attribute angezeigt werden, kann das selbe NXObject mit DisplayObjectsDetails kontrolliert werden. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 21. Okt. 2009 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
Hm das mit dem Kontrollieren hab ich noch nicht verstanden ... aber ich bin auch schon einen Schritt weiter gekommen und zwar sind die Routing Attribute mit myStockData.GetRealCharacteristic("WEIGHT") abfragtbar. Die Schleife läuft zur Zeit noch über alle Volumenkörper und die Length bekomme ich auch noch nicht zu greifen. (Siehe Postkasten) Dim length As Double Dim obj_route As Routing.Stock For Each obj_route In s.Parts.Work.RouteManager.Stocks() lw.WriteLine("Found stock object") Dim myStockData As Routing.StockData = obj_route.GetStockData() length = myStockData.GetRealCharacteristic("WEIGHT") lw.WriteLine("Attribute WEIGHT: " & Runden(length, 2)) Try myStockData.*** .AskSegmentLength() <<- vielleicht damit?? lw.WriteLine("Attribute LENGTH: " & Runden(length, 2)) Catch ex2 As Exception lw.WriteLine("+++Error: " & ex2.ToString()) End Try Next Gruß Patric ------------------ Internet: http://www.imtech.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Mechatroniker (m/w/d) | KORSCH entwickelt und baut seit über 100 Jahren ausschließlich Hightech-Tablettiermaschinen. Als expandierender Mittelständler gehören wir zu den Großen der Branche. Unsere Maschinen "Made in Berlin" machen weltweit Millionen Menschen das Leben deutlich einfacher. Bekannte Unternehmen aus der Pharmabranche und der Industrie produzieren mit unseren Maschinen nicht nur Tabletten ... | Anzeige ansehen | Mechatronik |
|
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2624 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-1980 3D Printer Prusa MK2 S
|
erstellt am: 22. Okt. 2009 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für JoeG
|