Na brzinu, sorry ako je totalno konfuzno (i aplikabilno samo za veliki broj linija, za manji broj se ne treba cimati ovoliko)
Linije predstavi prvo kao objekte kojima mozhe da se manipulishe u space-u i koji mogu da se dodaju u kontejnere (naravno).
Uvedi z-order medju njima (ako ti se linije preklapaju u tachki da znash koja ima prioritet).
Uradi space partitioning (recimo quad tree, mada najbolja varijanta ce zavisiti od generalnog layout-a tih linija...).
Ako imash mnogo linija nece ti pomoci da pravish bounding box svake linije. Tu ce ti jako pomoci idiom tipa shadow-objects (gde jedan objekat mozhe da se nalazi u vishe nodova, tj. node u tree-u ima pointere na sadrzhajuce objekte). Mozhesh da razmislish i o deljenju linija po gridu kao o jednom reshenju (pri crtanju linije, koja ima svoj group-ID, isechesh je u vishe "pod-linija" sa istim id-om po ivicama grida ili stabla, tako dobijash fine-grained space partitioning i uvek mozhesh da koristish neki hash-table koji ce ti iz tog ID-a dati skup pod-linija koji pripadaju celoj liniji kako bi mogao da je rekonstruishesh u celosti).
Na klik na canvasu filtrirash linije kroz tree/grid, tako da ti od shume linija ostane odredjeni manji broj za proveru. Svaku liniju proverish za zadatu tachku klika (uz proveru z-ordera). Delegirash on-click na taj objekat, tj.liniju.
EDIT: Da, za proveru koordinata na ekranu morash dozvoliti odredjenu greshku, ekran i piskeli bash ne zadovoljavaju matematichke jednachine bez greshke