| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Eingabewerte speichern (584 mal gelesen)
|
Heiko-T Mitglied Techn. Zeichner (CAD-Spezialist)
Beiträge: 147 Registriert: 29.07.2004
|
erstellt am: 06. Jan. 2006 07:54 <-- editieren / zitieren --> Unities abgeben:
Hallo, hier meine Programmierkünste (ich weiß sie sind erschreckent). Mein Problem ist folgendes. Die beiden Eingabewerte sollte er sich merken und beim nächsten Befehl aufrufen als Vorgabewert angeben ! Wie kann ich das realisieren ?? (Defun C:variam () (Setq SKF1 (getreal "Maßstab 1 <>") SKF2 (getreal "Maßstab 2 <>") Auswahl (ssget) BAP (getpoint "Bitte Basispunkt angeben")) (command "varia" Auswahl "" BAP "B" SKF1 SKF2) (princ) );defun Danke im vorraus
------------------ MFG Heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 06. Jan. 2006 08:10 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko-T
solange du in einer Zeichnung bleibst, funktioniert das mit globalen Variablen, die natürlich nicht von anderen Progs überschrieben werden dürfen. Sitzungsübergreifend, aber in der Zeichnung gespeichert, helfen dir vielleicht die sysvars USERR1-5 weiter. Zeichnungsübergreifend, aber auf die jeweilige ACADsitzung beschränkt,bleibt dir Blackbord -> vl-bb-set und vl-bb-ref. Sitzungs und Zeichnungübergreifen gibts die Speicherung in der Registry -> vl-registry-read und vl-registry-write. Das allgemeine Vorgehen sollte dir folgender (ungetester) Code verdeutlichen: (Defun C:variam (/ Vorgabe) (setq VORGABE(cond ((=(type SKF1)'REAL)SKF1) ('T 1.0) ) ) (initget 2) (or(setq SKF1 (getreal (strcat"Maßstab 1 <"(rtos VORGABE 2 5)">"))) (setq SKF1 VORGABE) ) (setq VORGABE(cond ((=(type SKF2)'REAL)SKF1) ('T 1.0) ) ) (initget 2) (or(setq SKF2 (getreal (strcat"Maßstab 2 <"(rtos VORGABE 2 5)">"))) (setq SKF2 VORGABE) ) (setq Auswahl (ssget)) (setq BAP (getpoint "Bitte Basispunkt angeben")) (command "varia" Auswahl "" BAP "B" SKF1 SKF2) (princ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 06. Jan. 2006 08:16 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko-T
Hallo Heiko, Du kannst die Werte als Defaultwerte in globalen Variablen festlegen, d.h., sie behalten innerhalb der aktuellen Zeichnung Ihren Wert auch nach Beenden des Programms. Wenn das Programm das zweite mal startet werden die Variablen nicht wieder mit den Defaultwerten belegt, weil sie ja bereits aus dem vorhergehenden Programmdurchlauf Werte beinhalten. Alle anderen Variablen, die nur innerhalb der Funktion gelten sollen, habe ioh als lokale Variablen deklariert. Code:
(Defun C:variam (/ SKF_temp Auswahl BAP) ;;;Defaultwerte, wenn SKF1 und SKF2 noch keine Werte beinhalten (if (not SKF1) (setq SKF1 10.0)) (if (not SKF2) (setq SKF2 1.0)) ;;;Ende Defaultwerte setzen (if (Setq SKF_temp (getreal (strcat "Maßstab 1 <" (rtos SKF1 2 0) ">"))) (setq SKF1 SKF_temp)) (if (Setq SKF_temp (getreal (strcat "Maßstab 2 <" (rtos SKF2 2 0) ">"))) (setq SKF2 SKF_temp)) (setq Auswahl (ssget) BAP (getpoint "Bitte Basispunkt angeben")) (command "varia" Auswahl "" BAP "B" SKF1 SKF2) (princ) )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 06. Jan. 2006 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für Heiko-T
Hallo Heiko, in deinem Code sind die Vorgabewerte bereits gespeichert, da du nur globale Variablen verwendet hast. Suche mal hier im Forum nach diesem Stichwort oder geh auf mapcar's Seiten, dort kannst du die Hintergründe dazu nachlesen. Die Verwendung globaler Variablen ist ein Weg, den ich jedoch nicht preferiere. Ich arbeite in solchen Fällen mit dem Blackboard, eine Art Zwischenablage für den Lisp-Programmierer. Das, was dir sicher auch noch gefehlt hat, ist der Weg, die nun gespeicherten Daten im Programm zu verwenden. Auch das habe ich in dem geänderten Bsp-Code eingebaut. Code:
(defun C:variam (/ SKF1 SKF2 SKF_1 SKF_2 Auswahl BAP) (setq SKF_1 (vl-bb-ref 'SKF1);Wert aus Blackboard lesen SKF_2 (vl-bb-ref 'SKF2);Wert aus Blackboard lesen ) (initget (if SKF_1 6 7));wenn Vorgabewert, dann auch Leereingabe erlaubt (setq SKF1 (getreal (strcat "Maßstab 1" (if SKF_1;wenn Vorgabewert, dann Vorgabewert ausgeben (strcat" <"(rtos SKF_1 2 2)">") "" ) ": " )) SKF1 (if SKF1 SKF1 SKF_1) ) (initget (if SKF_2 6 7)) (setq SKF2 (getreal (strcat "Maßstab 2" (if SKF_2 (strcat" <"(rtos SKF_2 2 2)">") "" ) ": " ) ) SKF2 (if SKF2 SKF2 SKF_2) Auswahl (ssget) BAP (getpoint "Bitte Basispunkt angeben") ) (vl-bb-set 'SKF1 SKF1);Wert ins Blackboard schreiben (vl-bb-set 'SKF2 SKF2);Wert ins Blackboard schreiben (command "varia" Auswahl "" BAP "B" SKF1 SKF2) (princ) );defun
Bei Fragen ... Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Heiko-T Mitglied Techn. Zeichner (CAD-Spezialist)
Beiträge: 147 Registriert: 29.07.2004
|
erstellt am: 06. Jan. 2006 13:09 <-- editieren / zitieren --> Unities abgeben:
|