| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Z-Coordinaten auf 0 (1081 mal gelesen)
|
Christian01 Mitglied Technischer Zeichner
Beiträge: 281 Registriert: 17.04.2007
|
erstellt am: 23. Mrz. 2015 07:01 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Community, ich habe gerade mit LISP Programmieren angefangen. Ich stehe jetzt aber in einer Sackgasse. Mein Problem ist: Wie bringe ich alle Linien auf die Z- Ebene 0? Es betrifft nur die Z- Werte in der Elementliste 10. Habe schon einen Code geschrieben aber irgendwie wird der Z- Wert nicht geändert, sondern bleibt gleich. Code:
(defun C:LiZ0 (/) (IF (setq obj (ssget "X" (list (cons 0 "LINE")))) (progn (setq z 0 l (sslength obj)) (while (< i l) (setq elem (ssname obj i) elemli (entget elem) newh '0.0 ; ????????????????????? ) (IF (/= (cadddr elemli10) 0.0) (progn (setq elemli (subst newh (cdddr (assoc 10 elemli)) elemli ) ) (entmod elemli) (entupd elem) ) ) ; ............. (setq z (1+ z)) ) (princ "\n FERTIG") ) (princ "\n Irgendetwas ist schief gelaufen") ) )
Danke für die die Hilfe. Christian ------------------ Grüße Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6050 Registriert: 16.09.2004 WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.
|
erstellt am: 23. Mrz. 2015 07:22 <-- editieren / zitieren --> Unities abgeben: Nur für Christian01
Flüchtig drübergeschaut: Nicht nur der Startpunkt der Linie (assoc 10 ...) , sondern auch deren Endpunkt (assoc 11 ...) muß bearbeitet/modifiziert werden. Ach nein, das willst Du ja ausdrücklich nicht Für die Wertzuweisung zu newh genügt (setq newh 0.0), die 0.0 zu quotieren bringt nichts. Achja, und in der IF-Schleife ist noch ein Tippfehler cdddr muß cadddr werden. Und woher kommt auf einmal die Variable elemli10? in (IF (/= (cadddr elemli10) 0.0) Jürgen
------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty)
[Diese Nachricht wurde von jupa am 23. Mrz. 2015 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: 23. Mrz. 2015 07:27 <-- editieren / zitieren --> Unities abgeben: Nur für Christian01
Du mußt die anzupassende Liste neu erstellen, aber zunächst noch etwas anderes: Deine Entityliste kann (nach den UNS vorliegenden Informationen) einen oder mehrere gc10 enthalten, das macht die Geschichte dann noch etwas aufwändiger. Für den Fall das es nur um einen gc10 geht: (subst (reverse (cons 0.0 (cdr(reverse (assoc 10 elemli)))))(assoc 10 elemli)elemli) oder (subst (list 10 (cadr(assoc 10 elemli)) (caddr(assoc 10 elemli)))(assoc 10 elemli)elemli) oder oder .. da gibt es viele Möglichkeiten, viel wichtiger wäre es daher die Fälle zu berücksichtigen in denen es auch mal um gc11 geht, mehrere gc10 oder auch einen anderen Hochzugvewktor gc210 ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 23. Mrz. 2015 08:13 <-- editieren / zitieren --> Unities abgeben: Nur für Christian01
Hallo Christian, m. E. kann Deine Schleife nicht funktionieren. An Anfang setzt Du z = 0 und zählst am Ende dann auch z hoch, in der Schleife arbeitest Du aber mit i ((while (< i l) ... und (ssname obj i)). Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian01 Mitglied Technischer Zeichner
Beiträge: 281 Registriert: 17.04.2007
|
erstellt am: 23. Mrz. 2015 08:18 <-- editieren / zitieren --> Unities abgeben:
@Jürgen Danke für die Fehler. Beim vielen Herumprobieren und Test haben sich woll diese Fehler eingeschlichen.
Code:
(setq elemli10Z (cadddr (assoc 10 elemli)(IF (/= elemli10Z 0.0)
------------------ Grüße
Christian [Diese Nachricht wurde von Christian01 am 23. Mrz. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian01 Mitglied Technischer Zeichner
Beiträge: 281 Registriert: 17.04.2007 Briscad V22 ACAD MAP 2019 Win 10 Pro 64bit Intel, 4x 3,0 GHz, 8GB RAM 2 x 24" TFT
|
erstellt am: 23. Mrz. 2015 08:51 <-- editieren / zitieren --> Unities abgeben:
Code: (while (< z l) (setq elem (ssname obj i) elemli (entget elem) newh 0.0 elemli10Z (cadddr (assoc 10 elemli)) ) (IF (/= elemli10Z) 0.0) (progn (setq elemli (subst newh (cdddr (assoc 10 elemli)) elemli ) ) (entmod elemli) (entupd elem) ) )
------------------ Grüße Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6050 Registriert: 16.09.2004 WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.
|
erstellt am: 23. Mrz. 2015 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für Christian01
Sebastians (cadffm) Hinweise gelesen (und verstanden)? Jürgen ------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 23. Mrz. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 23. Mrz. 2015 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für Christian01
Hallo Christian, m. E. kannst Du Dir auch das Ermitteln von elemli10Z und den nachfolgenden if Vergleich sparen. Es schadet ja nichts, wenn der Wert schon 0.0 ist, ihn nochmal darauf zu setzen, und dafür fallen einige Zeilen Code weg. Gruß Thomas ps. meine Hinweise weiter oben gesehen? [Diese Nachricht wurde von spider_dd am 23. Mrz. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |