| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Additions-LISP erweitern (669 mal gelesen)
|
Helmut Wieser Mitglied Mitarbeiter in Architekturbüro
Beiträge: 134 Registriert: 08.03.2004 AutoCAD 2002
|
erstellt am: 19. Jul. 2004 11:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute! Ich habe vor kurzem hier ein Additions- Lisp nachgefragt und auch bekommen ( http://ww3.cad.de/foren/ubb/Forum145/HTML/000689.shtml )- nochmals meinen Dank an Thomas. Ich habe es für meine spezifische Anforderungen umgebastelt, es schaut jetzt so aus: (defun c:ADDSUB01 ( / Z1 Z2 OBJEKT OBJEKTDATEN ) (if (and(setq Z1 177.75) (setq OP(getstring "\n Rechenoperation :")) (member OP '("+" "-")) ) (while (setq OBJEKT (car(entsel "\nText wählen : "))) (setq OBJEKTDATEN(entget OBJEKT '("*"))) (if (member(cdr(assoc 0 OBJEKTDATEN)) '("TEXT" "MTEXT")) (progn (setq Z2 (atof (cdr(assoc 1 OBJEKTDATEN)))) (setq OBJEKTDATEN (subst(cons 1 (if (= OP "+")(rtos (+ Z2 Z1) 2 2)(rtos (- Z2 Z1) 2 2))) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) (entmod OBJEKTDATEN) ) ) ) ) ) -es addiert / subtrahiert 177.75 (=Haus- Null über Adria). Jetzt habe ich noch eine Frage: Wenn ich das Ausgabeformat "= <Ergebnis> ü.A." also ein fixes Präfix ("=") und Suffix ("ü.A.") habe will, wie und wo sag ich das dem LISP? In Österreich gibts z.Zt. eine Bank- Webung mit dem Motto WAS ZÄHLEN DIE GROSSEN ERFOLGE OHNE DIE KLEINEN? - ich find das passt auch hier ganz gut. Grüße aus Wien Helmut
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 19. Jul. 2004 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Ok! Ersetze (setq OBJEKTDATEN (subst(cons 1 (if (= OP "+")(rtos (+ Z2 Z1) 2 2)(rtos (- Z2 Z1) 2 2))) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) durch (setq OBJEKTDATEN (subst(cons 1 (strcat "=" (if (= OP "+")(rtos (+ Z2 Z1) 2 2)(rtos (- Z2 Z1) 2 2)) "ü.A." ) ) (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) )
------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erwin Fortelny Mitglied Tech. Zeichner
Beiträge: 877 Registriert: 13.12.2001
|
erstellt am: 19. Jul. 2004 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Hallo, Zitat: Original erstellt von Helmut Wieser: Ich habe vor kurzem hier ein Additions- Lisp nachgefragt und auch bekommen [...] Jetzt habe ich noch eine Frage: Wenn ich das Ausgabeformat "= <Ergebnis> ü.A." also ein fixes Präfix ("=") und Suffix ("ü.A.") habe will, wie und wo sag ich das dem LISP?
Da muß man das Ganze etaws Umstricken, wie folgt z.B.: (defun c:ADDSUB01 ( / Z1 Z2 OBJEKT OBJEKTDATEN Z3 TPRE TSUF ) ;*** (if (and (setq Z1 177.75) (setq OP(getstring "\n Rechenoperation :")) (member OP '("+" "-")) (setq TPRE "= ") ;*** (setq TSUF " ü.A.") ;*** ) (while (setq OBJEKT (car(entsel "\nText wählen : "))) (setq OBJEKTDATEN(entget OBJEKT '("*"))) (if (member(cdr(assoc 0 OBJEKTDATEN)) '("TEXT" "MTEXT")) (progn (setq Z2 (atof (cdr(assoc 1 OBJEKTDATEN)))) (setq Z3 (strcat TPRE (if (= OP "+")(rtos (+ Z2 Z1) 2 2)(rtos (- Z2 Z1) 2 2)) TSUF)) ;*** (setq OBJEKTDATEN (subst (cons 1 Z3) ;*** (assoc 1 OBJEKTDATEN) OBJEKTDATEN ) ) (entmod OBJEKTDATEN) ) ) ) ) )
Geänderte Zeilen siehe an >;***<! Zitat: Original erstellt von Helmut Wieser: Grüße aus Wien
Retour von Wien! ------------------ Servus, Erwin --
[Diese Nachricht wurde von Erwin Fortelny am 19. Jul. 2004 editiert.] [Diese Nachricht wurde von Erwin Fortelny am 19. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Helmut Wieser Mitglied Mitarbeiter in Architekturbüro
Beiträge: 134 Registriert: 08.03.2004 AutoCAD 2002
|
erstellt am: 19. Jul. 2004 12:54 <-- editieren / zitieren --> Unities abgeben:
|
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: 23. Jul. 2004 07:59 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Mit folgendem Prog-Schnipsel könnte man beliebige Rechenoperationen verwenden: ;----------Code Anfang (setq #op (getstring "\nOperation (+ - * /): ")) (cond ( (= #op "+") (setq #op +) ) ( (= #op "-") (setq #op -) ) ( (= #op "*") (setq #op *) ) ( (= #op "/") (setq #op /) ) ) (setq #ergebnis (#op #wert1 #wert2)) ;----------Code Ende (Auf die Festlegung von #wert1, #wert2 wurde hier bewußt verzichtet) ------------------ Gruß, Ernst
[Diese Nachricht wurde von Geos am 23. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 23. Jul. 2004 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Zitat: Mit folgendem Prog-Schnipsel könnte man beliebige Rechenoperationen verwenden:
Na, allzu beliebig sieht mir das nicht bei 4 Operationen aus. Wie wäre es mit folgender Modifikation? Code:
(setq #op (eval(read(getstring "\nOperation: ")))) (if (ist-funktion? #op) (setq #ergebnis (#op #wert1 #wert2)) );; hierbei ist ist-funktion? folgend definiert: (defun ist-funktion? (x) (member (type x)'(USUBR SUBR EXSUBR EXRXSUBR)) )
Das nenne ich mal beliebig (natürlich unter der Einschränkung, dass nur 2-argumentige Funktionen in Frage kommen). Beispiel für größten Wert Operation: max Beispiel für Durchnittsbildung Operation: (lambda(x y)(* 0.5(+ x y))) usw. usf. Achim Dabrunz
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: 23. Jul. 2004 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
|
Jürgen Scheeren Mitglied Energieanlagen Konstrukteur , CAD-Administrator
Beiträge: 262 Registriert: 03.04.2003 Autocad MEP 2016 win7x64bit
|
erstellt am: 27. Jul. 2004 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Hallo Ernst, Hallo Achim, wäre super wenn ihr eure Verbesserungsvorschläge als komletten Code reinstellen könntet. Bin an dem Prog interessiert, aber leider ne Lisp-Niete. Gruß Jürgen [Diese Nachricht wurde von Jürgen Scheeren am 27. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dabrunz Mitglied
Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 27. Jul. 2004 13:28 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Da fehlt an der Funktionalität nix - der Code ist in dieser Beziehung komplett. Wenn ich dir ein Programm schreiben soll, das deine Bedürfnisse voll und ganz befriedigt, dann musst du's schon beauftragen. Ich bin persönlich der Auffassung, dass Denkanstöße und Programmier-Vorschläge sehr wohl in ein solches Forum gehören, bin aber nicht bereit hier vollständige Programm-Entwürfe zu entwickeln und auszubreiten. Achim Dabrunz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jürgen Scheeren Mitglied Energieanlagen Konstrukteur , CAD-Administrator
Beiträge: 262 Registriert: 03.04.2003 Autocad MEP 2016 win7x64bit
|
erstellt am: 28. Jul. 2004 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für Helmut Wieser
Hallo Achim, von Bedürfnisse befriedigen war ja auch keine Rede, das gehört glaub ich in ein anderes Forum ;-). Wollte nur wissen welche Zeilen ich im Ursprungscode gegen deine austauschen muß, wenn du sagst da fehlt an der Funktionalität nichts, dann probier ich selber den Code zu ändern. Gruß Jürgen [Diese Nachricht wurde von Jürgen Scheeren am 28. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |