| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
| Der INNEO Führungskreis stellt sich für die Zukunft neu auf, eine Pressemitteilung
|
Autor
|
Thema: Bg/Teil durch SysId identifizieren und Name anzeigen (2738 mal gelesen)
|
Benutzer1 Mitglied
Beiträge: 6 Registriert: 11.04.2005 Creo Elements/Direct Modeling (x64) V17.0, Creo Elements/Direct Model Manager V17.0, Windows Vista Business SP2, Intel Xeon E5450 3 GHz, 16 GB RAM NVidia Quadro FX 1700
|
erstellt am: 22. Sep. 2011 09:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich (Lisp-Neuling) versuche mit folgendem Code eine Bg/Teil anhand der SysId zu identifizieren und dann den Name anzuzeigen: Code:
(in-package :custom) (use-package :OLI)(sd-defdialog 'Name_zu_SysId_anzeigen :Dialog-title "Name_zu_SysId_anzeigen" :variables '((SysId :value-type :string :modifies :nil :title "SysId" :initial-value "906564-1316415319-1f2901d9d4-0 3767040" rompt-text "Sys-Id eingeben" )) k-action '(display (format nil "Name = ~A" (sd-sysid-to-obj SysId))) ; Name anzeigen )
Es wird nicht der Name angezeigt, sonder folgendes: Name = (#S(SEL_ITEM PATH (#S(NPARCEL SIMPLE-ENTITY-PTR 123104432) #S(NPARCEL SIMPLE-ENTITY-PTR 2618072848) #S(NPARCEL SIMPLE-ENTITY-PTR 1455213920)) TYPE 123591936 ITEM #S(NASMB3 SIMPLE-ENTITY-PTR 1455213920)))
Hat jemand Zeit und Lust sich mal anzuschauen wo's klemmt? Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000
|
erstellt am: 22. Sep. 2011 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für Benutzer1
Zitat: Original erstellt von Benutzer1: ...ich (Lisp-Neuling) ....
Na da gibts dann ja einiges zu erklären. Wenn von OBJECTs die Rede ist, ist immer die Struktur SEL_ITEM gemeint. Das ist sozusagen der eindeutige Anker, an dem sich die unterschiedlichsten Funktionen festmachen können, bzw. mit dem ein Objekt zur weiteren Verarbeitung übergeben werden kann. Das ist dann auch das, was du da als "gallischer Fluch" herausbekommen hast. Im Unterschied zur SYS_ID sind SEL_ITEMs sozusagen "flüchtig" und existieren nur solange das betreffende Objekt im Arbeitsraum verfügbar ist . Hilfe dazu gibts im Abschnitt "Object Inquiries" im IKit, für deinen Fall empfehle ich Code: (display (format nil "Name = ~A" (sd-inq-obj-basename (sd-sysid-to-obj SysId))))
------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien Walter DC4 Technisches Büro GmbH Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Benutzer1 Mitglied
Beiträge: 6 Registriert: 11.04.2005 Creo Elements/Direct Modeling (x64) V17.0, Creo Elements/Direct Model Manager V17.0, Windows Vista Business SP2, Intel Xeon E5450 3 GHz, 16 GB RAM NVidia Quadro FX 1700
|
erstellt am: 22. Sep. 2011 11:12 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnelle Antwort. Den Abschnitt im IKit muss ich mir noch anschauen, die Empfehlung hab ich aber gleich mal ausprobiert. Der Code liefert mir jetzt eine Fehlermeldung. LISP-Fehler: (#S(SEL_ITEM PATH (#S(NPARCEL SIMPLE-ENTITY-PTR 123104432) #S(NPARCEL SIMPLE-ENTITY-PTR 2618072848) #S(NPARCEL SIMPLE-ENTITY-PTR 1455213920)) TYPE ...)) is not a structure Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Benutzer1 Mitglied
Beiträge: 6 Registriert: 11.04.2005 Creo Elements/Direct Modeling (x64) V17.0, Creo Elements/Direct Model Manager V17.0, Windows Vista Business SP2, Intel Xeon E5450 3 GHz, 16 GB RAM NVidia Quadro FX 1700
|
erstellt am: 23. Sep. 2011 08:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, hab' mir das empfohlene Kapitel im IKit durchgelesen. Hab's zwar nicht komplett durchschaut, verstehe jetzt aber warum es zum ersten Fehler kam. Jetzt ist mir aber immer noch unklar, warum ich im Moment die zuletzt erwähnte Fehlermeldung erhalte. Gibt es hier noch einen Logikfehler? Code:
(in-package :custom) (use-package :OLI) (sd-defdialog 'Name_zu_SysId :Dialog-title "Name_zu_SysId" :variables '((SysId :value-type :string :modifies :nil :title "SysId" :initial-value "906564-1316415319-1f2901d9d4-0 3767040" rompt-text "Sys-Id eingeben" )) k-action '(display (format nil "Name = ~A" (sd-inq-obj-basename (sd-sysid-to-obj SysId)))) )
Wäre nett, wenn sich nochmal jemand dazu äußern würde. Danke und Grüße nach Wien Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 659 Registriert: 20.11.2006
|
erstellt am: 23. Sep. 2011 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für Benutzer1
(sd-sysid-to-obj SysId) liefert eine Liste von Objekten, da von einer Sys-ID mehrere Versionen existieren können. (steht im Ikit unter sd-sysid-to-obj) Folglich musst du die Liste abarbeiten :ok-action '(dolist (obj (sd-sysid-to-obj SysId)) (display (format nil "Name = ~A" (sd-inq-obj-basename obj)))) oder das erste Objekt nehmen, wenn du sicher bist, dass nur eine Version existiert :ok-action '(display (format nil "Name = ~A" (sd-inq-obj-basename (first (sd-sysid-to-obj SysId))))) (Beides ungetestet)
EDIT: Das Verhalten von sd-sysid-to-obj ist abhängig von der eingesetzten Programmversion. Ab Version 17 wird {LIST of SEL_ITEMs} zurückgegeben, vorher nur {SEL_ITEM}. (siehe "What's new?" im Ikit der Version 17 - 1. General - 2. Unterpunkt) ------------------ Grüße aus Sachsen pw Karl Marx ist tot, Einstein ist tot, und mir ist auch schon ganz schlecht! [Diese Nachricht wurde von Patrick Weber am 23. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 23. Sep. 2011 08:57 <-- editieren / zitieren --> Unities abgeben: Nur für Benutzer1
Tja, wenn ich eine Antwort wüsste, hätte ich mich schon früher gemeldet. Laut IKit bringt (sd-sysid-to-obj) nur ein SEL_ITEM, wenn das Objekt auch im Arbeitsraum gefunden wurde, ansonsten NIL. Kann nur vermuten, dass es sich bei der eingegebenen SysId um ein nicht aktuell geladenes Teil handelt und trotzdem ein (ungültiges) SEL_ITEM zurückgeliefert wird ------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien Walter DC4 Technisches Büro GmbH Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000
|
erstellt am: 23. Sep. 2011 09:04 <-- editieren / zitieren --> Unities abgeben: Nur für Benutzer1
|
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 659 Registriert: 20.11.2006 Win11 Pro 23H2 Core i7-12700, 32GB RAM, Quadro P620 Creo Elements/Direct 19.0 M030 ModelManager 19.0 License Server 19.0 F000 clisp,VB.net,VBA,AHK,Python
|
erstellt am: 23. Sep. 2011 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für Benutzer1
Zitat: Original erstellt von Benutzer1: LISP-Fehler: (#S(SEL_ITEM PATH (#S(NPARCEL SIMPLE-ENTITY-PTR 123104432) #S(NPARCEL SIMPLE-ENTITY-PTR 2618072848) #S(NPARCEL SIMPLE-ENTITY-PTR 1455213920)) TYPE ...)) is not a structure [/i]
Dass es eine Liste ist, kann man schon durch Betrachten des Rückgabewertes erahnen "(#S(....))". EDIT: @Benutzer1: Bitte Sys-Info im Profil ausfüllen, sonst wissen wir nicht genau, mit welchen Programmversionen du unterwegs bist! ------------------ Grüße aus Sachsen pw Karl Marx ist tot, Einstein ist tot, und mir ist auch schon ganz schlecht! [Diese Nachricht wurde von Patrick Weber am 23. Sep. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Benutzer1 Mitglied
Beiträge: 6 Registriert: 11.04.2005 Creo Elements/Direct Modeling (x64) V17.0, Creo Elements/Direct Model Manager V17.0, Windows Vista Business SP2, Intel Xeon E5450 3 GHz, 16 GB RAM NVidia Quadro FX 1700
|
erstellt am: 23. Sep. 2011 11:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Patrick Weber, Zitat:
(sd-sysid-to-obj SysId) liefert eine Liste von Objekten, da von einer Sys-ID mehrere Versionen existieren können. (steht im Ikit unter sd-sysid-to-obj) Folglich musst du die Liste abarbeiten k-action '(dolist (obj (sd-sysid-to-obj SysId)) (display (format nil "Name = ~A" (sd-inq-obj-basename obj))))oder das erste Objekt nehmen k-action '(display (format nil "Name = ~A" (sd-inq-obj-basename (first (sd-sysid-to-obj SysId)))))
so funktioniert es wie gewünscht. Danke für die Hilfe. Grüße an alle aus dem (im Moment) sonnigen Baden-Württemberg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |