Mario, tvoje pitanje daaaleko izlazi iz okvira ove diskusione grupe. Ono je duboko teorijsko. :)
Predlazem da se ova tema prebaci u "The Art of Computer Programming" diskusionu grupu, jer tamo pripada.
Najkrace moguce cu odgovoriti (tj. pokusati da odgovorim) na tvoje pitanje.
1) Svi 2D objekti koje bi tvoja aplikacija trebalo da moze da crta treba da stoje u memoriji u nekoj vrsti kontejnera
2) Kad kliknes misem negde na Canvas widget-u (ili sta vec koristis) onda treba da uzmes koordinatu tacke gde je korisnik pritisnuo taster.
3) Kreiras jedan novi niz - videces kasnije zasto - nazovimo ga "aSelected".
4) Kada imas koordinatu te tacke ides redom kroz objekte i proveravas da li ta tacka PRIPADA tom nekom objektu, ako tacka pripada objektu, dodas taj objekat u "aSelected" array (u aSelected recimo cuvas samo pokazivac na taj odredjeni objekat).
5) Kada prodjes kroz sve objekte, u aSelected imas samo one objekte kojima tacka pripada - preostaje samo da proveris koji od tih objekata lezi ispred, a koji iza - to se radi tako sto svaki objekat ima u sebi informaciju o poziciji (recimo neki integer). Ostaje da prodjes kroz sve objekte iz aSelected niza, i da vidis koji je "najblizi oku". To je objekat koji je selektovan.
Ovaj proces se moze znacajno optimizovati. Jedna od prvih optimizacija koje programeri vrse je da se prvo prodje kroz objekte i ispita se samo da li tacka pripada "okviru" (svaki objekat se zapravo nalazi unutar polja koje je pravougaonog oblika). Ako pripada, onda se objekat smesti u neki privremeni niz, recimo "aCouldBeSelected". :) Nakon toga se "dublje" ispituje da li je na objekat iz aCouldBeSelected zaista kliknuto ili ne. Ovo je recimo jako vazno ako covek ima nekakve konkavne poligone, suplje objekte, itd.
Dakle, da bi resio svoj problem moras pre svega uposliti svoje znanje matematike, a bogme i dosta teorije programiranja (brzo pretrazivanje itd.).
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin