| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| Zertifizierte Datenverwaltung in der Medizintechnik, ein Anwenderbericht
|
Autor
|
Thema: load_package und ein Bezug auf die geladenen Teile (1253 mal gelesen)
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 04. Aug. 2008 10:02 <-- editieren / zitieren --> Unities abgeben:
Moin, wenn ich "load_package" mit dynamischen Positionieren (Modeller 2008) recorde, fällt auf, dass der Befehl im Anschluss die geladenen Teile selektiert hat. Wie macht man das in einem eigenen Lisp-Programm? Wenn ich z.B. eine Baugruppe lade, welche aus mehreren Parts besteht, ist ja nur eines davon Current_Part, doch wie komme ich an die anderen, um sie zu selektieren? Im Recorder sehe ich, dass entweder die Einzelzeile einer Datei oder die Baugruppe(n) einer Datei per Name selektiert werden. Load_package scheint aber keine Informationen über die geladene Struktur zurückzugeben und die bekannten inq-Befehle lassen einen möglichen Zugriff nicht direkt erahnen :-/ Hat jemand eine Idee? Gruß lisp_loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 04. Aug. 2008 10:27 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 05. Aug. 2008 08:45 <-- editieren / zitieren --> Unities abgeben:
Ich stelle mich wohl gerade mal wieder etwas ungeschickt an :-/ Sollte somit nicht ein (print (sd-call-cmds (load_package "test.pkg"))) den Stackbezug anzeigen?! Ich bekomme nur eine Fehlermeldung. Gruß lisp_loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 05. Aug. 2008 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 05. Aug. 2008 09:09 <-- editieren / zitieren --> Unities abgeben:
> Was meinst Du mit "Stackbezug"? Ich würde erwarten, dass der Befehl ein SEL_ITEM auf dem Stack hinterlässt, mit dem man weiterarbeiten kann. Und da print ja den Stackinhalt anzeigt, wollte ich mir so den Rückgabewert mal in Rohform anschauen. Oder habe ich dich da falsch verstanden? > Welche [Fehlermeldung]? "Unzulässiger Aufruf einer Aktionsroutine" Gruß lisp__loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 05. Aug. 2008 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
Zitat: Original erstellt von lisp-loser: Ich würde erwarten, dass der Befehl ein SEL_ITEM auf dem Stack hinterlässt, mit dem man weiterarbeiten kann. ...
Du hast also einen Rückgabewert erwartet, schon klar. Es kommt auch was zurück. Zitat:
"Unzulässiger Aufruf einer Aktionsroutine"
Doku lesen! Dort steht zu sd-call-cmds explizit: Zitat:
This macro can only be used in the context of a user action. Calling an Action Routine using this macro without a surrounding Action Routine will generate an error.
Claus ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/
[Diese Nachricht wurde von clausb am 05. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 05. Aug. 2008 15:21 <-- editieren / zitieren --> Unities abgeben:
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005 Varicad Linux 2019-1.03, Ubuntu 16.04
|
erstellt am: 05. Aug. 2008 17:24 <-- editieren / zitieren --> Unities abgeben:
Ähm, klappt fast :-) WAS gibt der mir eigentlich zurück? So sieht es aus (#S(SEL_ITEM ELAN::PATH (#S(ELAN::NPARCEL DSM::SIMPLE-ENTITY-PTR 76270912) #0=#S(ELAN::NASMB3 DSM::SIMPLE-ENTITY-PTR 608064816)) TYPE 76128256 ELAN::ITEM #0#)) und (setf my_parts (sd-call-cmds (load_package filename))) (pprint (sd-inq-obj-pathname my_parts))
sagt "... is not a structure"
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 05. Aug. 2008 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 06. Aug. 2008 09:11 <-- editieren / zitieren --> Unities abgeben:
> Den Rest findest Du nun selbst raus Vielen Dank für dein Vertrauen :-) Also habe ich eine Liste von Strukturen, die aber nur eine Struktur enthält, welche selbst aber wieder verschachtelt ist. Also hole ich mir meine Struktur mit CAR und prüfe, ob es immer nur die eine Oberstruktur gibt oder ich gar "cadr"n muss. [...] Also wenn ich ein PKG erzeuge, welche z.B. zwei BG enthält, bekomme ich eine Liste von zwei Strukturen. Also benötige ich eine Schleife über alle Strukturen bis die Liste leer ist. Jetzt stellt sich gleich die nächste Frage. Mein Ziel ist es, einer Dialog-Variablen (POSITIONING :position-part my_parts) zu übergeben. Dabei soll my_parts alle geladenen Teile und Baugruppe enthalten. Wie erzeuge ich jetzt eine Selektion _aller_ Teile, die ich :position-part übergeben kann? Ein Liste von Strukturen funktioniert ja nicht. Fragt sich lisp-loser [Diese Nachricht wurde von lisp-loser am 06. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005 Varicad Linux 2019-1.03, Ubuntu 16.04
|
erstellt am: 06. Aug. 2008 09:18 <-- editieren / zitieren --> Unities abgeben:
Noch ein Nachtrag: Wenn ich die Load-Package-Routine recorde, sehe ich sowas :objects-by-selection :objects-to-move :start "/B1" "/B2" :select_done Das kann ich dem POSITIONING schon zuordnen, weiß aber nicht wie ich es selbst erzeugen kann :-/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 06. Aug. 2008 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
Zitat: Original erstellt von lisp-loser: Also habe ich eine Liste von Strukturen, die aber nur eine Struktur enthält, welche selbst aber wieder verschachtelt ist. Also hole ich mir meine Struktur mit CAR und prüfe, ob es immer nur die eine Oberstruktur gibt oder ich gar "cadr"n muss.
Nein nein, viel zu kompliziert! Das ist einfach eine Liste von SEL_ITEMs. Zitat:
Wie erzeuge ich jetzt eine Selektion _aller_ Teile, die ich osition-part übergeben kann? Ein Liste von Strukturen funktioniert ja nicht.
Du hast schon eine Liste von SEL_ITEMs in der Hand. Also genau das, was Du für eine Mehrfachselektion im allgemeinen brauchst. Claus
------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 06. Aug. 2008 12:33 <-- editieren / zitieren --> Unities abgeben:
Aber wenn ich genau diese Liste von SEL_ITEMs also (setf my_parts (sd-call-cmds (load_package filename))) und später im Dialog (POSITIONING :position-part my_parts) verwende, dann kommt genau dieses "... is not a structure" (POSITIONING :position-part (car my_parts)) funtioniert, selektiert aber nur die erste Baugruppe oder das erste Teil. Genau dieses führte zum Beitrag oben "klappt, aber..." Gruß lisp-loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 06. Aug. 2008 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
Zitat: Original erstellt von lisp-loser: Aber wenn ich genau diese Liste von SEL_ITEMs also (setf my_parts (sd-call-cmds (load_package filename))) und später im Dialog (POSITIONING :Position-part my_parts) verwende, dann kommt genau dieses "... is not a structure"
Nun, dann akzeptiert die Option :Position-part hier eben nur ein Teil (SEL_ITEM). Die Fehlermeldung sagt Dir, dass eine Struktur (hier: SEL_ITEM) erwartet wurde, stattdessen kam eine Liste von SEL_ITEMs an. Beispiel für eine Kommandosequenz, die mehrere Teile bewegt:
Code:
(pos_dynamic :Objects-to-move :start "/p1" "/p2" :select_done :current-direction 1,1,0 31)
Claus ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/
[Diese Nachricht wurde von clausb am 06. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 06. Aug. 2008 15:11 <-- editieren / zitieren --> Unities abgeben:
Erst nochmal vorweg ein Dankeschön für deine Unterstützung. Ich mache meinem Nickname wohl wieder alle Ehre. Mit pos_dynamic bin ich ja eigentlich wieder beim Thema meines zweiten Threads. Dort steht mein Halbwissen derart, dass ich pos_dynamic nur mit sd-call-cmds aufrufen kann, sd-call-cmds benötigt aber eine action somit einen Dialog. Andererseits habe ich gelernt , dass :position_part genau dieses Positionierungsmenü im Dialog unterstützen sollte, wie sich jetzt aber herausstellt nicht mit mehreren Teilen oder Baugruppen. Nun schaffe ich es aber nicht z.B. mit einem Dialog :variables '((POSITION :push-action '(posi))) :local-functions (posi () (sd-call-cmds (pos_dynamic :objects-by-selection :objects-to-move :start "/T1" "/T2" :select_done :dyn-pos-method :on ) ) ) bei Verwendung von pos_dynamic den Subdialog DYNAMO aufzurufen, sprich wie bekomme ich mit deiner pos_dynamic-Zeile von oben die Auswahl am sichtbaren CoPiloten? Gruß lisp-loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005 Varicad Linux 2019-1.03, Ubuntu 16.04
|
erstellt am: 06. Aug. 2008 16:35 <-- editieren / zitieren --> Unities abgeben:
Also, der Dialog von "pos_dynamic" erscheint nur, wenn er aus einer Funktion aufgerufen wurde. Wurde er aus einem Dialog heraus aufgerufen, so muss ich diesen Hauptdialog schließen, damit das Positionierungsfenster erscheint. Kann ich "pos_dynamic" auch mit einer Option so aufrufen, dass er als subaction ausgeführt wird? Ich darf meinen Hauptdialog an dieser Stelle noch nicht schließen. Ich brauche den Hauptdialog, weil ich sonst nicht an die Namen der geladenen Teile herankomme. Schwierig! Gruß lisp-loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 06. Aug. 2008 17:59 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
|