| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Lisp zum Prozent antragen bricht ab (2341 mal gelesen)
|
oandres Mitglied
Beiträge: 80 Registriert: 24.05.2004 Windows XP Acad 2004
|
erstellt am: 29. Dez. 2004 15:04 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mir (leider weiss ich die Quelle nicht mehr) vor ein paar Monaten das Lisp im Anhang runtergeladen. Jetzt wo ich es brauche/anwenden will funktioniert es nicht. Es bricht mit folgender Meldung ab: Linie picken... ; Fehler: Fehlerhafter Argumenttyp: numberp: nil Bei der Linie handelt es sich um eine 3D-Polylinie. Da ich Lisp nicht beherrsche, kann ich mit der Fehlermeldung auch nix anfangen. Kann mir hier vielleicht jemand weiterhelfen ?! Danke schon mal im Voraus ! Gruß Olli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, Monitore, ...
|
erstellt am: 29. Dez. 2004 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für oandres
Code:
; Lisp-Programm zum Absetzen eines Textes für %-Angabe ; 17.08.2000 Lieske (defun c:prozent ( / ech sli li x1 x2 y1 y2 proz sel el) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n ") (princ "\n Angabe über %-Neigung einer Linie") (princ "\n Wert durch Ersetzen eines vorhandenen Textes absetzen") (princ "\n von tgl am 17.08.2000") (princ "\n ") (setq ;Linie wählen: sli (entsel "\n Linie picken... ") ; Element und Pickpunkt li (entget (car sli)) ; Element (Linie) ;Koordinaten der Punkte filtern (da Winkelauswahl 50 nicht möglich) x1 (car (cdr (assoc 10 li))) y1 (cadr (cdr (assoc 10 li))) x2 (car (cdr (assoc 11 li))) y2 (cadr (cdr (assoc 11 li))) ;Berechnung %-Wert und Umwandlung in Format XX.X und Anhang "%" proz (abs (* (/ (- y1 y2) (- x1 x2)) 100)) proz (rtos proz 2 2) proz (strcat proz "%") ;Dummy-Text wählen: sel (entsel "\n vorhandenen Text picken... ") ; Element und Pickpunkt el (entget (car sel)) ; Element (Text) ;Dummy-Text durch Wert (berechnet) ersetzen: el (subst (cons 1 proz) (assoc 1 el) el) ) ;of setq (entmod el) ;Dummy-Text schreiben (princ proz) (setvar "CMDECHO" ech) (prin1) ) ;end.
Im fettmarkierten Bereich werden die Gruppencodes 10 und 20 an x1, x2 und y1 und y2 zugewiesen und mit proz (abs (* (/ (- y1 y2) (- x1 x2)) 100)) in den begehrten Wert umgerechnet. Da jedoch deine 3D-Polylinie diese an einer anderen Stelle gespeichert hat, darf ja diese Programmierung nicht zum gleichen Ergebniss führen. Wenn eine Programmierung mit einer 3D-Pline durchgeführt werden sollte, dann ist es nötig zuwissen welchen Anstieg (Winkel) dort einbezogen werden soll. Btw. Emfehlung des Tages Mapcars AutoLisp-Seiten und Ebene (Mathematik) @ Wiki P.S. Bei der Methode Acad3DPolyline.Explode (oder einfach Befehl Ursprung auf 3D-Polylinie angewendet) erstellt dir eine "2D" Linie die mit diesem Suourcecode anklickbar ist. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF [Diese Nachricht wurde von Proxy am 29. Dez. 2004 editiert.] [Diese Nachricht wurde von Proxy am 29. Dez. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oandres Mitglied
Beiträge: 80 Registriert: 24.05.2004 Windows XP Acad 2004
|
erstellt am: 30. Dez. 2004 08:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Proxy, vielen Dank für Deine Antwort. Ich fürchte leider, dass ich nicht ganz nachvollziehen kann, was du mir damit sagen willst, vermutlich liegt es an meiner Lisp-Unkenntnis "Wenn eine Programmierung mit einer 3D-Pline durchgeführt werden sollte, dann ist es nötig zuwissen welchen Anstieg (Winkel) dort einbezogen werden soll." Es soll der Anstieg der Z-Koordinaten berechnet werden. Kurz zur Erklärung: Ich habe mehrere Punkte mittels GPS aufgenommen, in ACAD eingelesen und jeweils zwei davon mit einer 3D-Polylinie verbunden. Ich suche das jeweilige Gefälle zwischen diesen Punkten, was an einer Linie (in diesem Fall 3D-Poly) angetragen werden soll. Den Teil mit dem "gleichen Ergebnis" in Deinem Post hab ich offen gestanden nicht wirklich kapiert Ich gelobe allerdings Besserung und werde versuchen mich ein bisschen in LISP einzuarbeiten. Kannst Du/Ihr mir evtl. ein paar Einsteigerbücher zu diesem Thema empfehlen ? Gibt es vielleicht sogar welche, die das anhand von Beispielen aus der Vermessung und GPS darstellen ? Danke schon mal im Voraus. Gruss Olli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 30. Dez. 2004 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für oandres
Hi, was Proxy Dir sagen wollte ist, dass dieses Lisp nicht mit 3d-PLines funktioniert. C'est ca! Ich hab's ein wenig geändert, Thomas Lieske möge mir verzeihen, aber in meiner Version ist der Objekttyp egal, da Punkte gewählt werden müssen. Hier die Kurzfassung ohne Errorhändler. Soll heißen, wenn Du "falsche" Punkte oder am Ende keinen Text wählst, setzt's Fehlermeldungen. Aber das tat Thomas' Version ja auch schon: Code:
(defun c:Prozent (/ ech ang pt1 el) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n Angabe über %-Neigung einer Linie") (princ "\n Wert durch Ersetzen eines vorhandenen Textes absetzen\n" ) (setq ang (angle (setq pt1 (getpoint "\nErster Punkt:")) (getpoint pt1 "\nZweiter Punkt:") ) ) (setq el (entget (car (entsel "\n vorhandenen Text picken... ")))) (entmod (subst (cons 1 (strcat (rtos (abs (* 100 (/ (sin ang) (cos ang)))) 2 2 ) "%" ) ) (assoc 1 el) el ) ) (setvar "CMDECHO" ech) (princ) )
Gruß und guten Rutsch, CADchup ------------------ www.cadditions.de
[Diese Nachricht wurde von CADchup am 30. Dez. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oandres Mitglied
Beiträge: 80 Registriert: 24.05.2004 Windows XP Acad 2004
|
erstellt am: 30. Dez. 2004 17:21 <-- editieren / zitieren --> Unities abgeben:
Also generell funktioniert das Lisp. Allerdings werden die Prozente nicht richtig berechnet Er berechnet das Gefälle in X-Y-Richtung (die Lage der Punkte) nicht aber die Z-Richtung. Aber genau die sollte er berechnen... Kanns leider nicht selbst umschreiben... findet sich hier vielleicht nochmal jemand mit ein wenig Zeit ? Vielen Dank nochmal im Voraus ! Und ich werde auch noch Lisp lernen... versprochen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oandres Mitglied
Beiträge: 80 Registriert: 24.05.2004 Windows XP Acad 2004
|
erstellt am: 30. Dez. 2004 17:26 <-- editieren / zitieren --> Unities abgeben:
Ach ja, bevor ich's vergesse: Einen guten Rutsch an alle hier im Forum ! Ist wirklich das beste Forum das ich kenne An dieser Stelle noch mal allen vielen Dank, die hier so gute Hilfe leisten und den "geplagten" ACAD-Anwendern das Leben erleichtern. Durch Euch hab ich schon eine Menge Zeit in andere Arbeit stecken können. Besonderen Dank an dieser Stelle an die Lisp-Programmierer, die eine atemberaubende Geschwindigkeit beim coden an den Tag legen. Ihr seid genial ! Gruss Olli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 667 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 31. Dez. 2004 01:13 <-- editieren / zitieren --> Unities abgeben: Nur für oandres
Zitat: Original erstellt von oandres: Also generell funktioniert das Lisp. Allerdings werden die Prozente nicht richtig berechnet Er berechnet das Gefälle in X-Y-Richtung (die Lage der Punkte) nicht aber die Z-Richtung. Aber genau die sollte er berechnen...Kanns leider nicht selbst umschreiben... findet sich hier vielleicht nochmal jemand mit ein wenig Zeit ? Vielen Dank nochmal im Voraus ! Und ich werde auch noch Lisp lernen... versprochen
das programm rechnet ansich schon richtig. GETPOINT liefert die koordianten des punktes im aktuellen ucs, d.h. du mußt nur dein ucs verdrehen und schon paßt die steigung.
mit folgenden zeilen bist du unabhängig vom ucs. (defun c:Prozent (/ ech ang pt1 pt2 dh ds el) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n Angabe über %-Neigung einer Linie") (princ "\n Wert durch Ersetzen eines vorhandenen Textes absetzen\n" ) (SETQ pt1 (getpoint "\nErster Punkt:")) (SETQ pt2 (getpoint pt1 "\nZweiter Punkt:")) (SETQ pt1 (TRANS pt1 1 0)) (SETQ pt2 (TRANS pt2 1 0)) (SETQ dh (- (CADDR pt2) (CADDR pt1))) (SETQ ds (DISTANCE pt1 pt2)) (SETQ ang (/ dh (SQRT (- (EXPT ds 2) (EXPT dh 2))))) (setq el (entget (car (entsel "\n vorhandenen Text picken... ")))) (entmod (subst (cons 1 (strcat (rtos (ABS (* ang 100)) 2 2) "%") ) (assoc 1 el) el ) ) (setvar "CMDECHO" ech) (princ) )
natürlich auch von mir die besten wünsche für 2005! ciao georg [Diese Nachricht wurde von gmk am 31. Dez. 2004 editiert.] [Diese Nachricht wurde von gmk am 31. Dez. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
oandres Mitglied
Beiträge: 80 Registriert: 24.05.2004 Windows XP Acad 2004
|
erstellt am: 31. Dez. 2004 18:29 <-- editieren / zitieren --> Unities abgeben:
|
raiwae Mitglied
Beiträge: 13 Registriert: 08.08.2004 Terminal Server Installation Microsoft Terminal Server Client Installation ACAD-Anwender CAD-ADMIN
|
erstellt am: 01. Nov. 2008 17:26 <-- editieren / zitieren --> Unities abgeben: Nur für oandres
Hallo gmk, dein Beitrag ist zwar schon älter, aber trotzdem immer noch relevant. Eine Frage : Kannst du das Lisp auch so umschreiben, dass ein neuer Text mit der Prozentangabe, genau zwischen den beiden gewählten Punkten, generiert wird ? Top wäre wenn : der neue Text ausgrichtet zwischen den beiden Pickpunkten ,vielleicht sogar noch mit einem Pfeil, wäre gruss, raiwae
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 01. Nov. 2008 18:57 <-- editieren / zitieren --> Unities abgeben: Nur für oandres
Code: (defun c:Prozent (/ ech ang pt1 pt2 dh ds el richt) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n Angabe über %-Neigung einer Linie") (SETQ pt1 (getpoint "\nErster Punkt:")) (SETQ pt2 (getpoint pt1 "\nZweiter Punkt:")) (SETQ pt1 (TRANS pt1 1 0)) (SETQ pt2 (TRANS pt2 1 0)) (SETQ dh (- (CADDR pt2) (CADDR pt1))) (SETQ ds (DISTANCE pt1 pt2)) (SETQ ang (/ dh (SQRT (- (EXPT ds 2) (EXPT dh 2)))))(setq #osmode (getvar "OSMODE")) (setvar "OSMODE" 0) (command "_TEXT" "_S" "STANDARD" ;textstil "_J" "_BC" ;position (polar pt1 (setq richt (angle pt1 pt2)) (/ (distance pt1 pt2) 2)) 1 ;=texthöhe (atof (angtos richt (getvar "AUNITS") 8)) (strcat (rtos (ABS (* ang 100)) 2 2) "%") ) (setvar "OSMODE" #osmode) (setvar "CMDECHO" ech) (princ) )
Die Feinheiten (Textgr. Stil, Ausrichtung) mußt Dir aber selbst anpassen ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
raiwae Mitglied
Beiträge: 13 Registriert: 08.08.2004 Terminal Server Installation Microsoft Terminal Server Client Installation ACAD-Anwender CAD-ADMIN
|
erstellt am: 03. Nov. 2008 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für oandres
|