First option is definitely best, but you need to expand it slightly: Use a bounding box around every shape, so you can do an O(1) check if the click is inside the bounding box (click.x < box.left, click.x > box.right, etc) If the click is inside the bounding box, then you can run normal edge detect O(number of lines per poly) -- (drop a line to the axis, count number of line intersections - check stackoverflow or similar for code)
If you have Z index on your shapes, then start from the biggest Z index and take the first match. If you are drawing in a list, then start from the bottom of the list and work upwards and take the first match. On Thursday, December 20, 2012 1:14:43 PM UTC+2, membersound wrote: > > I'm creating some kind of drawings/flowchart/UML-diagram like tool with > GWT Canvas (Java). > For hit-detection of my drawings I could imagine 3 different strategies, > but I do not know which would work best for my goal. > > - Just keep track of all Shape coordinates and iterate all objects on > mouseclick > - draw all objects on a ghost-canvas on mouseclick, and use > isPointInPath() after every object drawing > - using a ghost-canvas and draw each object with its own color (like > #000001, #000002), and keep reference of them in a Map<Color, Shape>. Then > just detecting the mouseclick on the ghost-canvas and get the object > belonging to the pixelcolor under mouse > > What would you prefer, and why? > -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/MfZ9xo1DLvYJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
