Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Problem mit diesem Lisp (relative Punkteingabe)

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:  Problem mit diesem Lisp (relative Punkteingabe) (1115 mal gelesen)
ElAmigo
Mitglied



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

Beiträge: 34
Registriert: 08.04.2003

AutoCAD2002 DE, Windows 2000 SP3, Genius NewSketch 1812HR
P4 1500MHz, ATI Radeon 9700Pro, Soundblaster Ex, 2x Corsair 512MB, Asus P4Pe...

erstellt am: 20. Jul. 2006 18: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


RELATIVE.zip

 
hi2all,

funktion:
wenn ich z.b. einen kreis zeichne und weiss der zentrum ist von punkt A um x und y entfernt, benutze ich diesen lisp.
Befehl: _circle (RELATIVE) ....
beim kreis, ellipse ... funktionierts tadellos nur bei den befehlen linie, plinie funktionierts nicht. die eingabe/abfrage für x funktioniert noch, aber wenn ich den wert für y eingebe nimmt er mir die erste bestätigung mit RETURN nicht an -> muss ein zweitesmal RETURN drücken -> neuer punkt wird falsch übergeben.
am meisten wunderts mich, dass dieses lisp funktioniert wenn ich nur die acad.cui geladen habe. sobald ich meine eigene menüdatei über MENÜLAD hinzufüge, tritt dieser fehler auf   

grüße
Alex
[ElAmigo]


(defun RELATIVE (/)
(setq AX_WERTE (getvar "userr1"))
(setq AY_WERTE (getvar "userr2"))
(setq SYSFANGM (getvar "osmode"))

(setq AA_PUNKT (getpoint "\nRelativ von:")) (princ "\n")
(initget) (princ "Delta x: < ") (princ AX_WERTE) (princ " > ") (setq BX_WERTE (getreal))
(if (null BX_WERTE) (setq BX_WERTE AX_WERTE))
(initget) (princ "Delta y: < ") (princ AY_WERTE) (princ " > ") (setq BY_WERTE (getreal))
(if (null BY_WERTE) (setq BY_WERTE AY_WERTE))
(setq AA_PUNKT (list (+ (car AA_PUNKT) BX_WERTE) (+ (cadr AA_PUNKT) BY_WERTE)))
(setvar "osmode" 0)
(setvar "lastpoint" AA_PUNKT)
(command AA_PUNKT)
(setvar "osmode" SYSFANGM)
(setvar "userr1" BX_WERTE) (setvar "userr2" BY_WERTE)
)

[weiss, dass es in autocad eine relative punktübergabe gibt, benötige diesen lisp dafür, weil ich für die bewehrungspläne die betondeckung benötige -> deswegen über die variablen userr1 + userr2 -> möchte diese werte nicht immer wieder neu eingeben.]

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

Theodor Schoenwald
Ehrenmitglied



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

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 20. Jul. 2006 18:08    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 ElAmigo 10 Unities + Antwort hilfreich

Hallo,

schau Dir mal den Befehl "mapcar" an.

Gruß
Theodor Schönwald

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 18.1, LibreOffice 5+

erstellt am: 21. Jul. 2006 08: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 ElAmigo 10 Unities + Antwort hilfreich

... und guck mal z.B. hier http://ww3.cad.de/foren/ubb/Forum145/HTML/001721.shtml#000004 für die if-Abfrage (auf die Schnelle).

Gruß
Frederik

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

ElAmigo
Mitglied



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

Beiträge: 34
Registriert: 08.04.2003

AutoCAD2002 DE, Windows 2000 SP3, Genius NewSketch 1812HR
P4 1500MHz, ATI Radeon 9700Pro, Soundblaster Ex, 2x Corsair 512MB, Asus P4Pe...

erstellt am: 21. Jul. 2006 18:32    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

danke für die antworten.

