_

reaktor_usuwanie obiektu

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

reaktor_usuwanie obiektu

Postprzez Mariusz-MK » wrz 07, 2018 12:43

Czy istnieje zdarzenie dla reaktora, które dotyczy usunięcia obiektu na rysunku? Chciałbym stworzyć reaktor, który reaguje na usunięcie określonego obiektu. Próbowałem użyć vlr-object-reactor z poszczególnymi zdarzeniami, ale na usunięcie obiektu żaden nie działa.
Mariusz-MK
 
Posty: 89
Dołączył(a): lip 11, 2008 07:38

Re: reaktor_usuwanie obiektu

Postprzez ziele_o2k » wrz 07, 2018 14:08

Trochę złośliwości na początek: jak nie potrafisz na podstawie pomocy cada odpowiedzieć sobie na tak postawione pytanie, to może przerób jakiś tutorial o reaktorach?
Nie chcę oczywiście zniechęcać, ale rekatory to trochę wyższy poziom programowania w lispie (ja dopiero pierwsze kroki stawiam).

Wracając do pytania, poczytaj o vlr-object-reactor i jego evencie o nazwie :vlr-erased.
Jak znajdę dzisiaj chwilę to przykład Ci podrzucę.

Możesz też wrzucić co do tej pory naskrobałeś, podziałamy coś.

Pozdro :)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: reaktor_usuwanie obiektu

Postprzez Mariusz-MK » wrz 07, 2018 14:51

Kod: Zaznacz cały
(defun c:re ()

(setq text (ssget "_X" '((0 . "TEXT"))))
(setq text (ssname text (setq i (1+ (setq i -1)))))
(setq myText (vlax-ename->vla-object text))

(setq textReactor (vlr-object-reactor (list  myText)
"Text Reactor" '((:vlr-erased . print-length))))

(princ)

);defun

;******************************************************************************

(defun print-length (notifier-object reactor-object parameter-list)

  (setq a notifier-object)
  (setq b reactor-object)
  (setq line (ssget "_X" '((0 . "LINE"))))
  (setq line (ssname line (setq i (1+ (setq i -1)))))
  (setq myLine (vlax-ename->vla-object line))
 
  (alert (strcat "Długość elementu: " (vl-princ-to-string (vlax-get-property myLine 'Length))))
    
  (princ)

);defun


Coś w tym jest bo zabawę z reaktorami zacząłem kilka dni temu, niemniej jednak coś tam udało się napisać (przerobić) co działa (jakoś), ale tylko z :vlr-modified a z :vlr-erased już nie. Nie do końca rozumiem „Erase-flag of the object has been set”. Przykładów poszczególnych event-ów nie ma za wiele.
Mariusz-MK
Mariusz-MK
 
Posty: 89
Dołączył(a): lip 11, 2008 07:38

Re: reaktor_usuwanie obiektu

Postprzez ziele_o2k » wrz 07, 2018 18:02

Zobacz co to robi - może Ci wyjaśni co się dzieje:
Kod: Zaznacz cały
(defun del_element_from_list (notifier-object reactor-object param-list / )
    (setq *list*
        (cd:LST_RemoveItem
            (vl-position
                (assoc
                    notifier-object
                    *list*
                )
                *list*
            )
            *list*
        )
    )
    (princ "\nCurrent list: ")
    (princ *list*)
    (princ)
)
(defun add_element_to_list (notifier-object reactor-object param-list / )
    (if *flag*
        (progn
            (if (not *list*)
                (setq *list* (list (cons notifier-object (vla-get-layer notifier-object))))
                (setq *list* (cons (cons notifier-object (vla-get-layer notifier-object)) *list*))
            )
            (setq *flag* nil)
            (princ "\nCurrent list: ")
            (princ *list*)
        )
    )
    (princ)
)
(defun object_unerased ( notifier-object reactor-object param-list / )
    (setq *flag* t)
)
(defun c:addreactors ( / ss )
    (if (setq ss (cd:SSX_Convert (ssget) 1))
        (progn
            (foreach % ss
                (if (not *list*)
                    (setq *list* (list (cons % (vla-get-layer %))))
                    (setq *list* (cons (cons % (vla-get-layer %)) *list*))
                )
            )
            (vlr-object-reactor
                ss
                nil
                '(
                    (:vlr-erased . del_element_from_list)
                    (:vlr-unerased . object_unerased)
                    (:vlr-objectClosed . add_element_to_list)
                )
            )
        )
    )
)

To działa tak:
wywołujesz polecenie addreactors, zaznaczasz jakieś obiekty i magia :). Polecenie robi dwie rzeczy tworzy listę zaznaczonych elementów:
Kod: Zaznacz cały
(
  (vla-object1 . "warstwa")
  (vla-object2 . "warstwa")
  (vla-object2 . "warstwa")
  ...
)

oraz dodaje do nich 3 reaktory.
Jak będziesz mieć pytania, daj znać :)

EDIT:
Oczywiście CADPack wczytany!!
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: reaktor_usuwanie obiektu

Postprzez Mariusz-MK » wrz 10, 2018 09:43

Dzięki. To mi pomoże w przygotowaniu reaktora na moje potrzeby.
Mariusz-MK
 
Posty: 89
Dołączył(a): lip 11, 2008 07:38

Re: reaktor_usuwanie obiektu

Postprzez kruuger » wrz 10, 2018 11:14

ziele_o2k napisał(a):Zobacz co to robi - może Ci wyjaśni co się dzieje:
Kod: Zaznacz cały
(defun del_element_from_list (notifier-object reactor-object param-list / )
    (setq *list*
        (cd:LST_RemoveItem
            (vl-position
                (assoc
                    notifier-object
                    *list*
                )
                *list*
            )
            *list*
        )
    )
    (princ "\nCurrent list: ")
    (princ *list*)
    (princ)
)
(defun add_element_to_list (notifier-object reactor-object param-list / )
    (if *flag*
        (progn
            (if (not *list*)
                (setq *list* (list (cons notifier-object (vla-get-layer notifier-object))))
                (setq *list* (cons (cons notifier-object (vla-get-layer notifier-object)) *list*))
            )
            (setq *flag* nil)
            (princ "\nCurrent list: ")
            (princ *list*)
        )
    )
    (princ)
)
(defun object_unerased ( notifier-object reactor-object param-list / )
    (setq *flag* t)
)
(defun c:addreactors ( / ss )
    (if (setq ss (cd:SSX_Convert (ssget) 1))
        (progn
            (foreach % ss
                (if (not *list*)
                    (setq *list* (list (cons % (vla-get-layer %))))
                    (setq *list* (cons (cons % (vla-get-layer %)) *list*))
                )
            )
            (vlr-object-reactor
                ss
                nil
                '(
                    (:vlr-erased . del_element_from_list)
                    (:vlr-unerased . object_unerased)
                    (:vlr-objectClosed . add_element_to_list)
                )
            )
        )
    )
)

To działa tak:
wywołujesz polecenie addreactors, zaznaczasz jakieś obiekty i magia :). Polecenie robi dwie rzeczy tworzy listę zaznaczonych elementów:
Kod: Zaznacz cały
(
  (vla-object1 . "warstwa")
  (vla-object2 . "warstwa")
  (vla-object2 . "warstwa")
  ...
)

oraz dodaje do nich 3 reaktory.
Jak będziesz mieć pytania, daj znać :)

EDIT:
Oczywiście CADPack wczytany!!

kurna, wypadlem juz troche z obiegu, z lispowania :(
daloby rady z tego jakies biblioteki porobic, zeby mozna bylo to jakos potem ladnie dopinac sobie do roznych programow ?
dz.
k.
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: reaktor_usuwanie obiektu

Postprzez ziele_o2k » wrz 10, 2018 14:05

kruuger napisał(a):kurna, wypadlem juz troche z obiegu, z lispowania :(
daloby rady z tego jakies biblioteki porobic, zeby mozna bylo to jakos potem ladnie dopinac sobie do roznych programow ?
dz.
k.

Myślę, że dałoby radę, ale z reaktorami to już jest dużo zabawy, nie wiem czy nie lepiej pisać dedykowane.
Ja w tej chwili nie mam czasu do tego siadać no i umiejętności też trochę brakuje.
Z drugiej jednak strony, chcę napisać program do rysowania zbrojenia mocno oparty na reaktorach właśnie (to co mam w głowie nawet fajnie działa :D ).
To śpiewka przyszłości, ale może wtedy coś wydumamy fajnego. Na tą chwilę muszę dopieścić to co mam i wypuścić w świat (hosting i domena już wykupione :) ).
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 735
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań


Powrót do AutoCAD

Kto przegląda forum

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