| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: beliebte Listen (1903 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 20. Dez. 2012 10:35 <-- editieren / zitieren --> Unities abgeben:
Ich komme gerade nicht weiter, vllt weiss einer Abhilfe. Ich will erreichen, dass die Eingabe variablen vor Abfrage angezeigt werden. Mit string Typen geht das ohne weiteres, nur bei Listen bekomme ich diese Anzeige nicht hin mit
Code:
(mapcar 'rtos '(0 0 0))
kann ich mir zwar den Inhalt der Liste in strings zerhaken, aber wie kann ich sie als kompletten string anzeigen lassen also mit strcat zusammenfügen ? Ein Kurzschluss von mir
Code:
(foreach x (mapcar 'rtos '(0 0 0)) (setq str (strcat x str)) )
------------------ Gruss Dirk 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: 20. Dez. 2012 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 20. Dez. 2012 10:55 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 20. Dez. 2012 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
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: 20. Dez. 2012 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Dez. 2012 11:02 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
lustich Da darfst du deiner Fantasie freien Lauf lassen, du kannst es nicht wirklich schlecht machen. Mich beschäftigt mehr dein rtos, so wie du es nutzt hat man ja keine Ahnung was da für String-Werte herauskommen am Ende (oder schaltest du dafür extra UNITMODE, DIMZIN, LUNITS, and LUPREC um ?) Wilde Kreationen (setq coord '(0 0 0)) (substr(apply'strcat(mapcar '(lambda(c)(strcat "," (rtos c))) coord))2) (strcat(rtos(car coord)2 15) "," (rtos(cadr coord)2 15) "," (rtos(caddr coord)2 15)) Zu deinem Kurzschluß: Das dies nicht läuft hast du ja gemerkt, jetzt müßtest du mal den Ablauf durchgehen damit du siehst wo der Fehler ist, oder soll das wer anderes machen ? EDIT: Falls du wirklich "0.0,0.0,0.0" wolltest, wie von mir vermutet: WOFÜR ? ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) [Diese Nachricht wurde von cadffm am 20. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 20. Dez. 2012 13:02 <-- editieren / zitieren --> Unities abgeben:
Danke für Eure Beiträge, aber ich denke immer noch falsch... (ist mein letzter Arbeitstag heute) Ich versuche an einem simplen Beispiel, Eingabewiederholungen durch bestätigen oder neuwählen zu verbessern. Nur ist die Umsetzung schrecklich. Code:
(defun MyInput (x) (cond ((= (type x) 'STR) (setq MyPrompt (strcat " < " x " > ")) ) ((= (type x) 'LIST) (setq MyPrompt (strcat " < " (apply 'strcat(mapcar 'rtos x)) " > ")) ) ) (princ) )(setq str1 (MyInput (getpoint (strcat "\nKlick einen Punkt " MyPrompt)))) (setq str2 (MyInput (getstring (strcat "\nGib einen Text ein " MyPrompt))))
Ist mein Ansatz grundsätzlich falsch? ------------------ Gruss Dirk 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: 20. Dez. 2012 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, für das RTOS fehlen noch ein paar Parameter: Code:
(defun MyInput (x) (cond ((= (type x) 'STR) (setq MyPrompt (strcat " < " x " > ")) ) ((= (type x) 'LIST) (setq MyPrompt (strcat " < " (apply 'strcat(mapcar '(lambda(A)(rtos A 2 2)) x)) " > ")) ) ) (princ) )(setq str1 (MyInput (getpoint (strcat "\nKlick einen Punkt " MyPrompt)))) (setq str2 (MyInput (getstring (strcat "\nGib einen Text ein " MyPrompt))))
Vielleicht fehlt da noch eine Klammer oder so, ist nicht getestet. ------------------ viele Grüße Jörn http://www.bosse-engineering.com VektorAdd-HD-Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 20. Dez. 2012 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
1. Du speicherst unnütze Strings, aber den "Originalwert" nicht (und der soll doch bei einem ENTER als Rückgabe kommen) 2. Auch ist der Gedanke von "all in one" nett, aber angenommen du willst eine Layernamen abfragen und deine letzte Abfrage war ein Punkt, dann erscheint nach deinem Konstrukt beim User sowetwas: Bitte geben sie einen Layernamen ein <5.75,3.25,0.0>: (man kann es sicher allinone umsetzen, aber das müßte dann schon etwas anders aussehen) ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad)
[Diese Nachricht wurde von cadffm am 20. Dez. 2012 editiert.] 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: 20. Dez. 2012 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, hallo Sebastian, hier noch mal eine Möglichkeit mit einer globalen Liste, in der die verschiedenen Eingabearten gelistet sind. Wenn ein Wert eingegeben wurde, dann wird er auch in der Liste gespeichert, so daß dieser entsprechend der ausgewählten Art wieder als Vorgabewert dient. Ob das wirklich Sinn macht, alles so zusammen zu mischen sei dahin gestellt, eine schöne Spielerei vor Weihnachten allemal
Code:
(defun MyInput (art / GLOBLISTSUB MYPROMPT NEUERWERT X) (setq art (strcase art)) ;;;globale Liste definieren, wenn noch nicht vorhanden (if (not GlobList) (setq GlobList '(("TEXT" (1 . (getstring (strcat "\nGib einen Text ein " MyPrompt)));;;Funktion (2 . nil);;;letzter Wert (3 . (strcat " < " x " > "));;;PromtFunktion ) ("PUNKT" (1 . (getpoint (strcat "\nKlick einen Punkt " MyPrompt))) (2 . nil) (3 . (strcat " < " (apply 'strcat(mapcar '(lambda(A)(rtos A 2 2)) x)) " > ") ))))) (if (assoc art GlobList) (progn (setq MyPrompt (if (setq x(cdr(assoc 2(cdr(assoc art GlobList))))) (eval (cdr(assoc 3(cdr(assoc art GlobList))))) "<>")) (if(and(setq NeuerWert(eval (cdr(assoc 1(cdr(assoc art GlobList)))))) (/= NeuerWert "")) (progn (setq GlobListSub(subst (cons 2 NeuerWert) (assoc 2 (cdr(assoc art GlobList))) (cdr(assoc art GlobList))) GlobList (subst (cons art GlobListSub) (assoc art GlobList) GlobList)) NeuerWert) (cdr(assoc 2(cdr(assoc art GlobList))))) ) (alert (strcat "Die Eingabeart \"" art "\" ist nicht definiert."))) )
Aufruf: (MyInput "TEXT") (MyInput "PUNKT") (MyInput "WINKEL") => ist nicht definiert in der globalen Liste ------------------ viele Grüße Jörn http://www.bosse-engineering.com VektorAdd-HD-Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 21. Dez. 2012 13:25 <-- editieren / zitieren --> Unities abgeben:
Sorry Leute, für mich gilt ab heute schon ausschlafen. Also ich werde mich eingehender im nächsten Jahr mit euren Vorschlägen beschäftigen. Danke euch allen insbesondere in diesem vergangenen 2012´er jahr: cadmium, cadffm, Jörn B., Meldin, spider_dd und alle nicht genannten, die mir wirklich grossartige Hilfe geboten haben. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 07. Jan. 2013 10:51 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 09. Jan. 2013 13:45 <-- editieren / zitieren --> Unities abgeben:
Jörn, ich hatte heute mal Zeit mich eingehender mit deiner Funktion zu beschäftigen - läuft übrigens einwandfrei. Nur lernt man ja nix zu, wenn man nur copy/paste ausführt. Mir ist klar welche Funktion die GlobList ausführt. Verstehe ich etwas falsch oder hier Code:
(setq MyPrompt (if (setq x (cdr (assoc 2 (cdr (assoc art GlobList))))) (eval (cdr (assoc 3 (cdr (assoc art GlobList))))) "<>") )
wird gefragt ob was angezeigt wird in MyPrompt Ist die Anzeige leer dann füllt diese Zeilen der Wert aus
Code:
(if (and (setq NeuerWert (eval (cdr (assoc 1 (cdr (assoc art GlobList))))) ) (/= NeuerWert "") )
Meine Frage jetzt ist, wo wird in deinem Code gesagt, dass die neue Anzeige in Code: (3 . (strcat " < " (apply 'strcat (mapcar '(lambda (A) (rtos A 2 2)) x)) " > ")
gespeichert werden soll. Oder habe ich hier einen Denkfehler. Ich weiss nicht genau was die Liste (3 . ... ) bewirkt
------------------ Gruss Dirk 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: 09. Jan. 2013 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, ich mußte eben auch erstmal überlegen was ich da gemacht habe, war ja schon letztes Jahr Also:
Code:
(setq MyPrompt (if (setq x (cdr (assoc 2 (cdr (assoc art GlobList))))) (eval (cdr (assoc 3 (cdr (assoc art GlobList))))) "<>") )
Dort wird der Prompt festgelegt. Wenn in (assoc art GlobList) der Gruppencode 2 bereits gefüllt ist mit einem Wert aus einem vorhergehenden Durchgang, dann wird dieser in der Variablen X gespeichert. Weil in der Funktion unter Gruppencode 3 die Variable angesprochen wird, wird dann auch der richtige Prompt zurückgegeben. Wenn noch kein Wert in Gruppencode 2 gespeichert, dann wird einfach "<>" als Prompt genommen. Ach nochwas zum Gruppencode 3: da ist nur die Funktion STRCAT mit der Variablen X und den Prefix "<" und Suffix ">" enthalten, mit EVAL wird das dann ausgeführt. Code:
(setq GlobListSub(subst (cons 2 NeuerWert) (assoc 2 (cdr(assoc art GlobList))) (cdr(assoc art GlobList))) GlobList (subst (cons art GlobListSub) (assoc art GlobList) GlobList))
Und wenn ein NeuerWert vorhanden, dann wird er mit (setq GlobListSub ... und 2x SUBST gespeichert. Ich hoffe ich konnte Dir weiterhelfen, das schriftlich zu erklären ist nicht immer einfach. ------------------ viele Grüße
Jörn http://www.bosse-engineering.com Böschungsschraffen Youtube [Diese Nachricht wurde von joern bosse am 09. Jan. 2013 editiert.] [Diese Nachricht wurde von joern bosse am 09. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 09. Jan. 2013 14:21 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
tanteedit, Mist war ich spät dran, tanteedit Also dein letztes Posting war wirklich schwer zu verdauen/zu lesen - daher habe ich mal einen ebenso locker beswingten Style genutzt zur Antwort: Mir ist klar welche Funktion die GlobList ausführt. * GlobList selbst ist eine Liste und führt nie eine Funktion aus (erfüllt aber eine, nämlich die Funktion der Datenspeicherung) oder hier wird gefragt ob was angezeigt wird in MyPrompt
* Eigentlich wir da nicht gefragt OB, sondern es wird festgelegt WAS angezeigt werden wird, nämlich wenn vorhanden, der alte Wert, falls nicht "<>" . Ist die Anzeige leer dann füllt diese Zeilen der Wert aus
* Nö, denn das ist ja "wie eben beschrieben" bereits davor geschehen. An dieser Stelle wir nur ggf. ein "neuer letzter Wert" gespeichert. Meine Frage jetzt ist, wo wird in deinem Code gesagt, dass die neue Anzeige in gespeichert werden soll. Oder habe ich hier einen Denkfehler. Ich weiss nicht genau was die Liste (3 . ... ) bewirkt
* Die Liste 3 ?? Mit dem Wert wird der neue Abfrage-String generiert Man hätte auch anstatt der Liste 3 eine Funktion an ein Symbol pappen können: (defun Liste3 (wert) machund tu... was aber unnötig ist - wie man sieht. < eine Erklärung a´la "Malen nach zahlen" schaffe ich zeitlich nicht, aber da findet ich bestimmt noch wer ? >
------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) [Diese Nachricht wurde von cadffm am 09. Jan. 2013 editiert.] Code:
Was macht Liste 3 =%= (strcat " < " (apply 'strcat(mapcar '(lambda(A)(rtos A 2 2)) x)) " > ") (strcat ; füge alle nachfolgenden Strings zusammen:
" < " (apply 'strcat ; füge alle nachfolgenden Listenelemente zusammen (Vorraussetzung: Es sind alles Strings): (mapcar '(lambda ; bearbeite jedes Listenelement aus X wie folgt: (A) ; pappe das Listenelement an das Symbol A (rtos A 2 2) ; konvertiere die Nummer am Symbol A in einen String ) x ) ) " > " )
[Diese Nachricht wurde von cadffm am 09. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 09. Jan. 2013 14:27 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 10. Jan. 2013 14:29 <-- editieren / zitieren --> Unities abgeben:
|