_

[LISP] Prośba o przetestowanie reaktorka

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez ziele_o2k » sie 26, 2018 12:51

kojacek napisał(a):
ziele_o2k napisał(a): coś bym tam jeszcze zmieniłł, ale poczekamy co tam wypatrzysz.

Póki co wypatrzyłem takie coś. Dwuklik na zwykłym bloku z atrybutami, uruchamia edytor, niemniej po dowolnej reakcji (ok / anuluj) w linii poleceń widać:

eattedit.PNG


Chętnie też bym zmienił reakcję na listę bloków a nie tylko jedną nazwę - czyli nie tylko "EXAMPLE" ale "EXAMPLE1" "EXAMPLE2" etc...

Trochę to podkręciłem, myślę, że zdecydowanie przyjemniejsze :)
Nie ma problemu już z tym o czym pisałeś.

Mam jednak pytanko dot. okienka właściwości (polecenie _properties), czy da się z poziomu lispa sprawdzić, czy to okienko jest otwarte w danym momencie?

Poprawiony kod:
Kod: Zaznacz cały
(if (null *Check_Block-reactor*)
    (setq *Check_Block-reactor*
        (vlr-mouse-reactor "Check_Block" '((:vlr-beginDoubleClick . pz:checkblock)))
    )
)

(defun pz:checkblock (@Reactor @Point / *error* block_list new_pickstyle old_pickstyle objectPoint ss obj)
    (setq block_list (list "Example" "Block_1" "Block_2"))
    (if
        (and
            (setq ss (ssget (trans (car @Point) 0 1)))
            (setq obj (vlax-ename->vla-object (ssname ss 0)))
            (= (vla-get-ObjectName obj) "AcDbBlockReference")
            (member 
                (strcase
                    (vlax-get-property obj
                        (if (vlax-property-available-p obj 'effectivename)
                            'effectivename
                            'name
                        )
                    )
                )
                (mapcar 'strcase block_list)
            )
        )
        (progn
            (setq *escape-EATTEDIT* t)
            (alert "Do my stuff...")
        )
    )
    (princ)
)

;based on:
;https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/cancel-command-with-visual-lisp-reactor/m-p/3239430#M300536
(if (null *command-reactor*)
    (setq *command-reactor*
        (vlr-command-reactor nil '((:vlr-commandwillstart . commandreactorcallback)))
    )
)

(if (null *editor-reactor*)
    (setq *editor-reactor*
        (vlr-editor-reactor nil '((:vlr-beginclose . editorreactorcallback)))
    )
)

(defun commandreactorcallback ( reactor params / *error*)
    (terpri)
    (princ (car params))
    (if (and
            *escape-EATTEDIT*
            (member
                (strcase (car params))
                (list "EATTEDIT" "QUICKPROPERTIES" "PROPERTIES" "RATRRED" "WŁAŚCIWOŚCI")
            )
        )
        (progn
            (if (setq *wsh* (cond (*wsh*) ((vlax-create-object "WScript.Shell"))))
                (vl-catch-all-apply 'vlax-invoke (list *wsh* 'sendkeys "{ESC}"))
            )
            (setq *escape-EATTEDIT* nil)
        )
    )
    (princ)
)

(defun editorreactorcallback ( reactor params / *error*)
    (if (and *wsh* (eq 'VLA-OBJECT (type *wsh*)) (not (vlax-object-released-p *wsh*)))
        (vl-catch-all-apply 'vlax-release-object (list *wsh*))
    )
    (if (and *command-reactor* (eq 'VLA-OBJECT (type *command-reactor*)))
        (vlr-remove *command-reactor*)
    )
    (vlr-remove reactor)
    (princ)
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez kojacek » sie 26, 2018 15:20

ziele_o2k napisał(a):
Mam jednak pytanko dot. okienka właściwości (polecenie _properties), czy da się z poziomu lispa sprawdzić, czy to okienko jest otwarte w danym momencie?


Oczywiście, odpowiada za to zmienna systemowa (R/O): OPMSTATE
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez ziele_o2k » sie 26, 2018 16:17

kojacek napisał(a):
ziele_o2k napisał(a):
Mam jednak pytanko dot. okienka właściwości (polecenie _properties), czy da się z poziomu lispa sprawdzić, czy to okienko jest otwarte w danym momencie?


Oczywiście, odpowiada za to zmienna systemowa (R/O): OPMSTATE

Bardzo dziękuję za pomoc. Myślę, że tutaj na forum już nie będę wrzucać dodatkowych wariantów tego lispa. Idea jest, jak ktoś będzie chciał to sobie wykorzysta :) Ważne, że działa :D
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez kojacek » sie 26, 2018 17:21

Jest jeszcze jedna przypadłość. Reaktor działa na blokach z atrybutami. Dla bloków (z listy) ale bez atrybutów, odpala reakcję (alert), a następnie jak gdyby nigdy nic - polecenie bedit... (oczywiście polecenie jest na liście dla params)
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez ziele_o2k » sie 26, 2018 21:45

kojacek napisał(a):Jest jeszcze jedna przypadłość. Reaktor działa na blokach z atrybutami. Dla bloków (z listy) ale bez atrybutów, odpala reakcję (alert), a następnie jak gdyby nigdy nic - polecenie bedit... (oczywiście polecenie jest na liście dla params)

podmień tylko to:
Kod: Zaznacz cały
(defun commandreactorcallback ( reactor params / cmd)
    (if *escape-EATTEDIT*
        (progn
            (cond
                (   (member
                        (setq cmd (strcase (car params)))
                        '("EATTEDIT" "QUICKPROPERTIES")
                    )
                    (if (setq *wsh* (cond (*wsh*) ((vlax-create-object "WScript.Shell"))))
                        (vl-catch-all-apply 'vlax-invoke (list *wsh* 'sendkeys "{ESC}"))
                    )
                )
                (   (= cmd "BEDIT" )
                    (if (setq *wsh* (cond (*wsh*) ((vlax-create-object "WScript.Shell"))))
                        (repeat 2 (vl-catch-all-apply 'vlax-invoke (list *wsh* 'sendkeys "{ESC}")))
                    )
                )
            )
            (setq *escape-EATTEDIT* nil)
        )
    )
    (princ)
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez kojacek » sie 27, 2018 22:45

ziele_o2k napisał(a):
podmień tylko to:
Kod: Zaznacz cały
    (princ)


Chtyrze :) Bardzo dobrze to wygląda. Biorę część i trochę podkręcę pod swoje pomysły zastosowań, które się zrodziły dwuklikając... :) Efekty opiszę to tu czy tam... ;)
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez ziele_o2k » sie 27, 2018 22:59

kojacek napisał(a):
ziele_o2k napisał(a):
podmień tylko to:
Kod: Zaznacz cały
    (princ)


Chtyrze :) Bardzo dobrze to wygląda. Biorę część i trochę podkręcę pod swoje pomysły zastosowań, które się zrodziły dwuklikając... :) Efekty opiszę to tu czy tam... ;)

Szczerze mówiąc... był to strzał, bo nie wiedziałem o co biega.

Czy tu, czy tam znajdę i przeczytam :)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez kruuger » sie 28, 2018 12:58

("EATTEDIT" "QUICKPROPERTIES" "ATTIPEDIT")
moze jeszcze ATTIPEDIT. dbl klik z CTRL. bez tego po Do my stuff edytuje pole.
z tym wchodzi na ulamek sekundy i wychodzi.
k.
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] Prośba o przetestowanie reaktorka

Postprzez ziele_o2k » sie 28, 2018 20:59

kruuger napisał(a):("EATTEDIT" "QUICKPROPERTIES" "ATTIPEDIT")
moze jeszcze ATTIPEDIT. dbl klik z CTRL. bez tego po Do my stuff edytuje pole.
z tym wchodzi na ulamek sekundy i wychodzi.
k.

Tak jak wcześniej pisałem, nie będę tutaj nic kończyć i dodawać. To jest tylko pomysł i udało się wykryć pewne błędy.
Oczywiście wszytko leży jeśli ktoś sobie pozmieniał domyślne ustawienia doubleclicka w CUI.

Swoja drogą innym wyjściem z sytuacji jest stworzenie własnego CUI z definicją podwójnych kliknięć. I tam przypisanie odpowiednich lispów zamiast domyślnych funkcji.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Poprzednia strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników

cron