| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| SF INSPECT 3D , eine App
|
Autor
|
Thema: POS_DYNAMIC zeigt keinen Dialog (1194 mal gelesen)
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 31. Jul. 2008 13:40 <-- editieren / zitieren --> Unities abgeben:
Aloha, die Sonne brennt, das Hirn schmilzt und ein neues Problem stellt sich der Person vor der Tastatur :-) Die Aufgabe: Ein Befehl, der ein benanntes PKG-File in ein neues Fenster läd, den Copiloten aufruft, der die Positionierung ermöglicht und anschließend das Fenster wieder schließt. Der Schnellschuss:
Code:
(defun COMMON-LISP-USER::MY_LOADPKG (create_vp :corner_1 (make-gpnt2d :x 0 :y 0) :corner_2 (make-gpnt2d :x 600 :y 600) :name "Positionieren" ) (load-cluster-load-mode :LOAD-DUP-AS-NEW) (load_package "x:/test.pkg") (POS_DYNAMIC) (when (sd-inq-vp-exists-p "Positionieren") (delete_vp "Positionieren") ) )
Problem: Der Code läuft durch. Fenster auf, Teil wird geladen, Fenster zu und kein Copilot in Sicht. Wo ist mein Denkfehler? 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: 31. Jul. 2008 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 31. Jul. 2008 13:54 <-- editieren / zitieren --> Unities abgeben:
|
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: 31. Jul. 2008 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
|
lisp-loser Mitglied Ingenieur
Beiträge: 33 Registriert: 09.09.2005
|
erstellt am: 31. Jul. 2008 19:06 <-- editieren / zitieren --> Unities abgeben:
Ok, dann müsste ich meine Fenster-Löschbefehle am Ende der Funktion entfernen und dort ein (sd-call-dialog "MY-POS_DYNAMIC") einfügen. Dieser Dialog müsste dann POS_DYNAMIC z.B. als Pushbutton aufrufen und wenn ich fertig mit Positionieren bin, mit Klick auf OK mein Fenster löschen. Das muss doch eleganter gehen! (zumal ich nicht glaube, dass wenn ein Dialog geöffnet ist, ein anderer sich daneben öffnen kann)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Markus Kuehl Mitglied
Beiträge: 165 Registriert: 22.06.2001
|
erstellt am: 01. Aug. 2008 08:00 <-- editieren / zitieren --> Unities abgeben: Nur für lisp-loser
Hallo, wenn Du darauf verzichten kannst, den Viewport nach dem Positionieren zu loeschen, dann kann Du als letzte Zeile von Deiner Funktion folgendes schreiben: (oli:sd-put-buffer "pos_dynamic"). Damit landest Du im CoPiloten. Nach dem Positionieren bleibt allerdings Dein neuer Viewport stehen und muss per Hand geloescht werden. Eine ideale Loesung ist wesentlich aufwendiger und dazu muesstest Du einen sd-defdialog schreiben mit einer position-part Variablen (etc.). Gruss, Markus 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: 01. Aug. 2008 08:55 <-- editieren / zitieren --> Unities abgeben:
@Markus Kuehl: danke für den Hinweis. sd-put-buffer und sd-call-dialog scheinen in ihrer Wirkung gleichwertig zu sein. Eigentlich wäre ich schon an der idealen Lösung interessiert, allerdings gestaltet sich die Suche nach dem "wie" als schwierig. "position-part" ist wieder so ein Stichwort, wo ich dann gleich mal versuche, was drüber zu finden :-) @all: Ich werfe aber mal noch zwei andere Gedanken ein und stelle die Frage, ob sowas funktionieren könnte: Gibt es sowas wie Call-Back oder Buche-Event Funktionen? Also, man schreibt die Fensterlösch-Funktion und sagt, wenn das Event "CoPilot-Dialog wurde gelöscht" kommt, dann führe meine Funktion aus. In der Online-Referenz steht, dass POS_DYNAMIC eine "terminate" Action ist und einen "sequential dialog" hat: Genaues Zitat: " 1. Input (CALL-DYNAMO) :value-type :STRING calls subaction DYNAMO" Wenn ich mir die Doku zum sd-def-dialog anschaue (4.2.3), kommt dir der Gedanke, dass man einen sequential Dialog doch an einen bestehenden Dialog anheften könnte . Bisherige Versuche führten allerdings noch zu keiner Lösung. Ich bin weiter an Feedback interessiert :-) Viele Grüße 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
|
erstellt am: 01. Aug. 2008 12:21 <-- editieren / zitieren --> Unities abgeben:
here we go: (in-package :custom) (use-package :OLI) ( sd-defdialog 'MY-LOADPKG-DIALOG :dialog-title "Paket laden" :variables '( (Positionieren :value-type :list :title "Position" :subaction-name DYNAMO ) ) :ok-action '(cleaning) :local-functions '( (cleaning () (when (sd-inq-vp-exists-p "Positionieren") (delete_vp "Positionieren") ) ) ) ) (defun COMMON-LISP-USER::MY_LOADPKG (create_vp :corner_1 (make-gpnt2d :x 0 :y 0) :corner_2 (make-gpnt2d :x 600 :y 600) :name "Positionieren" ) (load-cluster-load-mode :LOAD-DUP-AS-NEW) (load_package "x:/test.pkg") (sd-call-dialog 'MY-LOADPKG-DIALOG) ) So, jetzt muss ich mal sehen, wie ich die Teile aus dem PKG-File vorselektiere und dem Dynamo übergebe. Bye 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: 01. Aug. 2008 15:28 <-- editieren / zitieren --> Unities abgeben:
Bevor es ins Wochenende geht, noch etwas Input. In der Zwischenzeit bin ich in der Doku auf Kapitel "4.1.6.3 Positioning Parts and Workplanes" gestoßen, was wohl der Realisierung des PKG-Lade-Befehls im Modeller 2008 entspricht. Durch Definition der Dialog-Variablen POSITIONING osition-part a_part wird der Copilot aufgerufen ohne dass irgendwelche DYNAMO-Tricks notwendig sind. Allerdings reagiert das Teil doch recht empfindlich auf Sel_Items, die nicht einem einzelnen Part entsprechen. Da ist der PKG-Load-Befehl unempfindlich. Da wird alles positioniert, was gerade geladen wurde. Hat schon mal jemand mit osition-part ähnlichs programmiert, so dass ich davon was lernen könnte? Schönes Wochenende lisp-loser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |