Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Additions-LISP erweitern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Additions-LISP erweitern (629 mal gelesen)
Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


Sehen Sie sich das Profil von Helmut Wieser an!   Senden Sie eine Private Message an Helmut Wieser  Schreiben Sie einen Gästebucheintrag für Helmut Wieser

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 19. Jul. 2004 11:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13435
Registriert: 30.11.2003

.

erstellt am: 19. Jul. 2004 12:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Erwin Fortelny an!   Senden Sie eine Private Message an Erwin Fortelny  Schreiben Sie einen Gästebucheintrag für Erwin Fortelny

Beiträge: 871
Registriert: 13.12.2001

erstellt am: 19. Jul. 2004 12:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Helmut Wieser an!   Senden Sie eine Private Message an Helmut Wieser  Schreiben Sie einen Gästebucheintrag für Helmut Wieser

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 19. Jul. 2004 12:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Funktioniert beides!

Herzlichen Dank

Helmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Dabrunz an!   Senden Sie eine Private Message an Dabrunz  Schreiben Sie einen Gästebucheintrag für Dabrunz

Beiträge: 127
Registriert: 28.05.2003

erstellt am: 23. Jul. 2004 10:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

Ok - reduziere meine Behauptung "beliebig" auf "die 4 Grundrechenarten" 

------------------
Gruß, Ernst

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Jürgen Scheeren
Mitglied
Energieanlagen Konstrukteur , CAD-Administrator


Sehen Sie sich das Profil von Jürgen Scheeren an!   Senden Sie eine Private Message an Jürgen Scheeren  Schreiben Sie einen Gästebucheintrag für Jürgen Scheeren

Beiträge: 255
Registriert: 03.04.2003

Autocad MEP 2016
win7x64bit

erstellt am: 27. Jul. 2004 11:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Dabrunz an!   Senden Sie eine Private Message an Dabrunz  Schreiben Sie einen Gästebucheintrag für Dabrunz

Beiträge: 127
Registriert: 28.05.2003

erstellt am: 27. Jul. 2004 13:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Jürgen Scheeren an!   Senden Sie eine Private Message an Jürgen Scheeren  Schreiben Sie einen Gästebucheintrag für Jürgen Scheeren

Beiträge: 255
Registriert: 03.04.2003

Autocad MEP 2016
win7x64bit

erstellt am: 28. Jul. 2004 09:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Helmut Wieser 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz