Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Bedit nach doppelklick auf Block abfangen

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:  Bedit nach doppelklick auf Block abfangen (1239 mal gelesen)
reltro
Mitglied
student


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

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 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

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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 24. Mai. 2012 16:00    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 reltro 10 Unities + Antwort hilfreich

Da haste ja einiges zusammenkopiert ...
aber warum nicht Befehl CUI ... Doppelklickaktionen ....Block und da was nach Wunsch oder gar nichts eintragen ?

wenn via Reaktor... dann einen Command-Reaktor installieren, der auf BEDIT anspricht und den abbricht

------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

reltro
Mitglied
student


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

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 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

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


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

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 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

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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 24. Mai. 2012 16:28    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 reltro 10 Unities + Antwort hilfreich

Und warum programmierst du nicht einen Befehl "MyBEDIT", den du statt _BEDIT in der CUI aufrufst?
Dann kannst du erst den übergebenen Block testen und bei Bedarf _BEDIT oder auch was anderes aufrufen.

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

reltro
Mitglied
student


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

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 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

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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 24. Mai. 2012 21:28    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 reltro 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von reltro:

hm, genau das hab ich probiert (siehe oben) "commandEnded"-Reaktor und deine Function [SendKey {Esc}] nur hat das nicht funktioniert.


wenn commandEnded ist zu spät  wenn, dann bei commandbegin ...
z.B.
(if(not commandreactor)
  (setq commandreactor
    (vlr-command-reactor
      nil
      '((:vlr-commandwillstart . NOPLT))
    )
  )
)
(defun NOPLT (var1 var2)
  (if (wcmatch (vl-princ-to-string (strcase (car var2))) "*PLOT")
    (progn
      (DT:SENDKEYS "{ESC}")
      (princ "\nÄtsch!")
    )
  )
)

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

reltro
Mitglied
student


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

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 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


Reactor-DblClick_V01-Template.lsp


Reactor-DblClick_V02-Template.lsp

 
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 >>)

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