Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Objektfang 2D

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:  Objektfang 2D (3347 mal gelesen)
Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 11. Jul. 2011 11:32    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

Hi an die Lisp-Profis,

wir haben hier seit neuestem Bricscad im Einsatz.
Weitestgehend sind wir damit auch recht zufrieden.

Das größte Problem haben wir aber bisher mit Befehlen, die "auf einer Ebene" zeichnen, wie z.B. Kreis, Bogen und (2D-)Polylinie.
Wenn man bei diesen Befehlen mit Objektfang arbeitet und die gefangenen Objekte Z-Koordinaten haben, funktioniert das mit Bricscad nicht.

Unter http://ww3.cad.de/foren/ubb/Forum145/HTML/003325.shtml  wurde das Problem für Kreise schon behandelt. Da das selbe Problem aber auch bei anderen Befehlen besteht, wollte ich das ganze anders anpacken und den Objektfang "umbiegen".

Bisher sieht meine Funktion so aus:

Code:
(defun C:2d ()
  (setq P3 (getpoint "3D-Punkt wählen: "))
  (setq sosmode (getvar "osmode"))
  (setq x (rtos (car P3) 2))
  (setq y (rtos (cadr P3) 2))
  (setvar "osmode" 0)
  (setq P2 (strcat x "," y))
  (princ P2)
)

Wenn ich jetzt vor dem Fangen des Objekts '2d eingebe, wandelt Bricscad die Koordinaten in 2D um.
Probleme habe ich noch folgende:

  • Ich muss die voreingestellten Objektfänge deaktivieren, damit bei der Übergabe nicht wieder das Objekt gefangen und so wieder eine 3D-Koordinate gefangen wird. Ist es möglich, nach der Übergabe der 2D-Koordinate den Objektfang wieder zurück zu stellen (setvar "osmode" sosmode) ohne dabei einen Wert zurück zu geben?
  • Optimal wäre es noch, wenn es möglich wäre, den 2D-Fang fest einzustellen, so dass man nicht bei jedem Punkt zuerst auf 2D umstellen muss... Ist sowas irgendwie möglich?

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

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 11. Jul. 2011 12:55    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 Vino 10 Unities + Antwort hilfreich

Ich spreche mal von/vergleiche mit AutoCAD...

ad 1.
(setq oldosmode (getvar "osmode"))
...
(setvar "osmode" oldosmode)

ad 2.
Gibt es im Bricscad die Systemvariable "OSNAPZ"? Wenn ja: Die auf "0".

------------------
Grüsse

Thomas

Korrekturen zum Kochbuch AutoLISP

[Diese Nachricht wurde von tunnelbauer am 11. Jul. 2011 editiert.]

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 11. Jul. 2011 13:45    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

Hi Thomas,

Danke für die Antwort.

Die Systemvariable OSNAPZ gibt es unter Bricscad leider nicht... Das wäre eigentlich die Lösung meines Problems.

Zu meinem 1. Punkt:
Das Problem liegt nicht darin, wie man die Systemvariable ausliest und zurücksetzt.
Das Problem ist, dass ich das Zurücksetzen der Systemvariable erst nach der Ausgabe der 2D-Koordinate erledigen darf, weil sonst der Objektfang greift und ich wieder eine 3D-Koordinate erhalte.
Meine Frage war, wie ich es unterdrücken kann, dass am ende der Funktion noch ein weiterer Wert ausgegeben wird.
(princ) funktioniert nicht.

Gruß
Stefan

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

CADchup
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 11. Jul. 2011 14:33    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 Vino 10 Unities + Antwort hilfreich

Hi,

in AutoCAD hilft es, die Systemvariable OSNAPCOORD auf 1 zu stellen. Ich meine mich aber erinnern zu können, dass Bricscad sich anders verhält. 

Von daher versuch' mal dieses. Auch das läuft in Acad:

Code:
(defun C:2d (/ p)
  (setq p (getpoint "3D-Punkt wählen: "))
  (command "_none" (list (car p) (cadr p)))
)


Gruß
CADchup

------------------
CADmaro.de

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

