| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Bedit nach doppelklick auf Block abfangen (1239 mal gelesen)
|
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 24. Mai. 2012 15:50 <-- editieren / zitieren --> Unities abgeben:
Hello, Ich bin mir sicher bzw. weiß dass das Thema schon öfters behandelt wurde, nur finde ich es nirgends im Forum; warum auch immer... Es geht darum den _bedit-Dialog nach einem Doppelklick auf einen Block abzufangen und nicht auszuführen... Hab es mit einigen Dingen versucht: zB.:
(Folgendes ist ein Besipiel für den Reaktor und dient nur zu TestZwecken) <- keine nähere Begutachtung notwenig...
Code:
(defun LoadReactor ( / ReactorName found) (vl-load-com) (setq ReactorName "Mouse") (foreach ReactorGroup (vlr-Reactors) (if (eq (car ReactorGroup) ':VLR-Mouse-Reactor) (progn (foreach Reactor (cdr ReactorGroup) (if (eq (VLR-data Reactor) ReactorName) (setq found (cons 'T Found)) (setq found (cons 'nil Found)) ) ) ) ) ) (if (not (apply 'or found ) ) (progn (VLR-Mouse-Reactor ReactorName '((:vlr-beginDoubleClick . Test)) ) (princ "Reactor loaded") ) (princ "Reactor allready loaded") ) (princ) ) ;############################################################################################### (defun Test (ReactorObj DBL_ClickPoint / 3Dpoint Ent UserIN) (vl-load-com) (setq 3Dpoint (car DBL_ClickPoint) Ent (caar (reverse (nentselp 3Dpoint)) ) ) (if (= (type ent) 'Ename) (if (= (vla-get-objectname (setq ent (vlax-Ename->VLA-Object ent))) "AcDbBlockReference") (progn (setvar "DBLCLKEDIT" 0) (initget "Add Edit") (setq UserIN (getkword "[Add OR Edit] <Add>")) (cond ( (or (= UserIN "Add") (null UserIN) ) (alert "Add") ) ((= UserIN "Edit") ( (alert "Edit") ) ) ) (setvar "DBLCLKEDIT" 1) ) ) ) ) ;############################################################################################### (LoadReactor)
Versuch 1: (setvar "DBLCLKEDIT" 0) Funktioniert soweit (nur muss ich es wieder herstellen, wo wieder das Problem liegt) Versuch 2: CommandEnded-Reaktor mit SendKey {ESC}
Code:
(defun DT:SENDKEYS (KEYS / WSCRIPT) (if (setq WSCRIPT (vlax-create-object "WScript.Shell")) (progn (vlax-invoke-method WSCRIPT 'sendkeys KEYS) (vlax-release-object WSCRIPT) ) ) (princ) ) (DT:SENDKEYS "{Esc}")
Naja, viel mehr fällt mir nicht ein... Hoffe auf Hilfe LG reltro
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Mai. 2012 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für reltro
|
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 24. Mai. 2012 16:13 <-- editieren / zitieren --> Unities abgeben:
hello Thomas, also das ist nur ein ausgewählter Ausschnitt aus einer gößeren Prozedur... Hab es zussammengekürzt weil es ansonsten nicht lauffähig wäre, weil davor einige Einstellungen gemacht bzw. Prozeduren ausgeführt werden. Wenn du das ganze Konstrukt sehn willst, gern, nur sind das inzwischen, schon, bo, viele viele viel Zeilen. Macht desswegen glaub ich wenig sinn... zusammenkopiert, hm, auch was, unter anderem von dir danke dafür Das Abfangen soll nur bei speziellen Blöcken passieren, wessen Identifikation auf XData's basiert, wesshalb ich es auch nicht global abschalten kann/will/sollte.
Ich weiß es gibt eine Möglichkeit, wie es für wharscheinlich alles eine möglichkeit gibt , nur sagt mir das forum immer wieder "zu ungenauer oder unbekannter Suchbegriff" wenn ich danach suche...
Hope u can help Ich glaub ja dass ich shclicht und ergreifend die falsche stelle gewählt habe um den befehl abzufangen. Lg reltro [Diese Nachricht wurde von reltro am 24. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 24. Mai. 2012 16:18 <-- editieren / zitieren --> Unities abgeben:
Zitat:
wenn via Reaktor... dann einen Command-Reaktor installieren, der auf BEDIT anspricht und den abbricht [/B]
hm, genau das hab ich probiert (siehe oben) "commandEnded"-Reaktor und deine Function [SendKey {Esc}] nur hat das nicht funktioniert. Ich weiß nicht ob das problem dabei liegt, dass ich den Reaktor erst zur Laufzeit des DoppelklickReaktors erzeuge; sprich nur wenn der abzufangende Fall eintritt, um in nach ablauf wieder zu entfernen...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 24. Mai. 2012 16:28 <-- editieren / zitieren --> Unities abgeben: Nur für reltro
|
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 24. Mai. 2012 16:41 <-- editieren / zitieren --> Unities abgeben:
Hello Udo, Danke für deinen Vorschlag. Das wär auf jeden Fall eine Möglichkeit, nur möchte ich es so allgemein wie möglich halten und auf Änderungen in der CUI verzichten, um es auch auf anderen PC laufen zu lassen. Dort die CUI zu ändern, könnte unter umständen andere Dinge zerstören bzw. zusätzlichen ProgrammierAufwand darstellen, um die Änderung in der CUI automatisiert vorzunehmen. haste vielleicht Vorschläge den Befehl direkt aus einem Reactor zu beenden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Mai. 2012 21:28 <-- editieren / zitieren --> Unities abgeben: Nur für reltro
|
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 25. Mai. 2012 11:54 <-- editieren / zitieren --> Unities abgeben:
Danke Thomas, Eben das hab ich schon versucht, aber weils nicht auf anhieb hinkhaut hat, dachte ich es liegt eine DenkFehler vor. Habs jetzt weiter versucht und habe entdeckt dass ich das {Esc} 2x senden muss um den "bedit"-Befehl abzubrechen. woran das wohl liegt, darüber kann ich nur spekulieren, hab aber eine Ahnung Aus der meinen CUI:
Code: $M=$(if,$(and,$(>,$(getvar,blockeditlock),0)),^C^C_properties,^C^C_bedit)
Hier werden ja 2 Befehle ausgeführt. Liegt es daran? . . . Nun liegt mir aber die nächste Frage auf der Zunge: ------------------------- Wie stelle ich fest wieviele {ESC} ich senden muss? UND: - ob überhaupt ein Befehl (command) ausgeführt wird (<- essentiell) - am besten wärs ja wirklich nur den Dialog abzufangen und den "_properties" freien weg zu lassen. Es könnte ja der Fall sein, dass dort (CUI) Veränderungen vorgenommen wurden die unbedingt ausgeführt werden wollen... -------------------------
Aso der Code zum abbrechen des Dialogs is im Anhang. (ist mir zu langwierig aus dem mit Tab's formatierten Code etwas hier gscheid lesbares zu machen) . . . . . ******************************* Der CommandWillStart-Reaktor wird erst zur Laufzeit es Doppelklick-Reaktors erzeugt ******************************* 2 Versionen - V01 ist solala, wenn ein Fehler auftritt, bleibt ein Reaktor stehn (würd ich so nicht verwenden) - auf V02 bin ich fast schon stolz (jedoch noch ausbaufähig (oben genannte Dinge)) Auf jeden Fall danke für eure Unterstützung - U's sind unterwegs Und wenn ihr Zeit und Lust habts wäre ich froh über konstruktive Kritik und Unterstützung bei den oben genannten Dingen. Lg reltro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|