| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Partattribute mit Journal ? (9817 mal gelesen)
|
Konrad Mitglied
Beiträge: 53 Registriert: 02.05.2001 Version NX 5, NX 6, NX 7
|
erstellt am: 16. Mai. 2010 11:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, kann mir bitte jemand helfen? Ich möchte gerne mit "Journal" die Partattribute eines Modells auslesen und weiter verarbeiten. Dazu gibt es ja die Funktion UF_ATTR_ask_part_attrs_in_file Die gesamte Dokumentation in NXOpen gibt aber nur die Syntax für C++ her.... Wie müsste ich den Code unter Visual Basic anlegen um die Funktion zu nutzen? Hier die Doku zu C++: int UF_ATTR_ask_part_attrs_in_file ( const char * part_name int * n_attributes UF_ATTR_part_attr_p_t * attributes ) const char * part_name Input Part file name to read part attributes from or part name when using NX Manager (internal name). int * n_attributes Output Count of attributes returned. UF_ATTR_part_attr_p_t * attributes Output to be freed Allocated array of structures holding attribute titles and values. This must be freed by the caller using UF_free. Danke für ein kleines Schnipsel! mfg Konrad Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasZwatz Ehrenmitglied V.I.P. h.c. cadadmin
Beiträge: 5397 Registriert: 19.05.2000
|
erstellt am: 16. Mai. 2010 20:48 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
|
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: 17. Mai. 2010 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Hallo Konrad, einfacher als mit UF_ATTR* können Attribute aus einem NXObject gelesen werden. Auch das WorkPart ist aus der Klasse NXObject abgeleitet und bietet damit die Möglichkeit, direkt auf Attribute zuzugreifen. Mal angenommen, Du hast das Workpart als Code: Dim wp as Part = Session.Getsession.Parts.work
definiert, geht der Zugriff auf die Attribute enweder einzeln mit Code: Dim a1 as String = wp.getstringattribute("Titel des Attributs")
oder auf alle Attribute: Code: Dim ai() As NXObject.AttributeInformation = part.GetAttributeTitlesByType(NXObject.AttributeType.Any)
Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Konrad Mitglied
Beiträge: 53 Registriert: 02.05.2001 Version NX 5, NX 6, NX 7
|
erstellt am: 17. Mai. 2010 14:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, hallo Thomas, herzlichen Dank erst mal für eure Hilfe! In der Zwischenzeit bin ich auch schon ein großes Stück weitergekommen: Dim thePartAttr As NXOpen.Tag = NXOpen.Tag.Null ufs.Attr.AskPartAttribute(thePartAttr) If thePartAttr <> Tag.Null Then Dim type As Int32 = UFConstants.UF_ATTR_any Dim title As String = "Example" Dim realtype As Int32 Dim value As String Dim thepart As Part = s.Parts.Work Dim count as integer '---------- ufs.Attr.CountAttributes(thePartAttr, type, count) msgbox(count) '---------- ufs.Attr.FindAttribute(thePartAttr, type, title, realtype) If realtype <> 0 Then theUI.NXMessageBox.Show("Attribute " + title, NXMessageBox.DialogType.Information, "Attribute " + title + " Exists") If realtype = UFConstants.UF_ATTR_string Then value = thepart.GetStringAttribute(title) theUI.NXMessageBox.Show("Attribute " + title, NXMessageBox.DialogType.Information, "Value of " + title + " Attribute is " + value) End If Else theUI.NXMessageBox.Show("Attribute " + title, NXMessageBox.DialogType.Information, "Attribute " + title + " Does Not Exist") thepart.SetAttribute(title, "Example Value") End If End If Damit kann ich nun die Anzahl der vergebenen Attribute ermitteln und gezielt nach einem Attribut suchen, dessen Namen ich kenne.... Attribute neu erstellen oder vorhandene Attribute mit neuem Wert belegen ist ja kein Thema (das beherrscht ja sogar der Journalrecorder) Die Lösung für mein Problem wäre nun, wenn ich für die vorhandenen Attribute nun noch die Namen ausgeben bzw. in ein Array schreiben könnte... Habt ihr irgend eine Idee, wie die Namen auflisten kann? Danke für jeden Tip! mfg Konrad
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: 17. Mai. 2010 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Hallo Konrad, wer lesen kann, hat Vorteile Oder siehst Du den Wald vor lauter Bäumen nicht ? Die Antwort steht nämlich schon oben: Mit *.GetAttributeTitlesByType(NXObject.AttributeType.Any) kriegst Du alle Attribute eines NXObjects in ein Array geschrieben. Jedes Element davon ist eine Struktur (vom Typ NXObject.AttributeInformation), die Titel und Typ des Attributs enthält. Gruß, Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Konrad Mitglied
Beiträge: 53 Registriert: 02.05.2001 Version NX 5, NX 6, NX 7
|
erstellt am: 19. Mai. 2010 17:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, erst mal vielen, vielen Dank für Deinen Tip! Ich war bloß die letzten beiden Tage zu beschäftigen um zu antworten :-) Hier noch für alle Interessierte ein kleines Schnipsel zum Auslesen der Attributnamen (größeren Ausschnitt auf Nachfrage :-): Dim ai() As NXObject.AttributeInformation = thepart.GetAttributeTitlesByType(NXObject.AttributeType.Any) Dim att_value As String Dim i As Integer Dim name As String Dim att_memory(count, 2) As String For i = 0 To count - 1 name = ai(i).Title att_memory(i, 1) = ai(i).Title att_memory(i, 2) = thepart.GetStringAttribute(name) Next Mein Journal funzt jetzt schon fast perfekt! (Ich geh von der Spezifikation aus, bring eine Eingabemaske für die obligatorischen Attribute im Modell an den Bildschirm, schreib diese Attribute ins Modell und in die Spezifikation, aktualisiere die Spezifikation, exportiere dann aus der Spezifikation die Zeichnung(en) mit wählbarer Qualität ins PDF, hab dann UG und Ghostscript miteinander verheiratet und generiere aus dem PDF Image-Dateien (jpg, tif in versch. Typen und wählbarer Auflösung, bmp, png etc. (was halt der open-source von ghostscript hergibt) und steuere die Filenamen über den Dateinamen des Modells und die hinterlegte Revision (DB-Part-Rev)(incl. Pfad). Der nächste Schritt ist nun noch, die lokale Druckerlandschaft einzubeziehen und auch die Druckerzuweisung anhand der Blattgröße vorzunehmen und den Papierausdruck anzubieten...
Damit bin ich sehr nah am "One-Click-Archiv" Eine Frage habe ich aber noch: Gerne möchte ich das Ganze noch über Visual Studio Express 2008 (VB.net) umschreiben, dekorativer gestalten und compilieren. Du hast Dich ja vor 3 Jahren auch erst mühsam mit VS in Verbindung mit UG vertraut machen müssen (Hab gerade Deinen Beitrag zum Compilieren gefunden). (Ich bin auch nur gelernter Werkzeugmacher, hab vor 25 Jahren eine Ausbildung zum Meister gemacht und dann manchem CAD-Experten das Fürchten gelehrt :-) ) Gibt es inzwischen eine deutlichere Anleitung zur Signierung für eine auf VS2008-Express erstellten Anwendung? Ich bleib erst mal selber dran, würde mich aber sehr über einen Tip freuen! PS: falls Du Interesse an der Anbindung zu ghostscript hast, mach doch einfach hier ein Thema mit PDF2TIF auf! (Ich würde gerne dem komerziellen Anbieter "verypdf" eins auswischen. Diese Truppe bietet Schrott als Download an, fordert für eine Lizenz horrende Preise und antwortet dann nicht mehr, wenn man ihnen die Fehler schildert! (Deswegen habe ich dann 2 Tage investiert und Open-Source-Code verwendet) Vielen Dank noch mal! mfg Konrad Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jan Boettcher Mitglied
Beiträge: 183 Registriert: 22.06.2005
|
erstellt am: 20. Mai. 2010 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
|
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. Mai. 2010 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Zitat: Original erstellt von Konrad:
Gibt es inzwischen eine deutlichere Anleitung zur Signierung für eine auf VS2008-Express erstellten Anwendung?
Hallo Konrad, in den neueren Versionen (6 & 7) ist die Doku zu .NET generell deutlich umfangreicher. Ob auch das Thema Signatur überarbeitet wurde, kann ich nur vermuten. Mal reinschauen kann jedenfalls nicht schaden. Letztlich ist das Signieren, vorausgesetzt man hat eine IDE und die Autoren- Lizenz, eine relativ einfache Sache: Zuerst wird die NXSigningResource.res (in %UGII_BASE_DIR\UGOPEN zu finden) der IDE bekannt gemacht. In VS in den Projekteigenschaften unter Resources eintragen, Add Resource -> Add existing File. Dann wird die Anwendung erstellt, das Einbinden der NXSigningResource übernimmt dabei die IDE. Alternativ kann der Compiler mit der Option /resource auch manuell gestarted werden, ist aber aufwendiger. Die jetzt vorliegende dll oder exe wird im letzten Schritt durch Aufruf der SignLibrary.exe signiert. Das sollte in einer NX Shell geschehen, wegen der Umgebung. Ins Verzeichnis gehen, in dem die dll/exe liegt und SignLibrary <prog_name> starten. SignLibrary gibt jetzt eine Erfolgs- oder Fehlermeldung aus. Damit ist das Programm fertig und kann eingesetzt werden. Zur Laufzeit wird nun seitens NX geprüft, ob die Signatur korrekt ist. Nicht- oder fehlerhaft signierte Programme laufen nur, wenn eine Autorenlizenz gefunden wird. Ist die Signatur bzw. Lizenz ok, kann's jetzt noch passieren, daß die referenzierten Libraries (NXOpen.dll ...) nicht gefunden werden. Einfachste, aber unschöne Lösung: Die NXOpen- Libraries und weitere Referenzen, falls vorhanden in das Verzeichnis des Programms kopieren. Eleganter, aber aufwendiger ist ein sog. Resolver oder die Installation im Assembly Cache, aber das würde jetzt zu weit führen. Was Deinen Ärger über fehlerhafte Software betrifft, kann ich, gerade wo das Kind schon im Brunnen liegt, leider nicht helfen. Außer mit dem Hinweis, daß es auch Anbieter gibt, die mehr Wert auf Qualität und zufriedene Kunden legen, als auf den (kurzfristigen) kommerziellen Erfolg. Bevor das jetzt als Werbung aufgefasst wird und weil's auch an einem verregneten Tag noch was anderes zu tun gibt, lassen wir's hier mal gut sein. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasZwatz Ehrenmitglied V.I.P. h.c. cadadmin
Beiträge: 5397 Registriert: 19.05.2000
|
erstellt am: 20. Mai. 2010 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Ich hab wo gelesen daß man das Signen auch als PostBuild Action durch die IDE (zB VS2005) machen lassen kann. Weiss jemand wie das geht ? Gestartet wird VS eh aus einem NX CommandPrompt. Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jan Boettcher Mitglied
Beiträge: 183 Registriert: 22.06.2005 NX 7.5 - NX 2007 SolidWorks 2006 - 2021 Win 10
|
erstellt am: 20. Mai. 2010 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Hallo Thomas, Ich hab jetzt grad kein Visual Studio da und es bisher auch nur für c# gemacht, aber unter den Projekteigenschaften gibt es einen Tab für die Build Events und dort kann man beliebige Kommandos eingeben. Es stehen Platzhalter für die verschiedenen Datei- und Pfadnamen zur Verfügung, so dass man dort den Aufruf des Signiertools starten kann. Alternativ kann man es auch per Hand in die Projektdatei eingeben. Hier mal der entsprechende Abschnitt (mit einem allgemeinen Beispiel): Code: <PropertyGroup> <PostBuildEvent>copy /Y $(TargetPath) D:\work\omux\omuxNx\omuxNX\test_install\startup</PostBuildEvent> <PreBuildEvent> </PreBuildEvent> </PropertyGroup>
Batchdateien müssen mit call aufgerufen werden. Ich lasse es allerdings inzwischen. Das spart Zeit bei der Entwicklung. Man darf es dann halt nur vor dem Ausrollen nicht vergessen. Gruß Jan
------------------ Jan Böttcher www.ib-boettcher.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. Mai. 2010 10:43 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Hallo Thomas, hallo Jan, ich seh' das genauso wie Jan: Manuelles Signieren macht jetzt nicht sooo viel Arbeit, daß sich das Einrichten eines PostBuildEvents lohnt. Daneben bin ich nicht sicher, ob Du beim PostBuildEvent auch die Ausgabe von signlibrary zu sehen bekommst. Eleganter wär's zwar ... Gruß und schöne, hoffentlich etwas wärmere Feiertage, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Konrad Mitglied
Beiträge: 53 Registriert: 02.05.2001 Version NX 5, NX 6, NX 7
|
erstellt am: 21. Mai. 2010 19:09 <-- editieren / zitieren --> Unities abgeben:
Hallo an alle, war gerade sehr beschäftigt und konnte mich in die rege Diskussion leider nicht einschalten ... Also der Hinweis von Michael zur Signierung hat mir sehr weitergeholfen und es hat auch sofort funktioniert. (Lediglich mit der "NXShell" hatte ich anfänglich Probleme, hab dann einfach den ganzen Pfad zur C:\...\SignLibrary.exe am CommandPrompt eingegeben) So weit bis zur automatisierten Signierung will ich ja gar nicht gehen, ich mach ja nicht jeden Tag so was (dafür gibt's Gott sei Dank Fachleute). Allerdings komme ich noch einmal mit einer anderen Frage: Wenn ich jetzt so ein Script gar nicht erst compilieren, sondern als Journal (.vb) ausführen will, bin ich wieder an einen Punkt gestoßen: In Visual Basic Express 2008 teilt Microsoft den Code auf in eine Form.vb, Form.Designer.vb und eine Form.resx ... Ein Script als "Journal" braucht aber das Form-Design in der Journaldatei (verpackt in eine "Region") und kann offensichtlich nicht mit der Microsoft-Strategie seit VS 2005 ?? Wie macht ihr so etwas? Kann man VB Express dazu bringen, den gesamten Code beisammen zu halten oder muss man da manuell eingreifen und den Code zusammenschnipseln? Ich hoffe, ich geh euch nicht auf den Wecker und freue mich auf einen Tip! mfg Konrad 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: 25. Mai. 2010 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Hallo Konrad, eine "NXShell" kriegst Du unter Start->Programme->NX*->Tools->Command Prompt. Was Journal mit Winform betrifft, kannst Du in VS eine Vorlage verwenden, die schon den Code des Form- Editors enthält. Einziger Schönheitsfehler: Beim Zufügen neuer Controls schreibt VS die Deklaration nicht zu den anderen Controls, sondern zu den globalen Variablen. Per Drag&Drop läßt sich das korrigieren, wenn's stört. Vorlagen mit Winform sind hier im Forum zu finden, such' mal nach "winform". Manuelles Editieren geht auch, ist aber etwas schwieriger. Dazu muss der Code des Formeditors (Partial Class xxx) in die (vollständige) Klasse xxx reingeschrieben werden, so daß am Ende eine sog. Single Source entsteht. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
imation1999 Mitglied dipl.-ing. Maschinenbau
Beiträge: 276 Registriert: 02.08.2011
|
erstellt am: 27. Apr. 2018 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Hallo Zusammen, könnt Ihr mir bitte sagen, wie kann man die alle Attribute unter NX11 auslesen?
Code: Dim ai() As NXObject.AttributeInformation = part.GetAttributeTitlesByType(NXObject.AttributeType.Any)
funktioniert leider nicht. Danke im Voraus! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Zeichner (m/w/d) | Die OVAG-Gruppe ist ein 100% kommunaler Unternehmensverbund mit umfassenden Dienstleitungen in den Bereichen Energie, Wasser und Verkehr. Tag für Tag setzen wir uns mit viel Leidenschaft und Engagement für die Zukunft unserer Region und die Energiewende ein. Möchten auch Sie Teil unseres rund 800-köpfigen Teams werden ? mit vielen Chancen zur persönlichen und beruflichen Weiterentwicklung? Wir freuen uns darauf, Sie kennenzulernen.... | Anzeige ansehen | Technischer Zeichner, Bauzeichner |
|
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: 27. Apr. 2018 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für Konrad
Ja, das ist inzwischen auch 8 Jahre her. Zwischenzeitlich hat sich beim Thema Attribute einiges geändert. Der wesentliche Unterschied: Es gibt neue Methoden, namentlich ähnlich den alten mit einem "USER" im Namen. Die Details verrät die Entwicklerumgebung. Gruß, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|