| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
Autor
|
Thema: On/Off Befehl (4217 mal gelesen)
|
Extruder Mitglied R&D
Beiträge: 58 Registriert: 15.03.2006 CoCreate OneSpace Designer Modelling 2004 12.01C 26-Mar-2004
|
erstellt am: 13. Mrz. 2008 13:22 <-- editieren / zitieren --> Unities abgeben:
Wie schreibe ich einen kurzen Lisp Befehl der mir die Vorgabe: set_vp_model_clipping "1" ff und set_vp_model_clipping "1" n je nach Zustand hin und herschaltet? Mit einzelnenBefehlen krieg ichs hin, aber EIN Button wäre halt prima Danke im Vorraus, Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2143 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.4, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook 17 G4, Windows 10 Pro 64
|
erstellt am: 13. Mrz. 2008 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
Extruder Mitglied R&D
Beiträge: 58 Registriert: 15.03.2006 CoCreate OneSpace Designer Modelling 2004 12.01C 26-Mar-2004
|
erstellt am: 13. Mrz. 2008 13:40 <-- editieren / zitieren --> Unities abgeben:
|
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2017 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 13. Mrz. 2008 20:53 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
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: 13. Mrz. 2008 22:12 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat:
Code: set_vp_model_clipping "1" (lisp::if (oli::sd-inq-vp-model-clipping-enabled-p "1") :OFF :ON)
Stilistischer Hinweis: Sowas wie "lisp::if" ist unsinnig. Zwei Gründe:
- "if" ist im Kern von Common Lisp enthalten und aus jedem Package erreichbar, muss also nie durch die Angabe des Packagenamens qualifiziert werden.
- Es sei denn freilich, man hätte in einem anderen Package ein eigenes "if" implementiert. Das wäre allerdings arg schlechter Stil - und selbst dann reicht zur Unterscheidung immer noch ein einzelner Doppelpunkt (also "lisp:if"), da das im Package "lisp" definierte "if" explizit exportiert wird.
Auch "oli::sd-inq-vp-model-clipping-enabled-p" schreibt man daher korrekter "oli:sd-inq-vp-model-clipping-enabled-p". Zum Thema Packages in Lisp empfehle ich allerwärmstens http://www.flownet.com/ron/packages.pdf Claus ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/
[Diese Nachricht wurde von clausb am 13. Mrz. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
highway45 Moderator Bastler mit Diplom
Beiträge: 6331 Registriert: 14.12.2004 SolidDesigner-20.5.1 + PhoenixPDM-11 + Solidworks-2022 + PE8
|
erstellt am: 14. Mrz. 2008 08:15 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Der Umschalter von Andreas funktioniert. Jetzt hab ich mir auch mal so etwas gebastelt, aber der funktioniert wohl nicht korrekt: Umschalten: VP perspektive <-> parallel Code: set_vp_view_mode (oli:sd-inq-current-vp) (lisp:if (oli:sd-inq-vp-model-clipping-enabled-p (oli:sd-inq-current-vp)) :parallel :perspective)
Der schaltet zwar in beide Richtungen aber nur immer einmal. Ich kann über die normale Funktion das Fenster auf Perspektiv (bzw. Parallel) stellen, dann schaltet der Knopf auf Parallel (bzw. Perspektiv). Und so bleibt es dann. ------------------ CoCreate: Hilfeseite I FAQ I Hilfreiche Links 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: 14. Mrz. 2008 08:21 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
higway45 schrieb: Zitat:
Der schaltet zwar in beide Richtungen aber nur immer einmal. Ich kann über die normale Funktion das Fenster auf Perspektiv (bzw. Parallel) stellen, dann schaltet der Knopf auf Parallel (bzw. Perspektiv). Und so bleibt es dann.
Naja, Du schaltest die Perspektive um, machst die Entscheidung aber vom Clipping-Status abhängig... ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ [Diese Nachricht wurde von clausb am 14. Mrz. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Extruder Mitglied R&D
Beiträge: 58 Registriert: 15.03.2006 CoCreate OneSpace Designer Modelling 2004 12.01C 26-Mar-2004
|
erstellt am: 14. Mrz. 2008 08:41 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von der_Wolfgang: Wenn Du bitte noch "1" durch (oli:sd-inq-current-vp) ersetzt, kann auch ich damit leben.
Jawoll! Das ist der Befehl den ich schon lange gebraucht hab! Hab nämlich ein paar Befehle mit dem Aufzeichner gemacht die immer nur im Fenster "1" klappen! "Lisp lernen durch Forum lesen" oder "Meine Bildung hab ich aus dem Forum!" Auch dafür gibt's 10 Unities. Schönes Wochenende an alle. Gruß, Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MC Moderator Dipl.Ing. Maschinenbau, Konstrukteur
Beiträge: 644 Registriert: 20.10.2000
|
erstellt am: 14. Mrz. 2008 09:22 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Hallo Claus, Zitat: Original erstellt von clausb: higway45 schrieb: Naja, Du schaltest die Perspektive um, machst die Entscheidung aber vom Clipping-Status abhängig...
Ich habe gerade in der I-Kit-Doku versucht eine Funktion zu finden, die die aktuelle View-Mode-Einstellung abfragt, bin aber nicht fündig geworden. Das müßte doch irgendwie so heißen:
Code: oli:sd-inq-vp-view-mode
Gruß, Michael
------------------ Das maximale Volumen subterraner Agrarprodukte steht in reziproker Relation zur mentalen Kapazität des Produzenten. 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: 14. Mrz. 2008 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
highway45 Moderator Bastler mit Diplom
Beiträge: 6331 Registriert: 14.12.2004 SolidDesigner-20.5.1 + PhoenixPDM-11 + Solidworks-2022 + PE8
|
erstellt am: 14. Mrz. 2008 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat: Original erstellt von clausb: Naja, Du schaltest die Perspektive um, machst die Entscheidung aber vom Clipping-Status abhängig...
ups... Aber so geht es auch nicht: Code: set_vp_view_mode (oli:sd-inq-current-vp) (lisp:if (oli:sd-inq-vp-view-mode-enabled-p (oli:sd-inq-current-vp)) :Perspective :Parallel )
macht: Cannot find the external symbol SD-INQ-VP-VIEW-MODE-ENABLED-P in #<"OLI" package>Deine Schubser in die richtige Richtung sind immer sehr gut, um selbst etwas zu lernen. Vielleicht noch ein kleiner Tritt ? ------------------ CoCreate: Hilfeseite I FAQ I Hilfreiche Links 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: 14. Mrz. 2008 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
MC Moderator Dipl.Ing. Maschinenbau, Konstrukteur
Beiträge: 644 Registriert: 20.10.2000
|
erstellt am: 14. Mrz. 2008 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Ich bin nun kein Lisp-Profi, aber wie könnte das denn mit oli:sd-inq-vp-camera gehen? Im I.Kit steht: Code: (sd-inq-vp-camera vport)Description: Returns a structure (camera) that completely defines the viewing orientation of a viewport. Return value: camera {SD-VP-CAMERA-STRUCT} the structure containing the camera settings, which is defined as follows: (defstruct sd-vp-camera-struct (from-pt nil :type gpnt3d) (to-pt nil :type gpnt3d) (up-dir nil :type gpnt3d) (back-clip 0 :type long-float) (front-clip 0 :type long-float) (projection 0 :type long-float) (view-field 0 :type long-float) ) Parameters: vport {STRING} - the name of the viewport to inquire
Hat das denn etwas mit dem View-Mode zu tun? Ich könnte einen etwas heftigeren Tritt gebrauchen Gruß, Michael ------------------ Das maximale Volumen subterraner Agrarprodukte steht in reziproker Relation zur mentalen Kapazität des Produzenten. 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: 14. Mrz. 2008 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat:
Hat das denn etwas mit dem View-Mode zu tun?
Dass set_vp_view_mode so heisst, halte ich für etwas unglücklich. Besser wäre sowas wie set_vp_view_projection_mode. Und das bringt uns dann auch auf die Spur: Je nach Projektionsmethode liefert der folgende Ausdruck entweder 1 (parallel) oder 0 (perspektivisch): Code:
(oli:sd-vp-camera-struct-projection (oli:sd-inq-vp-camera vport))
'vport' ist wie schon beschrieben beispielsweise über oli:sd-inq-current-vp zu ermitteln. Claus
------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ 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: 14. Mrz. 2008 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
MC Moderator Dipl.Ing. Maschinenbau, Konstrukteur
Beiträge: 644 Registriert: 20.10.2000
|
erstellt am: 14. Mrz. 2008 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Großartig! Nur darauf wäre ich im Leben nicht gekommen. Gruß, Michael ------------------ Das maximale Volumen subterraner Agrarprodukte steht in reziproker Relation zur mentalen Kapazität des Produzenten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2143 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.4, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook 17 G4, Windows 10 Pro 64
|
erstellt am: 14. Mrz. 2008 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
highway45 Moderator Bastler mit Diplom
Beiträge: 6331 Registriert: 14.12.2004 SolidDesigner-20.5.1 + PhoenixPDM-11 + Solidworks-2022 + PE8
|
erstellt am: 14. Mrz. 2008 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2017 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 14. Mrz. 2008 20:54 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
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: 14. Mrz. 2008 23:24 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat: Original erstellt von Walter Geppert:
Bei Eingabe in die Befehlszeile wars aber notwendig
Ich hab sicher schon aberhunderte Male ein "if" in der Eingabezeile ohne Package-Angabe verwendet. Und auch das Beispiel mit der Projektionsumschaltung braucht (zumindest bei mir) kein "lisp::if". Claus ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ [Diese Nachricht wurde von clausb am 15. Mrz. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
edgar Mitglied Dipl. Ing. Maschinenbau
Beiträge: 386 Registriert: 06.06.2001 WINDOWS XP OSM 18.00A OSD 18.00A HP Z400
|
erstellt am: 01. Apr. 2008 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Kann ich auch sowas mit ON/OFF erschlagen? (OLI::SD-EXECUTE-ANNOTATOR-COMMAND :CMD "SHOW SELECT GLOBAL RGB_COLOR 0.6,0.702,0.902 CONFIRM OFF REDRAW") (OLI::SD-EXECUTE-ANNOTATOR-COMMAND :CMD "SHOW SELECT GLOBAL RGB_COLOR 0.6,0.702,0.902 CONFIRM ON REDRAW") Gruß Edgar 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: 01. Apr. 2008 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
edgar Mitglied Dipl. Ing. Maschinenbau
Beiträge: 386 Registriert: 06.06.2001 WINDOWS XP OSM 18.00A OSD 18.00A HP Z400
|
erstellt am: 01. Apr. 2008 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
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: 01. Apr. 2008 16:34 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat: Original erstellt von edgar: Ja, hab diese Befehle auf zwei Buttons liegen. Würde sie aber gerne auf einen Button legen, damit man je nach Zustand hin und herschalten kann.
Du musst nur eine Methode finden, um den aktuellen Zustand zu erfragen. Sobald Du das hast, kannst Du nach dem hier besprochenen Kochrezept vorgehen. Claus PS: Was ist das denn fuer eine magische Farbe? ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ [Diese Nachricht wurde von clausb am 01. Apr. 2008 editiert.] 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: 01. Apr. 2008 16:47 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Codevorschlag: Code:
(in-package :clausbrod.de) (use-package :oli) (export '(toggle-hilite))(let ((hilite-on)) (defun toggle-hilite() (SD-EXECUTE-ANNOTATOR-COMMAND :CMD (format nil "SHOW SELECT GLOBAL RGB_COLOR 0.6,0.702,0.902 CONFIRM ~A REDRAW" (if hilite-on "OFF" "ON"))) (setf hilite-on (not hilite-on))))
Diesen Code in einer Datei abspeichern, dafuer sorgen, dass sie beim Start mitgeladen wird, und dann vom dafuer zustaendigen Knopf das folgende aufrufen lassen:
Code:
(clausbrod.de:toggle-hilite)
Wofuer diese spezielle Farbe aber steht? Claus
------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ 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: 01. Apr. 2008 16:48 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
edgar Mitglied Dipl. Ing. Maschinenbau
Beiträge: 386 Registriert: 06.06.2001 WINDOWS XP OSM 18.00A OSD 18.00A HP Z400
|
erstellt am: 02. Apr. 2008 08:16 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat: Original erstellt von clausb:
Diesen Code in einer Datei abspeichern, dafuer sorgen, dass sie beim Start mitgeladen wird, und dann vom dafuer zustaendigen Knopf das folgende aufrufen lassen:
Code:
(clausbrod.de:toggle-hilite)
Wofuer diese spezielle Farbe aber steht? Claus
Immmer wieder genial, deine Codes. Die Farbe Grau stammt noch aus ME10 Zeiten. Damit werden Konstruktionshilfen, Bemerkungen usw. auf die Zeichnung gesetzt. Bsp. einen Teil von unsichtbaren Linien aus dem Ausdruck entfernen => Grau färben, fertig. Die kann man dann nach Bedarf ein- und ausblenden. Gedruckt wird die Farbe nicht und auf den erzeugten PDFS erscheint sie auch nicht. Gruß Edgar 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: 02. Apr. 2008 08:41 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
edgar Mitglied Dipl. Ing. Maschinenbau
Beiträge: 386 Registriert: 06.06.2001 WINDOWS XP OSM 18.00A OSD 18.00A HP Z400
|
erstellt am: 02. Apr. 2008 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Zitat: Original erstellt von clausb: Diesen Code in einer Datei abspeichern, dafuer sorgen, dass sie beim Start mitgeladen wird, und dann vom dafuer zustaendigen Knopf das folgende aufrufen lassen:
Code:
(clausbrod.de:toggle-hilite)
Doch noch eine Frage, wenn ich den Code mit der sd_customize lade, erhalte ich folgende Fehlermeldung: LISP-Fehler: There is no package with the name Clausbrod.de Scheinbar wird die Datei user_avail_cmds.cmd auf dem lokalen Rechner vor der sd_customize geladen, die sich auf dem Server befindet. Wo kann ich den Code denn sinnvollerweise laden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
edgar Mitglied Dipl. Ing. Maschinenbau
Beiträge: 386 Registriert: 06.06.2001 WINDOWS XP OSM 18.00A OSD 18.00A HP Z400
|
erstellt am: 02. Apr. 2008 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Leicht abgewandelt funktioniert es bei mir: ;;(in-package :clausbrod.de) (use-package li) ;;(export '(toggle-hilite)) (let ((hilite-on)) (defun toggle-hilite() (SD-EXECUTE-ANNOTATOR-COMMAND :CMD (format nil "SHOW SELECT GLOBAL RGB_COLOR 0.6,0.702,0.902 CONFIRM ~A REDRAW" (if hilite-on "OFF" "ON"))) (setf hilite-on (not hilite-on)))) Diesen Code in einer Datei abspeichern, dafuer sorgen, dass sie beim Start mitgeladen wird, und dann vom dafuer zustaendigen Knopf das folgende aufrufen lassen:
Code: (toggle-hilite) Edgar
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: 02. Apr. 2008 12:06 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2017 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 02. Apr. 2008 20:31 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|
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: 02. Apr. 2008 21:37 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
Für solche Reihenfolgeprobleme gibt es diverse Möglichkeiten. Die Variante 1 ist ein brutaler Package-Hack: Statt (clausbrod.de:toggle-grey-lines) schreibt man (clausbrod.de::toggle-grey-lines). Damit sagt man Lisp so in etwa: "Kann schon sein, dass es das Package clausbrod.de noch nicht gibt, aber vertrau mir, es wird demnächst eines geben, und in diesem Package gibt es dann ein internes Symbol namens toggle-grey-lines." Diese Variante nenne ich brutal und ich rate davon ab, weil sie zum einen die "::"-Unsitte befördert, also den Leuten angewöhnt, auch noch auf die internsten Geheimnisse eines Packages, die eigentlich versteckt bleiben sollen, noch zuzugreifen; andererseits bemerkt man auf diese Weise nie Tippfehler im Package- oder Symbolnamen. Weiterer Nachteil: Weil man das Symbol toggle-grey-lines explizit als internes Symbol ankündigt, muss man sich hinterher dann auch daran halten, das heisst, man kann es aus dem Package clausbrod.de nicht mehr mittels (export) publik machen, wie es sich eigentlich gehören würde. Ich beschreibe diesen Hack, um zu verdeutlichen, warum man ihn besser nicht verwendet, und um den Blick für solche Hacks zu schärfen, falls sie Euch mal unterkommen sollten. Variante 2: Wenn Code auf Symbole zugreift und zu einem Zeitpunkt geladen wird, zu dem diese Symbole noch nicht bekannt sind - nun, dann vermeidet man halt am besten diese Symbolzugriffe! Im Falle der "available commands" sollte das recht einfach gehen, weil man die Aktionen, die hinter einem Knopf stehen, meines Wissens auch als String angeben kann. Der wird dann erst evaluiert und ausgeführt, wenn der Anwender den Knopf drückt, und zu diesem Zeitpunkt ist dann toggle-grey-lines geladen. Es geht auch raffinierter:
Code:
(funcall (find-symbol "TOGGLE-GREY-LINES" (find-package "CLAUSBROD.DE")))
(find-package) findet heraus, ob ein Package schon existiert, mit (find-symbol) kann man ein Symbol in einem Package finden, und mit (funcall) ruft man die Funktion, die hinter dem Symbol steht. Alle Symbol- und Packagenamen kommen nur in Strings vor, so dass man diesen Code zu jedem Zeitpunkt laden kann. Claus ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/
[Diese Nachricht wurde von clausb am 02. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
edgar Mitglied Dipl. Ing. Maschinenbau
Beiträge: 386 Registriert: 06.06.2001 WINDOWS XP OSM 18.00A OSD 18.00A HP Z400
|
erstellt am: 03. Apr. 2008 07:41 <-- editieren / zitieren --> Unities abgeben: Nur für Extruder
|