| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: AutoCAD Objektfang (Ofang) Ein oder Aus (toggle) wie F3 aber als LISP (2020 / mal gelesen)
|
neo4matrix Mitglied
Beiträge: 152 Registriert: 15.01.2008 HP™ z2 Tower G4 Workstation mit Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz 32 GB Arbeitsspeicher 1 TB HP Z Turbo PCIe® SSD NVIDIA® Quadro® P2200 mit 5 GB RAM HP™ 24" LPS LED TFT 16:10 ZR2440w. Windows 10 Pro, 64 Bit AutoCAD 2019 Design Suite Standard, SP1, 64 Bit ecscad 2019, v19.1.0.20, 64 Bit Microstation v8 2004, 32 Bit MicroStation CONNECT Edition Update 11 Microsoft Office 365, 32 Bit Microsoft Visio 2013, 32 Bit
|
erstellt am: 15. Nov. 2016 16:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Gemeinde Ich tüftle schon seit längerem an einem Listp, welches GENAU das gleiche macht, wie die F3 Taste unter AutoCAD. Nämlich den Objektfang umschalten. Hier schon mal mein List Code: (defun C:OFangToggle ( / aosmo) (setq aosmo (getvar "OSMODE")) (if (> aosmo 16383) ((setvar "OSMODE" (- aosmo 16384))(princ "\n<Ofang ein>")) ((setvar "OSMODE" (+ aosmo 16384))(princ "\n<Ofang aus>")) ) (prin1) )
Er funktioniert so weit ganz gut, Nur leider kommt beim Aufrufen des Befehls OFangToggle stets eine Fehlermeldung!
Jemand eine Erklärung dafür? Besten Dank schon mal. mfg neo ------------------ Welcome to the Real Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neo4matrix Mitglied
Beiträge: 152 Registriert: 15.01.2008 HP™ z2 Tower G4 Workstation mit Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz 32 GB Arbeitsspeicher 1 TB HP Z Turbo PCIe® SSD NVIDIA® Quadro® P2200 mit 5 GB RAM HP™ 24" LPS LED TFT 16:10 ZR2440w. Windows 10 Pro, 64 Bit AutoCAD 2019 Design Suite Standard, SP1, 64 Bit ecscad 2019, v19.1.0.20, 64 Bit Microstation v8 2004, 32 Bit MicroStation CONNECT Edition Update 11 Microsoft Office 365, 32 Bit Microsoft Visio 2013, 32 Bit
|
erstellt am: 15. Nov. 2016 16:39 <-- editieren / zitieren --> Unities abgeben:
Die Fehlermeldung ist übrigens: Befehl: OFANGTOGGLE <Ofang aus>; Fehler: Fehlerhafte Funktion: 24191 Befehl: OFANGTOGGLE <Ofang ein>; Fehler: Fehlerhafte Funktion: 7807 Die Zahl hinten ist der aktuelle OSMODE. mfg neo ------------------ Welcome to the Real Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6052 Registriert: 16.09.2004 WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.
|
erstellt am: 15. Nov. 2016 16:52 <-- editieren / zitieren --> Unities abgeben: Nur für neo4matrix
Versuchs mal damit: (defun C:OFangToggle ( / aosmo) (setq aosmo (getvar "OSMODE")) (if (> aosmo 16383) (progn(setvar "OSMODE" (- aosmo 16384))(princ "\n<Ofang ein>")) (progn (setvar "OSMODE" (+ aosmo 16384))(princ "\n<Ofang aus>")) ) (prin1) ) Jürgen ------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 15. Nov. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neo4matrix Mitglied
Beiträge: 152 Registriert: 15.01.2008 HP™ z2 Tower G4 Workstation mit Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz 32 GB Arbeitsspeicher 1 TB HP Z Turbo PCIe® SSD NVIDIA® Quadro® P2200 mit 5 GB RAM HP™ 24" LPS LED TFT 16:10 ZR2440w. Windows 10 Pro, 64 Bit AutoCAD 2019 Design Suite Standard, SP1, 64 Bit ecscad 2019, v19.1.0.20, 64 Bit Microstation v8 2004, 32 Bit MicroStation CONNECT Edition Update 11 Microsoft Office 365, 32 Bit Microsoft Visio 2013, 32 Bit
|
erstellt am: 15. Nov. 2016 17:02 <-- editieren / zitieren --> Unities abgeben:
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 15. Nov. 2016 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für neo4matrix
Hallo neo, die Fehlermeldung kommt weil du einfach zwei Ausdrücke ohne progn in eine Klammer bringst. ((setvar "OSMODE" (- aosmo 16384))(princ "\n<Ofang ein>")) müsste so aussehen: (progn (setvar "OSMODE" (- aosmo 16384))(princ "\n<Ofang ein>")) EDIT_ Da schaut man grade mal nach und schon ist wieder jemand schneller. Ich glaub ich mach jetzt Feierabend
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de [Diese Nachricht wurde von Andreas Kraus am 15. Nov. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6052 Registriert: 16.09.2004 WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.
|
erstellt am: 15. Nov. 2016 17:57 <-- editieren / zitieren --> Unities abgeben: Nur für neo4matrix
Hier noch eine etwas kürzere Fassung: (defun C:OsToggle ( / ) (setvar "osmode" (boole 6 16384 (getvar "osmode"))) (if (> 16384 (getvar "osmode")) (princ "\n<Ofang ein>") (princ "\n<Ofang aus>") ) (princ) ) Und wenn man noch auf die quittierende Ausgabe (ein / aus) verzichten kann oder will, reduziert sich das Ganze auf die erste (setvar ...)-Zeile. [Nachtrag]: Übrigens: ("welches GENAU das gleiche macht, wie die F3 Taste") Einen kleinen Unterschied zur F3-Taste gibt es noch: Wenn kein einziger Objektfang gewählt ist und man schaltet Ofang mittels F3 ein, wird das Dialogfenster geöffnet und man hat die Möglichkeit, einen oder mehrere Ofänge zu aktivieren. Macht man das nicht entsteht der etwas irritierende Zustand, daß Ofang zwar eingeschaltet ist, aber dennoch kein einziger wirkt. Wenn es wirklich genau so wirken soll, sind es doch wieder ein paar Zeilen mehr: (defun C:OsToggle ( / ) (setvar "osmode" (boole 6 16384 (getvar "osmode"))) (cond ;((= 0 (getvar "osmode"))(command "'_+dsettings" "2")) ;;; [EDIT] funktioniert nur bis ACAD 2014 ((> 16384 (getvar "osmode")) (princ "\n<Ofang ein>")) ('T (princ "\n<Ofang aus>")) ) (princ) ) Jürgen
------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 15. Nov. 2016 editiert.] [EDIT]: Dem (command ...)-Ausdruck noch ein ' gegönnt. [Diese Nachricht wurde von jupa am 16. Nov. 2016 editiert.] [Diese Nachricht wurde von jupa am 17. Nov. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neo4matrix Mitglied
Beiträge: 152 Registriert: 15.01.2008 HP™ z2 Tower G4 Workstation mit Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz 32 GB Arbeitsspeicher 1 TB HP Z Turbo PCIe® SSD NVIDIA® Quadro® P2200 mit 5 GB RAM HP™ 24" LPS LED TFT 16:10 ZR2440w. Windows 10 Pro, 64 Bit AutoCAD 2019 Design Suite Standard, SP1, 64 Bit ecscad 2019, v19.1.0.20, 64 Bit Microstation v8 2004, 32 Bit MicroStation CONNECT Edition Update 11 Microsoft Office 365, 32 Bit Microsoft Visio 2013, 32 Bit
|
erstellt am: 17. Nov. 2016 17:38 <-- editieren / zitieren --> Unities abgeben:
@Andreas Kraus: Trotzdem Besten Dank! Es erstaunt mich immer wieder wie schnell alle hier antworten... Der Ausdruck "progn" kannte ich bisher nicht... @jupa: Das war mir bewusst, dass mit F3 der Dialog kam, wenn osmode auf 0 ist. Ist bei mir aber nicht relevant... Bei (command "'+_dsettings" "2") stimmte aber etwas nicht: Plus und Underline vertauscht sowie Transparts ' hat nicht funktioniert. So funktionierte es aber: (command "_+dsettings" "2") Ganzer Code:
(defun C:OFangToggle ( / ) (setvar "osmode" (boole 6 16384 (getvar "osmode"))) (cond ((= 0 (getvar "osmode"))(command "_+dsettings" "2")) ((> 16384 (getvar "osmode")) (princ "\n<Ofang ein>")) ('T (princ "\n<Ofang aus>")) ) (princ) ) Ich verstehe dein Lisp zwar nicht 100%, aber trotzdem Besten Dank!
mfg neo
------------------ Welcome to the Real Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6052 Registriert: 16.09.2004 WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.
|
erstellt am: 17. Nov. 2016 19:16 <-- editieren / zitieren --> Unities abgeben: Nur für neo4matrix
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 |
neo4matrix Mitglied
Beiträge: 152 Registriert: 15.01.2008 HP™ z2 Tower G4 Workstation mit Intel® Core™ i9-9900K 8x 3.6 GHz-5.0 GHz 32 GB Arbeitsspeicher 1 TB HP Z Turbo PCIe® SSD NVIDIA® Quadro® P2200 mit 5 GB RAM HP™ 24" LPS LED TFT 16:10 ZR2440w. Windows 10 Pro, 64 Bit AutoCAD 2019 Design Suite Standard, SP1, 64 Bit ecscad 2019, v19.1.0.20, 64 Bit Microstation v8 2004, 32 Bit MicroStation CONNECT Edition Update 11 Microsoft Office 365, 32 Bit Microsoft Visio 2013, 32 Bit
|
erstellt am: 18. Nov. 2016 17:20 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|