| |
| 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 – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Probleme mit OSNAP / OSMODE - ON / OFF (3740 mal gelesen)
|
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004
|
erstellt am: 29. Dez. 2005 13:35 <-- editieren / zitieren --> Unities abgeben:
Liebe Gemeinde, bei diversen Zeichenbefehlen, die aus AutoLISP heraus aufgerufen werden, passiert scheinbar nicht das, was passieren sollte. Vor einiger Zeit bin ich schon mal auf einen Beitrag gestoßen, der - so ganz nebenbei - erwähnt, man solle doch OSNAP auf "0" (Null) setzen. Diese Randbemerkung wurde nicht weiter diskuiert. Es ging darum, eine Linie "von Punkt... nach Punkt..." zu zeichnen. Beispielsweise wurde hier eine Linie mit der Länge "0" erstellt. Mit OSMODE auf "0" wird eine Linie mit der gewünschten Länge konstruiert. Fragen: Welchen Einfluß haben die Einstellungen der o.g. sysvars? Warum klappt es, wenn die sysvars auf "0" gestellt werden? Spielt z.B der Abstand der beiden Punkte voneinander eine Rolle? Inwiefern macht sich die Art der Koordinateneingabe bemerkbar (mit "@" oder absolut)? Da ich in Lisp nicht so fit bin, arbeite ich bisher mit "command". Tritt dieses Phänomen auch bei "entmake" auf? Zwar läßt sich dieses Problem durch ordentliche Steuerung der sysvars umgehen. Allerdings würde ich gerne den Hintergrund verstehen. Bin für jede Hilfe dankbar! Freddy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Dez. 2005 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für Paulchen
Zitat: Original erstellt von Paulchen:
Fragen: Welchen Einfluß haben die Einstellungen der o.g. sysvars? Warum klappt es, wenn die sysvars auf "0" gestellt werden? Spielt z.B der Abstand der beiden Punkte voneinander eine Rolle?
Dazu gibt die ACAD-Hilfe eigentlich ausfürlich Auskunft: Zitat: OSMODE (Systemvariable) Typ: Ganzzahl Gespeichert in: Registrierdatenbank des Systems Ausgangswert: 4133 Stellt fortlaufende Objektfangmodi unter Verwendung der folgenden Bitcodes ein: 0 KEIner 1 ENDPunkt 2 MITtelpunkt 4 ZENtrum 8 PUNkt 16 QUADrant 32 SCHnittpunkt 64 BASispunkt 128 LOT 256 TANgente 512 NÄChster Punkt 1024 QUIck 2048 Angenomm. Schnittpunkt (ANP) 4096 HILfslinie 8192 PARallelUm mehrere Objektfangmodi festzulegen, geben Sie die Summe der Einzelwerte ein. Mit der Eingabe 3 aktivieren Sie beispielsweise die Objektfangmodi Endpunkt (1) und Mittelpunkt (2). Wenn Sie 16383 eingeben, werden alle Objektfangmodi verwendet. Wenn Sie die Objektfangmodi mit der Schaltfläche Ofang in der Statuszeile deaktivieren, wird der Bitcode 16384 (0x4000) zusätzlich zum normalen Wert von OSMODE zurückgegeben. Mit diesem zusätzlichen Wert können Entwickler Anwendungen für AutoCAD schreiben und diesen Modus von den Objektfangmodi unterscheiden, die aus dem Dialogfeld Entwurfseinstellungen heraus deaktiviert wurden. Mit diesem Bit können die Objektfangmodi aktiviert und deaktiviert werden. Wenn Sie einen Wert für OSMODE eingeben, während dieses Bit nicht gesetzt ist, aktivieren Sie die fortlaufenden Objektfangmodi.
Weiterhin ist OSNAPCOORD vielleicht interessant:
OSNAPCOORD (Systemvariable) Typ: Ganzzahl Gespeichert in: Registrierdatenbank des Systems Ausgangswert: 2 Steuert, ob in der Befehlszeile eingegebene Koordinaten fortlaufende Objektfänge außer Kraft setzen. 0 Fortlaufende Objektfangeinstellungen setzen Tastaturkoordinateneinträge außer Kraft. 1 Tastatureinträge setzen Objektfangeinstellungen außer Kraft. 2 Tastatureinträge setzen Objektfangeinstellungen, bis auf diejenigen in Skripten, außer Kraft. und dann gibt's noch den Befehl "Öffnung"
Zitat: Original erstellt von Paulchen: Da ich in Lisp nicht so fit bin, arbeite ich bisher mit "command". Tritt dieses Phänomen auch bei "entmake" auf?
Nein, entmake interessieren die Objektfänge nicht, das es die Elemente entsprechend der übergebenen GC-Liste in der Datenbank erzeugt. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." 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: 29. Dez. 2005 15:00 <-- editieren / zitieren --> Unities abgeben:
Danke schön für Deine Bemühungen! Allerdings läßt sich mein Problem dadurch nicht vollständig lösen. Hier eine genauere Beschreibung anhand von zwei Beispielen. Zunächst der Aufruf über die Befehlszeile: Zitat: Command: _.line Specify first point: 0,0,0 Specify next point or [Undo]: 10,0,0 Specify next point or [Undo]: @0,10,0 Specify next point or [Close/Undo]:
Hier werden hübsch anständig zwei Linien erstellt. Nun der gleiche Ablauf als defun: Code: (defun test (/ pt1 pt2) (setq pt1 '(0 0 0) pt2 '(10 0 0) ) (command "_.line" pt1 pt2 "@0,10,0" "") )
Funktioniert auch prächtig, solange keine Objekte "in der Nähe" sind. Sobald andere Elemente existieren, wird die defun gestört. Hier der Punkt pt2 nach Eingabe von "id" in der Befehlszeile: Zitat: id Specify point: X = 9.9695 Y = -0.5356 Z = 0.0000
Dieser Punkt entspricht nun wirklich nicht den Vorgaben; zufällig (?) ist dieser Punkt auch der Mittelpunkt einer der zum Test willkürlich erstellten Linien. An diesem hängt sich die defun dann auf. Auch der Nullpunkt (in der defun pt1) ist nicht der Startpunkt der ersten Linie. Ein Bildchen im Anhang hilft vielleicht, das nachzuvollziehen. Die weißen Linien sind die willkürlich erstellten Stör-Test-Objekte, die magentafarbenen die der defun, in gelb die der Befehlszeileneingabe. Kannst Du/ihr zur Erweiterung meines Horizontes beitragen? [Nachtrag] Ich arbeite mit ACAD2000; Werte der sysvars (für alle o.g. Fälle unverändert): OSMODE 175, OSNAP on, OSNAPCOORD 2. Hm - irgendwie hat es mir beim Editieren die Formatierung zerlegt. Ich bitte um Verzeihung:-) [/Nachtrag] Freddy dankt! [Diese Nachricht wurde von Paulchen am 29. Dez. 2005 editiert.] [Diese Nachricht wurde von Paulchen am 29. Dez. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Dez. 2005 18:51 <-- editieren / zitieren --> Unities abgeben: Nur für Paulchen
Steht zwar schon alles da, aber setze mal an den Anfang deines Lisps (setvar "OSNAPCOORD" 1) oder (setvar "OSMODE" 0) am Ende kannst du die Variablen ja wieder zurücksetzen oder du nimmst gleich den hier im Forum diskutierten Errorhandler!
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
andi2050 Mitglied
Beiträge: 107 Registriert: 11.03.2003
|
erstellt am: 29. Dez. 2005 19:19 <-- editieren / zitieren --> Unities abgeben: Nur für Paulchen
Hallo allerseits ! Beim Durchlesen des Threads ist mir bei einer Antwort von Cadmium (Auszug aus der Hilfedatei) was aufgefallen. Durch setzen/löschen eines Bits in "OSMODE" kann der Objektfang temporär ausgeschaltet werden, ohne daß die Objektfangbits gelöscht werden (wie beim Drücken von F3) Müsste mit folgendn Funktionen machbar sein (nicht ausführlich getestet) (defun os-off (/) (setvar "OSMODE"(logior (getvar "OSMODE") 16384)) ) (defun os-on (/) (setvar "OSMODE"(logand (getvar "OSMODE") 16383)) ) Beispiel: ... (os-off) (command "_LINE".......) (commnad "_CIRCLE" .......) (os-on) ... Man muß die aktuellen Objektfangeinstellungen nicht in einer Variablen zwischenspeichern wie sonst üblich: ... (setq osvar (getvar "OSMODE")) (setvar "OSMODE" 0) ... Zeichnen ... (setvar "OSMODE" osvar) ... Grüße Andi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Dez. 2005 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für Paulchen
@andi ..kann man machen ..entspricht den "schalten" des OFang-Buttons in der Statusleiste... ich ziehe jedoch die Variante mit den Errorhandler deinen beiden Funktionen vor, da das Rücksetzen auch im Fehlerfall bzw. User-Abbruch erfolgt. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." 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: 30. Dez. 2005 11:54 <-- editieren / zitieren --> Unities abgeben:
|