Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Lisp zum Prozent antragen bricht ab

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
  
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 (2335 mal gelesen)
oandres
Mitglied



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

Beiträge: 80
Registriert: 24.05.2004

Windows XP
Acad 2004

erstellt am: 29. Dez. 2004 15:04    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


prozent.zip

 
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


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

Beiträge: 1629
Registriert: 13.11.2003

Tastaturen, Mäuse,
Pladden, Monitore, ...

erstellt am: 29. Dez. 2004 17:17    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 oandres 10 Unities + Antwort hilfreich

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



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

Beiträge: 80
Registriert: 24.05.2004

Windows XP
Acad 2004

erstellt am: 30. Dez. 2004 08:13    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 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.




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

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 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 oandres 10 Unities + Antwort hilfreich

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



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

Beiträge: 80
Registriert: 24.05.2004

Windows XP
Acad 2004

erstellt am: 30. Dez. 2004 17: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

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



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

Beiträge: 80
Registriert: 24.05.2004

Windows XP
Acad 2004

erstellt am: 30. Dez. 2004 17:26    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

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


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

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 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 oandres 10 Unities + Antwort hilfreich

 
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



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

Beiträge: 80
Registriert: 24.05.2004

Windows XP
Acad 2004

erstellt am: 31. Dez. 2004 18:29    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

Vielen Dank für Deine Hilfe ! Das funktioniert wunderbar 

Gruß und guten Rutsch !

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

raiwae
Mitglied



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

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 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 oandres 10 Unities + Antwort hilfreich

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.


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: 01. Nov. 2008 18:57    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 oandres 10 Unities + Antwort hilfreich

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



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

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 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 oandres 10 Unities + Antwort hilfreich

dankeschön !

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)2023 CAD.de | Impressum | Datenschutz