Dynamiczna modyfikacja obiektów C#


Rekomendowane odpowiedzi

Mam okrąg w kilku egzemplarzach na rysunku. Gdy modyfikuję jeden dowolny to pozostałe również zmieniają się. Czy jest inny sposób niż przez bloki? Czy zadziałałoby to poprzez użycie "event handle"? 

- utworzyć nod do przechowywania informacji o nazwie np. "my_circle"

- narysowanie okręgu o promieniu r

- dodanie jego ObjectId do my_circle

- kopiowanie okręgu oraz dla każdej kopi dodanie Objectid do tego samego my_circle

- każdy okrąg w xdate będzie zawierał  tekst "my_circle" -> potrzebne do identyfikacji wszystkich okręgów powiązanych z nod o takiej samej nazwie

- każdy okrąg będzie posiadał załadowany event handle do metody analizuj() (handle wrażliwe na modyfikację obiektu)

- a w metodzie analizuj():

    * gdy zostanie wywołane to znak, że obiekt został zmodyfikowany. Zapamiętanie zmienionego obiektu. Pobranie z xdata jego nazwy, przejście do nod -> my_circle i w pętli po wszystkich obiektach odczyt ObjectId -> pobranie każdego rzeczywistego obiektu, usunięcie go i podstawienie w to miejsce zmodyfikowanego okręgu. Jeżeli oczywiście można bezproblemowo użyć zapisu o ObjectId jako string do odszukania na rysunku obiektu okręgu.

Czy jest to dobra droga do rozwiązania problemu? Jeszcze nie pisałem tego, a chciałbym dowiedzieć się czy jest możliwe takie rozwiązanie lub może istnieje lepsze podejście.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Na C# się nie znam , więc  się wypowiem, co mi zależy :wink:

Teoretycznie powinno to zadziałać.

- Gdyby to był LISP należałoby utworzyć reaktor :vlr-modified który wykonywałby operacje po modyfikacji okręgu. Podejrzewam, że tą rolę w C# pełni nod

16 godzin temu, kaminki napisał:

- kopiowanie okręgu oraz dla każdej kopi dodanie Objectid do tego samego my_circle

- Proszę zwrócić uwagę, żeby ObjectId dodawąć do reaktora nie tylko przy poleceniu _copy, ale też _mirror, _offset, _array, _pasteclip , _copym i wszystkie inne podobne
A może lepiej użyć reaktora na dodanie elementu do bazy danych  w LISP byłoby to coś jak to:

(setq appobjvlr (vlr-acdb-reactor nil '((:vlr-objectAppended . objectAppended))))

 

16 godzin temu, kaminki napisał:

- każdy okrąg w xdate będzie zawierał  tekst "my_circle" -> potrzebne do identyfikacji wszystkich okręgów powiązanych z nod o takiej samej nazwie

Nie jestem pewien, ale może listę elementów podpiętych pod reaktor można pozyskać bezpośrednio z reaktora ( w LISP jest to funkcja vlr-owners) , w takim przypadku nie byłoby potrzeby tworzyć dodatkowej XDaty.

Ciekawy temat. Proszę dać znać czy udało się uzyskać zamierzony efekt .

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie