| | | 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
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 / zitieren --> Unities abgeben:
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
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 20. Jul. 2006 18:08 <-- editieren / zitieren --> Unities abgeben: Nur für ElAmigo
|
Paulchen Mitglied Bauing./SW-Entwickler
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 / zitieren --> Unities abgeben: Nur für ElAmigo
|
ElAmigo Mitglied
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 / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben:
|
ElAmigo Mitglied
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 / zitieren --> Unities abgeben:
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
Beiträge: 1227 Registriert: 19.08.2004
|
erstellt am: 23. Jul. 2006 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für ElAmigo
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
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 / zitieren --> Unities abgeben:
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
Beiträge: 1227 Registriert: 19.08.2004
|
erstellt am: 25. Jul. 2006 08:03 <-- editieren / zitieren --> Unities abgeben: Nur für ElAmigo
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 >>)
|