leider bin ich in lisp ein kompletter anfänger. die suche im board über ´mapcar` brachte 100erte ergebnisse - ein boardmitglied heist ja MAPCAR ;o) und bei der hilfe im visual-lisp-editor reicht mein englisch nicht aus ;o(

aber ich scheitere schon bei der eingabe des y-wertes. kann bei y nur einen einstelligen wert eingeben. sobald ich z.b. 25 eingebe - schreibt es mir zuerst 2 hin, dann wird die 2 durch die 5 überschrieben.

die if-anweisung dürfte meiner meinung stimmen da die koordinaten des punktes AA_PUNKT richtig berechnet werden. hab es mit (princ AA_PUNKT) kontrolliert.

aber irgendetwas mit der punktweitergabe (command AA_PUNKT) dürfte auch nicht ganz korrekt sein.

ist mir einfach schleierhaft, da das programm funktioniert, wenn ich z.b. beim befehl linie (Relative) ein zweitesmal benutze. beim erstenmal erhalte ich eben ein falsches ergebniss - beim zweitenmal kann ich beim y-wert jede zahl eingeben und das ergebniss stimmt. 

grüße
Alex
(ElAmigo)

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

ElAmigo
Mitglied



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

Beiträge: 34
Registriert: 08.04.2003

AutoCAD2002 DE, Windows 2000 SP3, Genius NewSketch 1812HR
P4 1500MHz, ATI Radeon 9700Pro, Soundblaster Ex, 2x Corsair 512MB, Asus P4Pe...

erstellt am: 21. Jul. 2006 18:34    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

habe übrigends AutoCAD 2006 (nicht wie im profil angegeben 2002)
hab es im profil bereits geändert. wird aber wahrscheinlich erst bei einem neuen beitrag übernommen.

grüße
Alex

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

ElAmigo
Mitglied



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

Beiträge: 34
Registriert: 08.04.2003

AutoCAD2002 DE, Windows 2000 SP3, Genius NewSketch 1812HR
P4 1500MHz, ATI Radeon 9700Pro, Soundblaster Ex, 2x Corsair 512MB, Asus P4Pe...

erstellt am: 22. Jul. 2006 15:07    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

jetzt bin ich aber komplett durcheinander.   
sobald ich in autocad2006 in der statusleiste die dynamische eingabe deaktiviere funktioniert das lisp perfekt und ohne fehler.   

werde die dynamische eingabe dauerhaft deaktivieren, brauche sie nicht wirklich.
bin aber für jeden tip dankbar, damit das lisp ohne irgendwelche einschränkungen laufen würde.

grüße
Alex

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 23. Jul. 2006 17:55    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 ElAmigo 10 Unities + Antwort hilfreich

Hallo Alex,
nimm es mir bitte nicht übel, aller Anfang ist schwer, ich möchte an Deiner Routine ein wenig konstruktive Kritik üben - also sieh es sportlich und nicht als Zurechtweisung.

Zu Deinem ersten Beitrag: Du setzt Deine Variablen nicht lokal (sie sollten nach dem (/ ...) auftauchen). Das kann man (bewußt) so machen, ist aber in Deinem Fall - denke ich - eher unnötig und folglich ein wenig unsauber. Stichwort: Globale/Lokale Variablen.
Das (initget) ist - soweit ich das erkennen kann - nicht sinnvoll genutzt. Sieh Dir da nochmal die Syntax an, was initget eigentlich kann und macht, denn momentan könntest Du es genauso gut weglassen.
Die Sache mit "(command AA_PUNKT)" verstehe ich gar nicht. "Command" ruft in der Regel einen ACAD-Befehl auf, der in " " stehen muß. Komisch, daß Du da keine Fehlermeldung bekommst, denn AA_PUNKT ist wohl kein ACAD-Befehl und außerdem fehlen die " ". Z.B. würde "(command "_.line")" den Linienbefehl aufrufen. Was passiert denn, wenn Du das "command" einfach wegläßt? (Kann das von hier leider nicht testen :-( ) Bekommst Du eine Fehlermeldung?

Zu Deinem zweiten Beitrag:

Zitat:
aber ich scheitere schon bei der eingabe des y-wertes. kann bei y nur einen einstelligen wert eingeben. sobald ich z.b. 25 eingebe - schreibt es mir zuerst 2 hin, dann wird die 2 durch die 5 überschrieben.
Könnte mit "initget" zusammenhängen (siehe oben)..? Syntax angucken, was diese Funktion macht, wenn sie ohne weitere Parameter aufgerufen wird. Dafür reicht Dein Englisch sicher aus
Zitat:
ist mir einfach schleierhaft, da das programm funktioniert, wenn ich z.b. beim befehl linie (Relative) ein zweitesmal benutze. beim erstenmal erhalte ich eben ein falsches ergebniss - beim zweitenmal kann ich beim y-wert jede zahl eingeben und das ergebniss stimmt.
Wäre es möglich (habe keine Ahnung vo user-vars), daß diese Anfangs nicht belegt sind (= nil?) und erst am Ende Deiner Funktion  mit Werten versehen werden? Was passiert beim dritten (4., 5., ...) Mal?

Ein allgemeiner Tip: Gib mal "linie", "kreis" und "ellipse" in die Befehlszeile ein und notiere Dir auf einem Zettel (oder über Textfenster - F2) die vollständige Befehlsabfolge. Evtl. unterscheiden sich die Befehle in den Parametern, die ihnen übergeben werden müssen, und folglich "läuft" es eben manchmal nicht => Unterschiedliche Routinen für z.B. Kreis und Linie erforderlich?!

Zu Deiem letzten Beitrag kann ich Dir leider auch nicht helfen :-( Da kommt aber bestimmt noch was von den anderen Mitgliedern...
Frohes Schaffen wünscht
Frederik

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

ElAmigo
Mitglied



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

Beiträge: 34
Registriert: 08.04.2003

AutoCAD2002 DE, Windows 2000 SP3, Genius NewSketch 1812HR
P4 1500MHz, ATI Radeon 9700Pro, Soundblaster Ex, 2x Corsair 512MB, Asus P4Pe...

erstellt am: 24. Jul. 2006 20: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

nochmals danke für die antworten.
habe es mittlerweile selber halbweg herbekommen, sodass es funktioniert.

(defun RELATIVE (/)
(setq AX_WERTE (getvar "userr1")) (setq AY_WERTE (getvar "userr2"))
(setq SYSFANGM (getvar "osmode")) (setq SYSMODES (getvar "dynmode"))
(setvar "dynmode" 0)
(setq AA_PUNKT (getpoint "\nRelativ von:")) (princ "\n")
(princ "Delta x: < ") (princ AX_WERTE) (princ " > ") (setq BX_WERTE (getreal))
(if (= BX_WERTE nil) (setq BX_WERTE AX_WERTE))
(princ "Delta y: < ") (princ AY_WERTE) (princ " > ") (setq BY_WERTE (getreal))
(if (= BY_WERTE nil) (setq BY_WERTE AY_WERTE))
(setq AA_PUNKT (list (+ (car AA_PUNKT) BX_WERTE) (+ (cadr AA_PUNKT) BY_WERTE)))
(setvar "osmode" 0)
(command AA_PUNKT)
(setvar "osmode" SYSFANGM) (setvar "dynmode" SYSMODES)
(setvar "userr1" BX_WERTE) (setvar "userr2" BY_WERTE)
)

1) die varaiblen habe ich bewusst lokal gesetzt, da mir die variablen USERR1 und USERR2 bei jedem autocadstart gesetzt werden und ich die anderen variablen AX_WERTE und BX_WERTE in anderen lisps verwende.
2) initget war ein fehler von mir, hab es weggelassen.
3) if abfrage muss nil und nicht null heißen, wurde geändert.
4) (command AA_PUNKT) übergibt mir nur den wert als eingabe für den aktiven befehl. ist das selbe als würde ich es händisch eingeben. (diesen tip bekam ich mal vor jahren in einem autocadforum wegen dem selben lisp für autocad12)
5) diese lisp hat nur die aufgabe mir einen punkt, welcher aus dem relativen punkt + meine zusätzliche x-y koordinaten errechnet wird an den aktiven befehl zu übergeben. deswegen kann ich nicht (command "linie" ...) eingeben, da sonst der aktive befehl abgebrochen wird.

nochmals danke
grüße
Alex

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 25. Jul. 2006 08:03    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 ElAmigo 10 Unities + Antwort hilfreich

Hallo Alex,
schön, daß es klappt! Dein Feedback ist echt lobenswert. Eine Kleinigkeit noch:
Zitat:
1) die varaiblen habe ich bewusst lokal gesetzt, da mir die...
Wirklich lokal?
Erfreuter Gruß
Frederik

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