Theodor Schoenwald
Ehrenmitglied



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

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 11. Jul. 2011 21:44    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 Vino 10 Unities + Antwort hilfreich

Hallo Stefan,

ist Dir bekannt, dass es bei CAD.DE ein Bricscad-Forum gibt?

Da aber schon einige Antworten gekommen sind, macht es vielleicht keinen Sinn, zwischen den Antworten, in das andere Firum zu wechseln.

Gruß
Theodor

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 12. Jul. 2011 08: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 Theodor,

Ja, ich weiß dass es ein Bricscad-Forum gibt, aber ich dachte dass mein Problem weniger Bricscad- als Lispspezifisch ist und da das Problem in oben verlinktem Thread ja auch schon hier angesprochen wurde, dachte ich, ich wäre hier richtig.
Sorry, falls das falsch war.

@CADchup:
Leider funktioniert deine Lösung unter Bricscad auch nicht.

Gibt es unter Lisp keine Möglichkeit, bei Funktionen nach dem Rückgabewert noch Funktionen aufzurufen, ohne einen weiteren Wert zurück zu geben?
Mein erstes Script funktioniert soweit unter Bricscad. Das einzige Problem ist, dass ich danach den Objektfang nicht mehr zurück stellen kann. 

Gruß
Stefan

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 12. Jul. 2011 08: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 Nur für Vino 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Vino:
Gibt es unter Lisp keine Möglichkeit, bei Funktionen nach dem Rückgabewert noch Funktionen aufzurufen, ohne einen weiteren Wert zurück zu geben?
Mein erstes Script funktioniert soweit unter Bricscad. Das einzige Problem ist, dass ich danach den Objektfang nicht mehr zurück stellen kann. 

vllt. bringt dich ein Reaktor weiter, nur kann ich dir nicht sagen ob Bricscad Reaktoren unterstützt

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 12. Jul. 2011 09:09    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 Vino 10 Unities + Antwort hilfreich

Hm.. vielleicht so:
(defun C:2d ()
  (setq P3 (getpoint "3D-Punkt wählen: "))
  (setq sosmode (getvar "osmode"))
  (setq x (rtos (car P3) 2))
  (setq y (rtos (cadr P3) 2))
  (setvar "osmode" 0)
  (setq P2 (strcat x "," y))
  (command P2)
  (setvar "osmode" sosmode)
  (prin1)
)
Kenne mich mit Bricscad nicht aus, daher jetzt eher so ein stochern im Nebel.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

Theodor Schoenwald
Ehrenmitglied



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

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 12. Jul. 2011 09:23    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 Vino 10 Unities + Antwort hilfreich

Hallo Stefan,

ich denke nicht dass es falsch war Deinen Beitrag im Lisp-Forum zu bringen, mein Hinweis war nur als Info gedacht.

Noch ein Tipp: frage zu Deinem Anliegen doch einfach Torsten Moses, er macht die Lispanbindungen bei Bricscad.


Gruß
Theodor

[Diese Nachricht wurde von Theodor Schoenwald am 12. Jul. 2011 editiert.]

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

CADchup
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 12. Jul. 2011 13: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 Nur für Vino 10 Unities + Antwort hilfreich

Hi,
   
Zitat:
Original erstellt von Vino:
@CADchup:
Leider funktioniert deine Lösung unter Bricscad auch nicht.


Ich hätte mir vielleicht ein etwas ausführlicheres Feedback gewünscht.    
(Nur wenige haben hier anscheinend eine Bricscad-Installation zur Hand) ;)

Als Workaround fällt mir ansonsten nur Bit 16384 der Sysvar OSMODE ein. Addierst du das innerhalb deiner Funktion zu OSMODE, wird der Objektfang abgeschaltet, aber die Einstellungen bleiben erhalten.
Nach Ablauf deines Tools kannst du durch manuelles Einschalten des Objektfangs mit F3 (<- AutoCAD-Kurztaste!) deine ursprünglichen Einstellungen wieder herstellen.

Code:
(setvar "OSMODE" (+ 16384 (getvar "OSMODE")))

Gruß
CADchup

------------------
CADmaro.de

[Diese Nachricht wurde von CADchup am 12. Jul. 2011 editiert.]

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 12. Jul. 2011 14:32    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 CADchup,

sorry, dass meine Antwort so knapp ausfiel... Also hier nochmal eine ausführliche Beschreibung, wie sich BricsCAD verhält:

Generell scheint Bricscad eine Rückgabe der Koordinaten über (command ...) als "eigenen Befehl" zu verstehen. Es wird das Element, das an der Koordinate liegt ausgewählt und der "äussere Befehl" läuft unbeeinflusst weiter.
mit (princ ...) funktioniert das aber. Egal ob als Liste oder als Koordinatenpaar übergeben.

Darum sieht meine Funktion inzwischen so aus:

Code:
(defun C:2d ()
  (setq P3 (getpoint "3D-Punkt wählen: "))
  (setq sosmode (getvar "osmode"))
  (setvar "osmode" 0)

  (setq P2 (list (car P3) (cadr P3)))
  (princ P2)
)

So weit funktioniert alles. Allerdings ist der Objektfang danach immer ausgeschaltet.

Das Problem ist jetzt nicht das Speichern und Ausschalten des Objektfangs sondern das wieder Einschalten.
Wenn ich nach dem (princ P2) eine weitere Funktion aufrufe klappts nicht mehr.

Versucht habe ich bisher:

  • Code:
    ...
      (princ P2)
      (setvar "osmode" sosmode)
    )

    3D-Punkt wählen: (11.5325 4.55728)1
    Der Objektfangwert wird mit ausgegeben... Es wird ein Punkt im Abstand des Wertes von sosmode vom ersten Punkt "angeklickt" und der 2d-Punkt wird scheinbar ignoriert.

  • Code:
    ...
      (princ P2)
      (setvar "osmode" sosmode)
      (princ)
    )

    3D-Punkt wählen: (11.5325 4.55728)
    Winkel/Mittelpunkt/Richtung/Endpunkt/RAdius/<Zweiter Punkt>:
    Eingabe wurde nicht erkannt.  Neuer Versuch

    Ausgabe im Textfenster scheint zu stimmen, aber Bricscad akzeptiert die Koordinate nicht.

  • Das gleiche passiert mit (prin1) und (print), ein "" als parameter klappt auch nicht.

Deine Lösung mit dem Erhöhen von OSMODE und dem manuellen Zurücksetzen per F3 funktioniert... Ich hatte mir zwar eine etwas elegantere Lösung gewünscht, aber damit werde ich dann wohl leben müssen.

Danke an alle.

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

CADchup
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 12. Jul. 2011 15: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 Nur für Vino 10 Unities + Antwort hilfreich

Hi,

danke für die Erklärung und letzter Versuch.
Um OSMODE nicht zurücksetzen zu müssen, hatte ich in meiner ersten Funktion mit dem (command-Aufruf explizit _NONE, also keinen Objektfang, für die nächste Punkteingabe ausgeben wollen. Damit könnte das ganze OSMODE-Gedöns umgangen werden.

Vielleicht kann man command durch princ ersetzen. Und da die Funktion sowieso das letzte Ergebnis zurückgibt, braucht's in der letzten Zeile vielleicht auch gar kein princ mehr:

Code:

(defun C:2d (/ p)
  (setq p (getpoint "3D-Punkt wählen: "))
  (princ "_none ")
  (list (car p) (cadr p))
)

Gruß
CADchup

------------------
CADmaro.de

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 13. Jul. 2011 11: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

Hi CADchup,

Leider gehts wieder nicht...

bei deiner Version:

Code:
defun C:2d (/ p)
  (setq p (getpoint "3D-Punkt wählen: "))
  (princ "_none ")
  (list (car p) (cadr p))
)

Ergebnis:
3D-Punkt wählen: _none (12.2199 4.93676)
Winkel/Mittelpunkt/Richtung/Endpunkt/RAdius/<Zweiter Punkt>:
Es wird ein 2D (kein 3D) Punkt erwartet. Bitte versuchen Sie es nocheinmal

Scheinbar akzeptiert Bricscad die Koordinate, das _none scheint aber nicht zu greifen und es wird wieder eine 3D-Koordinate gefangen.

Das brachte mich auf die Idee, es so zu versuchen:

Code:
(defun C:2d (/ p)
  (setq p (getpoint "3D-Punkt wählen: "))
  (command "_none")
  (list (car p) (cadr p))
)

Ergebnis:
Es hat funktioniert!! (dachte ich zuerst...)
Nur schaltet hier das _none den Objektfang dauerhaft aus... Womit wir wieder am Anfang wären :-(

Dann habe ich noch folgendes versucht:

Code:
(defun C:2d (/ p)
  (setq p (getpoint "3D-Punkt wählen: "))
  (princ (strcat "_none " (rtos (car p)) "," (rtos (cadr p))))
  (princ)
)

Ergebnis:
3D-Punkt wählen: _none 12.2199,4.9368
Winkel/Mittelpunkt/Richtung/Endpunkt/RAdius/<Zweiter Punkt>:
Eingabe wurde nicht erkannt.  Neuer Versuch

Scheinbar erkennt hier Bricscad das Leerzeichen nicht als "Befehlstrenner" und kann die ganze Zeile nicht korrekt interpretieren.

So, und jetzt bin zumindest ich mit meinem Latein am Ende.
Trotzdem Danke an alle, die versucht haben zu helfen.

LG
Stefan

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 13. Jul. 2011 12:09    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 Vino 10 Unities + Antwort hilfreich

... dann wäre da noch vf-cmdf statt command...
... oder auch noch vla-sendcommand zum testen...

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 13. Jul. 2011 13:17    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 Vino 10 Unities + Antwort hilfreich

versuchmal ob reactoren greifen...

Code:

(defun lispWillStart  (reactor params)
  (setq #oldosmode# (getvar "osmode")))

(defun lispEnded  (reactor params)
  (if #oldosmode#
    (setvar "osmode" #oldosmode#))
  (setq #oldosmode# nil))

(defun lispCancelled  (reactor params)
  (if #oldosmode#
    (setvar "osmode" #oldosmode#))
  (setq #oldosmode# nil))

(defun LispReactor ()
(if (not osmode_reactor)
  (setq osmode_reactor
(vlr-lisp-reactor
  nil
  '((:vlr-lispWillStart . lispWillStart)
    (:vlr-lispEnded . lispEnded)
    (:vlr-lispCancelled . lispCancelled))))))

(LispReactor)


------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 14. Jul. 2011 06: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

Hi nochmal,

@wronzky
mit

Code:
(vl-cmdf "_none")

bekomme ich das selbe Ergebnis wie mit
Code:
(command "_none")

Und zwar dass der Objektfang danach dauerhaft ausgeschaltet ist.

Mit

Code:
(vla-sendcommand "_none")

bekomme ich folgende Fehlermeldung:
error : bad argument type <"_none"> ; expected VLA-OBJECT at [VLA-SENDCOMMAND]
Da ich die Funktion nicht kannte und ich in der (AutoCAD 2009-) Visual-Lisp Hilfe dazu auch nichts finden konnte... Was mach ich da falsch?

@Dorfy
Sorry, aber das übersteigt meine Lisp-Kenntnisse jetzt völlig... Was muss ich da jetzt wann aufrufen?

Grüße
Stefan

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 14. Jul. 2011 07:27    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 Vino 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Vino:
Sorry, aber das übersteigt meine Lisp-Kenntnisse jetzt völlig... Was muss ich da jetzt wann aufrufen?



den Code so wie er oben steht laden
deine Lisp laden - das Rücksetzen von osmode sollte dann automatisch nach dem Beende des Lispaufrufs passieren.
vorausgestzt, Bricscad kann mit den vlr-Befehlen um...
und setz mal vorsichtshalber noch ein (vl-load-com) davor 

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 14. Jul. 2011 08:03    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

Hi,

Danke Dorfy,
Also Bricscad scheint deinen Code korrekt zu unterstützen.
Zumindest bekomme ich keine Fehlermeldungen und OSMODE ist nach meiner Funktion zurück gesetzt.

Allerdings bekomme ich wieder die Fehlermeldung, dass ein 3D-Punkt gefangen wurde und er das nicht mag.

Das mit vl-cmdf hab ich inzwischen gegoogelt.

Code:
(setq thisdrawing (vla-get-activedocument (vlax-get-acad-object)))
(vla-sendcommand thisdrawing "_none ")

bringt aber das selbe Ergebnis... Bricscad fängt einen 3D-Punkt und meckert.

Inzwischen hab ich mir das folgendermaßen zusammengereimt:
Ich rufe die Funktion 2D ja als Transparenten Befehl innerhalb von z.B. Bogen auf.
Dabei läuft immer die gesamte Funktion durch, bevor der Befehl Bogen weiter ausgeführt wird.
Wenn ich jetzt also OSMODE innerhalb der Funktion 2D zurück stelle, bekommt der Befehl Bogen die Info, dass ich an die entsprechende (2D-)Koordinate "geklickt" habe. Da hier aber OSMODE bereits wieder eingeschaltet ist, wird wieder das Objekt an der stelle gefangen.
So gesehen kann eigentlich keiner der (inzwischen recht vielen) Lösungsansätze, die OSMODE innerhalb (oder durch reaktor unmittelbar nach) der Funktion 2D zurücksetzen funktionieren...
Schade... Aber vielleicht schafft es Bricsys ja mal, die Befehle so anzupassen, dass sie auch mit 3D-Koordinaten umgehen können.

Nochmal Danke an alle, die geholfen haben.

Gruß
Stefan

Nachtrag:
Habs jetzt getestet... AutoCAD (zumindest 2009) hat das selbe Problem... Ist mir nur nicht aufgefallen, weil AutoCAD ja auch 3D-Koordinaten unterstützt...

[Diese Nachricht wurde von Vino am 14. Jul. 2011 editiert.]

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 14. Jul. 2011 08:09    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 Vino 10 Unities + Antwort hilfreich

mmh - dann ein commandreactor... der setzt erst nach (bei dir) Bogen zurück
der selbe code wie oben nur command anstelle von lisp und ggf den Befehl noch prüfen lassen

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

Vino
Mitglied



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

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 14. Jul. 2011 08:24    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

Aber das würde ja dann immer nach jedem Befehl OSMODE auf den Wert, den es vor Befehlsstart hatte zurück setzen, oder?

Ich glaube nicht, dass das sinnvoll ist... Wir arbeiten oft mit aufwendigen Befehlen und da kommt es öfter vor, dass man unter der Befehlsausführung OSMODE umstellt.

Aber Danke für den Tipp... Habs noch nicht getestet, aber funktionieren dürfte es, wenn meine Erklärung passt.

Gruß
Stefan

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 14. Jul. 2011 08:40    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 Vino 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Vino:
Aber das würde ja dann immer nach jedem Befehl OSMODE auf den Wert, den es vor Befehlsstart hatte zurück setzen, oder?

prinzipiell ja
du kannst halt noch die Befehle einschränken oder eine zusätzliche Variable setzen. Nur wenn das Flag gesetzt ist, dann wird zurückgestellt.
Oder der lispreactor setzt das Flag und der commandreactor setzt zurück (bei gesetzten Flag)... da musst du mal probieren wie es am besten passt.
da geht noch einiges...

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."

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

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 14. Jul. 2011 09:43    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 Vino 10 Unities + Antwort hilfreich

@Vino:

Die Überlegung mit dem Ansatz des ein- und ausschalten des Objektfanges hat mir in Erinnerung gerufen, dass es im AutoCAD auch noch die Systemvariable OSNAPCOORD gibt, welche ja unterschiedliche Objektfangmethoden regelt...

Steht diese auf "1" werden Objektfänge ignoriert und die Koordinatenübergabe aus dem Skript als einzig wahre Angabe interpretiert - das würde dann bedeuten, dass hier ein rein 2D-Punkt ankommen sollte...

------------------
Grüsse

Thomas

Korrekturen zum Kochbuch AutoLISP

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