zaznaczenie narysowanych obiektów

0

Witam. Chcę stworzyć mini Painta. Mam już rysowanie prostych krzywych i elips. Teraz chcę zrobic zaznaczanie narysowanych obiektów (co bedzie mi potrzebne do edycji obiektów). Nie mam pojecia jak to zrobić i nie moge znaleźć nic na necie co mogłoby mi pomóc. Czy jest ktoś na tym forum i bedzie mogl mi pomóc. Pozdrawiam

0

To dość proste: na Twoim picturebox'ie tworzysz 2 zdarzenia - MouseDown (tutaj pobierasz polozenie kursora - e.X i e.Y) i MouseUp (robisz to ponownie, teraz pytasz kazdego narysowanego obiektu czy zawiera sie w tym ograniczeniu) i tyle. Pozdr

0

Yyyy, w paincie nie ma obiektów. Są tylko piksele. [???]
Więc o co ci chodzi ???

0

To zależy jak sobie to narysuje na picturebox'ie.
Jeśli bedzie wszystko co narysuje wsadzał do tablicy to może sobie pózniej "odpytać" co ma jakie współdzędne.

0

hmmm czyli np. Mam pictureboxa o wymiarach 100x100 px. Tworze tablice [100][100] i wypełniam samymi jedynkami (białe tło). Teraz tworze pierwszy obiekt - kwadracik (bez wypełnienia). W tablicy pojawiły mi się nowe wartości 0 (symbolizujące obiekt). I teraz mam rozumieć zrobić akcje, w której najeżdżając myszką na czarny pixel mam miec mozliwosc "zaznaczenia" obiektu. O to ci chodzi??. Hmm niby to jest proste ale jakoś nie widze jeszce tego jak to z tą edycją bedzie w tym wypadku :/.

0

Edycja będzie skomplikowana.... trzeba jeszcze raz wszystko przerysować z już nowym prostokątem.

0

Ale się zdecyduj edytor rastrowy czy wektorowy. Jeśli chcesz mieć edytor wektorowy (obiekty itd...) to trzeba te obiekty jakoś pamiętać. Przykładowo aby zapamiętać kwadrat potrzebujesz 4 współrzędne. I teraz aby sprawdzić, czy kliknięcie było na kwadracie sprawdzasz czy miejsce kliknięcia mieści się w tych 4 współrzędnych. Jest to zagadnienie kolizji. Dla każdej figury sprawdzasz kolizję zaczynając od tej najbardziej na wierzchu, idąc w dół zatrzymujesz się na pierwszej znalezionej. Edycja polegała by na tym, że modyfikujesz te 4 współrzędne i na nowo odrysowanie wszystkiego.
Jeśli to ma być edytor rastrowy tak jak paint to nie można zaznaczyć obiektów bo ich nie ma po prostu. Są tylko piksele i można zaznaczać konkretne obszary (zadany prostokąt, obszar o tym samym kolorze itp.)

0

No właśnie moze źle to ujałem ze ma byc jak w paincie bo tam sie tego nie da zrobic :) ... ale chodzi po prostu o to ze tworzymy obiekt (kwadrat) i potem po prostu mamy miec mozliwosc jego edycji.

0

No to tak jak pisałem. Każdą figurę przechowujesz jako współrzędne. Aby zaznaczyć obiekt sprawdzasz kolizję między figurą a miejscem kliknięcia. Przykładowy kwadrat o boku a oraz środku w pkt. (ox, oy) koliduje z punktem kliknięcia kx, ky jeśli
ox-a/2 <= kx <= ox+a/2
oraz
oy-a/2 <= ky <= oy+a/2

<= - mniejszy lub równy (żebyś nie myślał że to jakieś wynikanie)

0

spoko spoko ... co do wspolrzędnych to nie musisz mi tlumaczyc bo znam sie na "kolizjach" :). Bardziej martwi mnie fakt jak obiekty będą się przecinać i wtedy zaznaczanie bedzie troche nie teges :/. Ale jeszcze mysle wciaz nad rozwiazaniem tego problemu. Pozdrawiam

0
michal_robak napisał(a)

Bardziej martwi mnie fakt jak obiekty będą się przecinać i wtedy zaznaczanie bedzie troche nie teges :/.
to znaczy ? Chodzi ci o to jak będą nachodzić na siebie ? Przecież to żaden problem. Przy rysowaniu zaczynasz od tego najbardziej na spodzie i idziesz w górę. Przy zaznaczaniu sprawdzasz kolizję od tego najbardziej na wierzchu i idziesz w dół. Musisz mieć zapamiętaną kolejność obiektów, po prostuj trzymaj je w tablicy albo liście posortowane względem głębokości.

0

no ten pomysł z tym szukaniem obiektów po współrzędnych i sprawdzanie na który obiekt się trafiło nie jest zły z tym, że on nie chodzi o zazaczanie obiektów które są wypełnione ale o takie które mają same krawędzie i zaznaczenie nie bedzie polegało na tym że gdy jestesmy w środku obiektu to mozemy go zaznaczyc ale gdy najedziemy na krawędź czy to linii elipsy krzywej czy kwadratu. Pozdro

0

To wyobraź sobie, że krawędź to po prostu długi wąski prostokąt (wąski na kilka pikseli). I po problemie. Poza tym w każdym normalnym programie tego typu figury zamknięte można zaznaczać klikając wewnątrz nich, nie ważne czy mają wypełnienie czy nie. Tą zasadę z długim wąskim prostokątem możesz stosować w przypadku samych linii (odcinki, krzywe, łamane itp.).

0

Sory, że odgrzebuje taki stary temat, ale mam bardzo podobny problem. Tylko ze u mnie istnieją obiekty, bo to edytor wektorowy. Myślałem żeby każdy obiekt zrobić kontrolką i w tedy miałbym super obsługę zdarzeń, ale nie umiem sobie poradzić, jak zrobić kontrolkę np. w formie elipsy, ponieważ te dodawane w formie UserControl są prostokątami. Czy ktoś mógłby mi poradzić czy takie rozwiązanie ma sens i jak to ogarnąć, czy jednak trzeba szukać po obiektach sugerując się współrzędnymi kliknięcia.

0
adf88 napisał(a)

To wyobraź sobie, że krawędź to po prostu długi wąski prostokąt (wąski na kilka pikseli). I po problemie. Poza tym w każdym normalnym programie tego typu figury zamknięte można zaznaczać klikając wewnątrz nich, nie ważne czy mają wypełnienie czy nie. Tą zasadę z długim wąskim prostokątem możesz stosować w przypadku samych linii (odcinki, krzywe, łamane itp.).

Zdecydowanie obiekty. Kontrolki będą działały za wolno. Za bardzo mechanizm byłby związany z interfejsem użytkownika.

0

<quote=gosc_z_pytaniem>

adf88 napisał(a)

To wyobraź sobie, że krawędź to po prostu długi wąski prostokąt (wąski na kilka pikseli). I po problemie. Poza tym w każdym normalnym programie tego typu figury zamknięte można zaznaczać klikając wewnątrz nich, nie ważne czy mają wypełnienie czy nie. Tą zasadę z długim wąskim prostokątem możesz stosować w przypadku samych linii (odcinki, krzywe, łamane itp.).

kliknąłem nie ten przycisk "cytuj", który trzeba :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1