Dynamiczna modyfikacja obiektów C#


Recommended Posts

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.

 

Link to comment
Share on other sites

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 .

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...