| |
| 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: Blinkendes Zeichnungs-Objekt (1006 mal gelesen)
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 15. Feb. 2009 21:13 <-- editieren / zitieren --> Unities abgeben:
Hallo! Hat jemand eine Idee, wie man ein Zeichnungs-Objekt (z.B. einen Block) für ein paar mal blinken lassen kann, sodass die Aufmerksamkeit darauf gelenkt wird? Meine Idee wäre: Die Eigenschaft "highlight" ein- und ausschalten und dazwischen kurz warten. Ich habe es schon mit (vla-highlight vlaItem :vlax-true) kombiniert mit (vla-highlight vlaItem :vlax-false) sowie mit (redraw enmItem 3) kombiniert mit (redraw enmItem 4) versucht, aber es funktioniert nicht. Dazwischen hätte ich (command "_.delay" 250) gehabt und hab es dann auch mit Cadmiums Funktion wait2 (siehe hier probiert, aber alles ohne Erfolg. Das Komische daran ist, wenn ich ganz am Schluss ein (vla-highlight vlaItem :vlax-true) hingebe, wird das Element nach dem ganzen Warten dann doch hervorgehoben, aber blinken tut davor nichts. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 15. Feb. 2009 21:31 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 15. Feb. 2009 21:37 <-- editieren / zitieren --> Unities abgeben:
Danke Heiko! Warum ich das allerdings nicht machen will ist, weil ich an der Zeichnungs nichts ändern will, was im Fall des Falles gespeichert zurückbeiben könnte. Wenn also die Farbe nicht zurückgesetzt wird (aus welchem Grund auch immer) und dann gespeichert wird, bleibt es verfälscht. Bei der Highlight-Eigenschaft ist das wurscht, weil die nicht mitgespeichert wird. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 16. Feb. 2009 06:39 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Hi, vllt. so (defun wait (sec / dat) (setq dat (+ (getvar "DATE") (/ sec 86400);60*60*24? ) ) (while (> dat (getvar "DATE")) (princ)) ) (defun C:ttt (/ as c) (setq as (ssget)) (princ "\nZum Leuchten") (setq c 0) (repeat (sslength as) (redraw (ssname as c) 3) (setq c (1+ c)) ) (princ "\nZum Ausschalten") (wait 1) (princ) (princ "\nZum Ausschalten") (setq c 0) (repeat (sslength as) (redraw (ssname as c) 4) (entupd (ssname as c)) (setq c (1+ c)) ) (princ "\nZum Leuchten") (wait 1) (princ) (princ "\nZum Leuchten") (setq c 0) (repeat (sslength as) (redraw (ssname as c) 3) (setq c (1+ c)) ) (princ "\nZum Ausschalten") (wait 1) (princ) (princ "\nZum Ausschalten") (setq c 0) (repeat (sslength as) (redraw (ssname as c) 4) (setq c (1+ c)) ) ) mfg heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 16. Feb. 2009 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Moin moin, interessantes Thema Leider hat der Code von Heiko bei mir nicht richtig funktioniert, aber die Idee hat mir gefallen. Hier mein Vorschlag...
Code:
(defun :ss-for (#selset #expr / :ssfor:i) (if #selset (repeat (setq :ssfor:i (sslength #selset)) ((eval #expr) (ssname #selset (setq :ssfor:i (1- :ssfor:i))) ) ) ) ) (defun delay (#sec / endtimer) (setq endtimer (+ (getvar "DATE") (/ #sec 86400.0))) (while (> endtimer (getvar "DATE"))(princ)) ) (defun redr (#sset #mode) (:ss-for #sset (function (lambda (ent) (redraw ent #mode)))) ) (defun blink (#sset #rep #time) (repeat #rep (redr #sset 2) (redraw) (delay #time) (redr #sset 1) (redraw) (delay #time) ) )
Funktion :ss-for --> durchläuft ein SelectionSet und evaluiert eine Epression Funktion delay --> Erzeugt eine Verzögerung, Argument = Sekunden Funktion redr --> durchläuft ein SelctionSet und führt dabei redraw aus mit dem Argument #mode Funktion blink --> die eigentlich HauptFunktion, sie benötigt folgende Argumente: - #sset --> SelectionSet z.B. (ssget) - #rep --> Anzahl der Wiederholungen (Integer!) - #time --> der Verzägerungsintervall in sekunden Aufruf: (blink (ssget) 3 0.3);_0.3 sekunden [edit] Funktion delay geändert, siehe Post unten [edit2] In der Funktion delay innerhalb der Whileschleife ein (princ) ergänzt, siehe Posts unten ------------------ CADmaro.de [Diese Nachricht wurde von benwisch am 17. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 16. Feb. 2009 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 16. Feb. 2009 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Zitat: Original erstellt von Dorfy: Hi, [..]finde aber benwisch sein "Blinken" schöner ;) mfg heiko
Danke, aber dafür ist deine Delay-Funktion besser. Ich mags manchmal irgendwie kompliziert Habe daher nochmal "meine" Funktion an deine angeglichen. ------------------ CADmaro.de [Diese Nachricht wurde von benwisch am 16. Feb. 2009 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: 16. Feb. 2009 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 16. Feb. 2009 15:36 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
@Cadmium...alter Schwede war ja eigentlich fast schon klar, daß du hier schon sowas gepostet hast Die beiden Systemvariablen kannte ich auch nicht und deine Funktion ist auch *geil* (wenn mir das Wort erlaubt ist). Na, jetzt kann sich autocart ja raussuchen was ihm gefällt ------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 16. Feb. 2009 16:41 <-- editieren / zitieren --> Unities abgeben:
Danke euch allen!! Wenn ich benwischs Code unter "Normal-Bedingungen" teste, funktioniert es. Aber ich brauche das ganze innerhalb eines Programms und dort funktioniert das einfach nicht. Während des Progs wird anscheinend (an der Stelle im Prog-Code, wo ich es bräuchte) aus irgenteinem Grund der Bildschirm nicht aktualisiert. Auch zoom-Befehle werden einfach "übergangen" (zumind. optisch). Der Bildschirm wird aber interessanterweise auf den letztgültigen Sollstand aktualisiert, sobald eine Benutzereingabe (z.B. ssget) abgefragt wird. Hat jemand von euch eine Idee, woran das liegen könnte? Danke. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 16. Feb. 2009 17:21 <-- editieren / zitieren --> Unities abgeben:
UPDATE: Ich kam inzwischen dahinter, wo das Problem liegt! Leider habe ich aber noch keine Lösung. Also: Vor dem Aufruf von blink habe ich ein alert. Wenn ich das alert weggebe, funktioniert alles ok. Mit dem alert vor dem blink gibt es Probleme. Mit acet-alert übrigens (statt alert) vor dem blink werden die Elemente zumindest einmal ausgeblendet, aber blinken tut auch nichts. Bin für jede Hilfe dankbar. Alert wegzulassen würde mir aber nicht gefallen. Im Fall des Falles muss ich mir sonst eine eigene Dialog-Box als alert-Ersatz basteln. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 16. Feb. 2009 17:46 <-- editieren / zitieren --> Unities abgeben:
UPDATE (nochmals): Jetzt kommt es noch schlimmer! Es funktioniert sogar dann nicht, wenn ein (entsel)-Aufruf davor vorkommt! Bitte ausprobieren: Code: (defun test01 (/ sset) (blink (setq sset(ssget)) 3 0.3) (entsel "Wähle irgentetwas: ") (blink sset 3 0.3) (princ "\nFertig!") )
Vor dem entsel blinkt es, danach nicht mehr. Warum nur, Autodesk!?EDIT: Das gibt es doch nicht!!! Wenn ich statt (entsel) (ssget) nehme, geht es, aber wenn ich (ssget "_:S") nehme, geht es wieder nicht!! Ahhhhhhh.... ------------------ Gruß, Stephan www.stbartl.at [Diese Nachricht wurde von autocart am 16. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 16. Feb. 2009 18:19 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
So, bevor ich schluß mache... Ich kann das Verhalten nachvollziehen und ich glaube mit alert wirst du nicht weiterkommen. Entweder das alert hintendran stellen oder mittels VBA eine MsgBox machen. Mit der VBA-MsgBox klappts dann wieder. Code:
(vla-eval (vlax-get-acad-object) (strcat "MsgBox \"<HIER DIE FRAGE>\"" ", " "vbQuestion" ", " "\"<HIER DIE ÜBERSCHRIFT = TITLE>\"" ) )
Siehe hierzu auch die Hilfe "Visual Basic Referenz bzgl. dem Argument <BUTTONS> (z.B. hier vbQuestions) Für die Entsel Variante habe ich auch noch keine Lösung gefunden.------------------ CADmaro.de [Diese Nachricht wurde von benwisch am 16. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 16. Feb. 2009 19:02 <-- editieren / zitieren --> Unities abgeben:
Danke, das wäre eine Lösung für das alert. Super! Leider muss noch das Problem mit (entsel) und (ssget "_:S") gelöst werden. Was meinst du aber mit "Siehe hierzu auch die Hilfe "Visual Basic Referenz bzgl. dem Argument <BUTTONS> (z.B. hier vbQuestions)"? ------------------ Gruß, Stephan www.stbartl.at [Diese Nachricht wurde von autocart am 16. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 16. Feb. 2009 19:40 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 16. Feb. 2009 23:31 <-- editieren / zitieren --> Unities abgeben:
Toll, danke Ernst! An sowas hatte ich bereits ganz zu Anfangs gedacht, hab grdraw aber nicht gefunden. Da das mit dem Blinken nicht recht funktionieren will, werde ich auch grdraw bzw. grvecs verwenden, um die Aufmerksamkeit des Benutzers zu erregen. Danke. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001 Autocad 2005-2010 Microstation V8 Photoshop CS4 + Camera Raw Nikon Capture NX2 Nikon D90
|
erstellt am: 17. Feb. 2009 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Zitat: Was meinst du aber mit "Siehe hierzu auch die Hilfe "Visual Basic Referenz bzgl. dem Argument <BUTTONS> (z.B. hier vbQuestions)"?
Auszug aus der Visual Basic Referenz Zitat: Das Argument buttons hat die folgenden Einstellungen:Konstante Wert Beschreibung vbOKOnly 0 Nur die Schaltfläche OK anzeigen. VbOKCancel 1 Schaltflächen OK und Abbrechen anzeigen. VbAbortRetryIgnore 2 Schaltflächen Abbruch, Wiederholen und Ignorieren anzeigen. VbYesNoCancel 3 Schaltflächen Ja, Nein und Abbrechen anzeigen. VbYesNo 4 Schaltflächen Ja und Nein anzeigen. VbRetryCancel 5 Schaltflächen Wiederholen und Abbrechen anzeigen. VbCritical 16 Meldung mit Stop-Symbol anzeigen. VbQuestion 32 Meldung mit Fragezeichen-Symbol anzeigen. VbExclamation 48 Meldung mit Ausrufezeichen-Symbol anzeigen. VbInformation 64 Meldung mit Info-Symbol anzeigen. VbDefaultButton1 0 Erste Schaltfläche ist Standardschaltfläche. VbDefaultButton2 256 Zweite Schaltfläche ist Standardschaltfläche. VbDefaultButton3 512 Dritte Schaltfläche ist Standardschaltfläche. VbDefaultButton4 768 Vierte Schaltfläche ist Standardschaltfläche. VbApplicationModal 0 An die Anwendung gebunden. Der Benutzer muß auf das Meldungsfeld reagieren, bevor er seine Arbeit mit der aktuellen Anwendung fortsetzen kann. VbSystemModal 4096 An das System gebunden. Alle Anwendungen werden unterbrochen, bis der Benutzer auf das Meldungsfeld reagiert. vbMsgBoxHelpButton 16384 Adds Help button to the message box VbMsgBoxSetForeground 65536 Specifies the message box window as the foreground window vbMsgBoxRight 524288 Text is right aligned vbMsgBoxRtlReading 1048576 Specifies text should appear as right-to-left reading on Hebrew and Arabic systems
Zitat: Leider muss noch das Problem mit (entsel) und (ssget "_:S") gelöst werden
So wie es aussieht, betrifft es alle Lisp-Funktionen, die getpoint, entsel, ssget "_:S", getcorner, getangle ähneln.
Selbst mit den ActiveX Funktionen die äquivalent zu den entsel, bzw. ssget Funktionen sind klappt es nicht. Der einzige Workaround der mir einfällt, ist der, eine Keyboard-Abfrage unmittelbar nach z.B. ssget "_:S" o.ä. einzubauen. Z.B.
Code:
(defun c:test02 (/ entity) (if (setq entity (car (entsel "\nBitte ein Objekt wählen und mit Return/Rechtsklick bestätigen " ) ) ) (progn (redraw entity 3) (getint) ;_ dummy (blink (ssadd entity (ssadd)) 3 0.3) (redraw entity 4) (princ "\nFertig!") ) ) (prin1) )
Vieleicht hat man aber ohnehin schon in seinem Programm eine Keyboard-Abfrage (getint, getreal, getstring...), die _nach_ einer z. B. entsel-Eingabe kommt, dann ist das "dummy" auch nicht nötig. Was besseres ist mir bis jetzt noch nicht eingefallen.
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 17. Feb. 2009 12:50 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Hi, sind zwar net die schönsten Zeilen aber es blinkt... (und entsel ist mit drin, ob dein alert geht hab ich net getestet) (defun wait (sec / dat) (setq dat (+ (getvar "DATE") (/ sec 86400) ) ) (while (> dat (getvar "DATE")) (princ)) ) (defun redr (sset mod / c) (setq c 0) (repeat (sslength sset) (redraw (ssname sset c) mod) (setq c (1+ c)) ) ) (defun blink (#sset #rep #time) (repeat #rep (redr #sset 2) (redraw) (wait #time) (redr #sset 1) (redraw) (wait #time) )) (defun C:ttt (/ as c) (setq as (ssget)) (blink as 3 0.3) (setq ent (entsel "Wähle irgentetwas: ")) (blink as 3 0.3) ) mfg heiko @Rolf vermute mal es liegt am function lambda, ... [Diese Nachricht wurde von Dorfy am 17. Feb. 2009 editiert.] [Diese Nachricht wurde von Dorfy am 17. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 17. Feb. 2009 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Hallo Heiko, dass war der entscheidene Hinweis Der Austausch meiner delay-Funktion mit deiner wait-Funktion brachte die Lösung.. Es liegt an der Whileschleife!
Code: (while (> endtimer (getvar "DATE"))-->(princ)<--)
Ein (princ), kein prin1 oder 't verwenden oder wie bei mir nichts innerhalb der Whileschleife machen.Klasse! [EDIT] und mit alert gehts dann auch ------------------ CADmaro.de [Diese Nachricht wurde von benwisch am 17. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 17. Feb. 2009 13:28 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 17. Feb. 2009 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 17. Feb. 2009 20:02 <-- editieren / zitieren --> Unities abgeben:
@benwisch/Rolf Da hast du jetzt aber deinen obigen ersten Beitrag in diesem tread editiert und das (princ) nachträglich eingebaut, weil ich kann mich daran nicht erinnern - du Schlawiener - ist sicher eine gute Idee (hatte mich aber kurz verwirrt) @dich und Dory/Heiko Danke nochmals für die Hilfe und letztenendes die Lösung. Jetzt funktioniert es bei mir auch. Danke. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 17. Feb. 2009 23:40 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Zitat: @benwisch/Rolf Da hast du jetzt aber deinen obigen ersten Beitrag in diesem tread editiert und das (princ) nachträglich eingebaut, weil ich kann mich daran nicht erinnern - du Schlawiener - ist sicher eine gute Idee (hatte mich aber kurz verwirrt)
Deswegen habe ich ja ein [edit] eingebaut. Ich weiß, dass viele gerne einfach nur den ersten Code lesen und ihn übernehmen, daher eine genannte Änderung. ------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |