| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für BricsCAD |
| |
| Mit dem intelligenten Helfer in Sekundenschnelle zum richtigen CAD-Tool, eine Pressemitteilung
|
Autor
|
Thema: was liefern caar und cadar ? (888 mal gelesen)
|
Uwe Jagoda Mitglied CAD-Zeichner/Lisp Programmierer
Beiträge: 7 Registriert: 14.01.2009 BricsCad V9
|
erstellt am: 28. Jan. 2009 02:46 <-- editieren / zitieren --> Unities abgeben:
|
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 30. Jan. 2009 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Jagoda
Hallo Uwe, für Deine Fragen, ist das Lisp-Forum von CAD.DE besser geeignet. Da findest Du auch das Handbuch für Autolisp als DOC-Datei für ACAD 14. Für weitere Informationen zu AutoLisp empfehle ich Dir das "Kochbuch für AutoLisp" vom Carl Hanser Verlag. Gruß Theodor Schönwald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 30. Jan. 2009 21:58 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Jagoda
Natürlich hat Theodor recht, aber vielleicht hilft schon Code:
(defun C:TEST1 () (setq p1 (getpoint "\nZeige Punkt1")) (setq p2 (getpoint "\nZeige Punkt2")) (setq p3 (getpoint "\nZeige Punkt3")) (setq punktliste (list p1 p2 p3)) (princ "\nPunktliste: ") (print punktliste) (setq x_wert_p1 (caar punktliste)) (setq y_wert_p1 (cadar punktliste)) (setq z_wert_p1 (caddar punktliste)) (setq x_wert_p2 (caadr punktliste)) (setq y_wert_p2 (caadar punktliste)) (setq z_wert_p2 (caaddr punktliste)) (setq x_wert_p3 (caaddr punktliste)) (setq ohne_x_p3 (cdaddr punktliste)) (princ "\nx_wert_p1: ") (print x_wert_p1) (princ "\ny_wert_p1: ") (print y_wert_p1) (princ "\nz_wert_p1: ") (print z_wert_p1) (princ "\nx_wert_p3: ") (print x_wert_p3) (princ "\nohne_x_p3: ") (print ohne_x_p3) (princ) )
Viel Erfolg beim Ausprobieren JochenEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe Jagoda Mitglied CAD-Zeichner/Lisp Programmierer
Beiträge: 7 Registriert: 14.01.2009 BricsCad V9
|
erstellt am: 01. Feb. 2009 13:39 <-- editieren / zitieren --> Unities abgeben:
Lieber Jochen, Ich verstehe jetzt, dass diese Funktionen Zugriff auf Listen ermöglichen, aber du hast keinen Zugriff auf jede Koordinate. Z.B. (setq y_wert_p1 (cadar punktliste)) liefert: Fehlerhafter Argumenttyp: 2 Wahrscheinlich gibt es noch andere Funktionen, die das liefern. Ich werde auch weiterhin auf solche Optimierung verzichten und es in zwei Schritten machen, brauche ich den x-Wert des dritten Punktes, schreinbe ich: (setq p3 (caddr Punktliste) y3 (cadr p3) ) Es entspricht auch der Vorgehensweise, ein Problem erstmal zu vereinfachen, ist auch besser zu lesen. Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe Jagoda Mitglied CAD-Zeichner/Lisp Programmierer
Beiträge: 7 Registriert: 14.01.2009 BricsCad V9
|
erstellt am: 01. Feb. 2009 13:47 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 19. Mrz. 2009 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Jagoda
mit car und seiner weiteren Verschachtelung kannst du wie du in der Tat schon Richtig erkannt hast auf Listeneinträge zurückgreifen. Du suchst die Funktion caddr um auf die 3. Stelle in einer Liste zugreifen zu können. Gleiches Ergebniss erhältst du mit der Func nth (nth 2 punktliste) Wieso sollte Users1-5 persistent sein - hast du das denn in einem Anderen Programm so, das du diese Frage stellst?
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe Jagoda Mitglied CAD-Zeichner/Lisp Programmierer
Beiträge: 7 Registriert: 14.01.2009 BricsCad V9
|
erstellt am: 19. Mrz. 2009 16:32 <-- editieren / zitieren --> Unities abgeben:
|
Uwe Jagoda Mitglied CAD-Zeichner/Lisp Programmierer
Beiträge: 7 Registriert: 14.01.2009 BricsCad V9
|
erstellt am: 19. Mrz. 2009 16:33 <-- editieren / zitieren --> Unities abgeben:
|
mapla Mitglied CAD Administrator
Beiträge: 93 Registriert: 20.06.2007
|
erstellt am: 14. Apr. 2009 22:31 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe Jagoda
Hallo Uwe, wenn auch ein bischen verspätet aber hier eine Antwort die ich von mapcar in einem persönlichem Lisp Training erhalten haben. Wenn Du eine Liste hast liefert das "A" cAr immer das erste Element der Liste zBsp (car '( x y z)) = X "D" cdr immer immer den Rest der Liste (cdr '( x y z)) = '(Y Z) die Kobinationen müssen von rechts nach Links aufgelöst werden (cadr '(x y z)) ergibt Y 1. (cdr '(x y z))= '(Y Z) 2. (car '(Y Z)) = Y (car '(X Y Z ) ergibt X (cadr '(X Y Z) ergibt Y (caddr) '(X Y Z) ergibt Z hoffentlich hilft es! (cadddr '( 1 2 3 4 5)) = 4 hoffentlich hilft es noch wenn auch spät Karsten
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |