Zitat:
Original erstellt von neo4matrix:
Bei (command "'+_dsettings" "2") stimmte aber etwas nicht: Plus und Underline vertauscht
Oh ja, sorry. Keine Ahnung wie und wann das passiert ist. Aber Du denkst ja glücklicherweise mit
(Hab's im obigen Beitrag einerseits korrigiert, aber auch auskommentiert, weil noch nicht perfekt.)
Das war mir bewusst, dass mit F3 der Dialog kam, wenn osmode auf 0 ist. Ist bei mir aber nicht relevant...
Das ist gut für Dich. Ich hatte nur den sportlichen Ehrgeiz, die F3-Taste so gut und genau wie möglich "nachzuahmen".
' hat nicht funktioniert.
Daran knabbere ich noch immer.
In älteren AutoCAD-Versionen ist es kein Problem, seit ACAD 2015 jedoch klappt das nicht mehr - und ich habe noch keine Idee warum. Da die F3-Taste bei laufendem Befehl transparent benutzt werden kann, wollte ich das hier eben auch nachbilden. Geht auch in den meisten Fällen, natürlich muß dazu der Befehl OsToggle mit einem führenden Apostroph (also 'ostoggle) eingegeben werden. Hat jedoch OSMODE aktuell den Wert 16384 (kein OFANG gewählt und global ausgeschaltet), sollte das Programm ofang einschalten (kein Problem) und das Dialogfenster öffnen. Das aber schlägt bei neueren AurtoCAD-Versionen fehl.
Muß ich nochmal drüber schlafen ...
Ich verstehe dein Lisp zwar nicht 100%,
Ganz kurz:
Die Objektfänge werden in OSMODE bitcodiert gespeichert, also wenn Bit 1 gesetzt ist ist Endpunkt aktiv, Bit 2 ist für den Mittelpunkt zuständig, Bit 3 für den Zentrumspunkt usw. . Sind also beispielsweise Endpunkt und Zentrumspunkt akiv, hat OSMODE den Wert 5 (1*2^0 + 0*2^1 + 1*2^2).
Wenn Bit 15 gesetzt (= 1) ist, ist der Ofang ausgeschaltet, ansonsten (wenn Bit 15 = 0) eingeschaltet. Zur Lösung Deines Problems muß man also nur dafür sorgen, daß das Programm das Bit 15 wechselweise ein- und wieder ausschaltet, die anderen Bits dürfen nicht verändert werden.
Dazu kann man die logische Funktion XOR (exclusives ODER) verwenden. Es werden zwei Zahlen bitweise miteinander verglichen. Haben die beiden zu vergleichencden Bits unterschiedliche Werte, ist das Ergebnisbit = 1, haben beide zu vergleichenden Bits den gleichen Wert (beide 0 oder beide 1) ist das Ergebnis 0.
Die ominöse Zahl 16384 entspricht einer Zahl, bei der nur das Bit 15 gesetzt ist (2^14). Vergleicht man nun diese Zahl 16384 mit dem aktuellen Wert von OSMODE, wechselt immer der Wert des Bit 15, alle anderen bleiben erhalten.
Wie nun leicht zu erraten ist, verbirgt sich hinter (boole 6 zahl1 zahl2) das exclusive ODER der beiden Zahlen. Diese erste Codezeile würde also genügen, um den Ofang global ein- und auszuschalten. Der Rest (alles innerhalb der cond-Anweisung) ist zusätzlicher Komfort.
Sollten noch Fragen sein, ... nein, an dieser Stelle höre ich nun auf
lg
Jürgen
------------------
Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty)
[Diese Nachricht wurde von jupa am 17. Nov. 2016 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP