Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  AutoCAD Objektfang (Ofang) Ein oder Aus (toggle) wie F3 aber als LISP

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:  AutoCAD Objektfang (Ofang) Ein oder Aus (toggle) wie F3 aber als LISP (1923 mal gelesen)
neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

erstellt am: 15. Nov. 2016 16:29    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


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



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

Beiträge: 136
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 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

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


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

Beiträge: 6050
Registriert: 16.09.2004

WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.

erstellt am: 15. Nov. 2016 16:52    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 neo4matrix 10 Unities + Antwort hilfreich

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



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

Beiträge: 136
Registriert: 15.01.2008

erstellt am: 15. Nov. 2016 17:02    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

Super cool! Funktioniert 1A! Allerbesten Dank!

mfg neo

------------------
Welcome to the Real

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

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 15. Nov. 2016 17:04    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 neo4matrix 10 Unities + Antwort hilfreich

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


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

Beiträge: 6050
Registriert: 16.09.2004

WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.

erstellt am: 15. Nov. 2016 17:57    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 neo4matrix 10 Unities + Antwort hilfreich

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



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

Beiträge: 136
Registriert: 15.01.2008

erstellt am: 17. Nov. 2016 17:38    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

@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


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

Beiträge: 6050
Registriert: 16.09.2004

WINDOWS Vista Ultimate SP2 (64bit), NVIDIA Geforce 9600M GT, AutoCAD 2013.

erstellt am: 17. Nov. 2016 19:16    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 neo4matrix 10 Unities + Antwort hilfreich

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



Mechanischer Konstrukteur / Projektassistent (m/w/d) Auftragsabwicklung

DFT ist ein Bielefelder Unternehmen mit ca. 450 Mitarbeitern, gegründet 1954. Der Maschinenbauer gehört seit 2010 zur österreichischen KNAPP AG mit Sitz in Graz, Steiermark. DFT entwickelt, produziert und liefert Sortier- und Sequenzieranlagen zur effizienten Bearbeitung von eCommerce-Aufträgen und zur Filialversorgung. Die Spezialität von DFT ist Hängefördertechnik in verschiedenen Ausprägungen ...

Anzeige ansehenKonstruktion, Visualisierung
neo4matrix
Mitglied



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

Beiträge: 136
Registriert: 15.01.2008

erstellt am: 18. Nov. 2016 17:20    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

Hallo Jürgen


Besten Dank für deine Ausführungen.
Das mit der Trasparenz ist wirklich ne Knacknuss...


lg
neo

------------------
Welcome to the Real

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