On 3/14/2011 2:02 PM, Dick Hollenbeck wrote: > On 03/14/2011 12:18 PM, Wayne Stambaugh wrote: >> On 3/14/2011 11:25 AM, Dick Hollenbeck wrote: >>> On 03/11/2011 10:31 AM, Wayne Stambaugh wrote: >>>> I've finally got the EESchema drawing object hit testing code to the point >>>> where it can support hit testing for multiple objects. It should not be >>>> terribly difficult task as this point (famous last words) to implement an >>>> object clarification context menu similar to PCBNew when multiple objects >>>> are >>>> at the current cursor position. I remember this being discussed a long >>>> time >>>> ago but I couldn't find anything useful when I searched the mailing list >>>> so I >>>> thought I would get some input before I proceeded any further. Is this >>>> something that users would find useful or annoying? It certainly would be >>>> more >>>> consistent with the behavior of PCBNew. Those who have used EESchema for a >>>> long time may find the changes disconcerting. I would like to get a feel >>>> for >>>> how users feel about this change so I don't spend time implementing >>>> something >>>> no one wants. It would also be helpful if someone can post this on the >>>> Kicad >>>> users mailing list and summarize the discussion. >>>> >>>> Wayne >>> I think with the combination of solid hit testing and the Collector design >>> pattern that I introduced in PCBNEW, you have the basis to craft a number of >>> UIs on top of it. The collector can be tailored (even dynamically) to look >>> for subsets of object types. So if you wanted to have a specialized mouse >>> tool that only paid attention to objects of a particular kind, or objects of >>> kinds selected from a checkbox panel, all this can be done using the >>> Collector design pattern. I even used it in the specctra_export extensively >>> as an alternative to list walking. >> Object filtering is already part of the schematic object hit testing and >> there >> is now a hit test method in the schematic screen object for returning a list >> items found. It is now just a matter of deciding what to do when multiple >> items are found at the current hit test position. >> >>> So with those two building blocks, you can craft the behavior desired for >>> the UI. >>> >>> The only thing I would say about hit-testing is that there was some recent >>> discussion about text fields which were "far away" from the base object, and >>> that this would expand the bounding box in unexpected ways, leading to >>> unexpected object selections. >> This has always been problematic to some extent. I think this was one of >> those >> pragmatic choices made by design of the original hit testing code. >> >>> >>> To address that one would be tempted to consider a design pattern where >>> instead of having a single bounding box, that we have a list of bounding >>> boxes, per *base/major* (not sub-object) object. So the text field, only if >>> it was far enough away from its base object, would contribute an additional >>> bounding box to the list of bounding boxes held by the base object. >>> Otherwise, if it was close enough, then it would contribute nothing, and >>> maybe the list of bounding boxes would be reduced, possibly down to a >>> minimum list size of one bounding box. >>> >>> >>> But here's a better observation: if the Collector design pattern is used >>> religiously everywhere, then all sub-objects such as text fields get >>> collected as a natural consequence of the current Collector selectivity in >>> play at that moment, and you do not need the list of bounding boxes, because >>> you would hit test every object and sub-object anyway, and only collect it >>> when: >>> >>> its hittest hits AND it is in the selectivity list; >>> ( a logical AND ) >>> >>> >>> For this to be effective, the bounding box of the base object would need to >>> EXCLUDE the bounding boxes of the sub-objects, e.g. text fields, and I don't >>> know that we currently do that. So this is perhaps a needed change, keep >>> every bounding box specific to the object that holds it, and exclude its >>> child sub-objects. >> This certainly makes sense to me. If a component field is outside the >> component's bounding box, I think it's reasonable to assume that the field >> was >> what the user was trying to select. Conversely, if the field bounding box >> overlaps the component bounding box and hit test picks up both the field and >> the component, the user may be attempting to select either object. >> >>> >>> Again, the Collector design pattern is solid. It is only a matter of >>> figuring out how to apply it in a way that constitutes a friendly UI. So >>> figuring out those tuning knobs can be done over time, getting the Collector >>> design pattern in place seems like a safe start in any case. Again, doing >>> that also means simplifying the bounding box concept to exclude child >>> objects, since the Collector will "visit" all those child objects >>> individually to see what needs to be "collected". >> This is reason I threw the question out there. It should be fairly trivial >> now >> to make the internal changes. It now becomes a matter of how do we implement >> this at the UI level. Is a clarification context menu ( like PCBNew ) >> appropriate or is there better way to handle this? I'm open to suggestion on >> this one. My concern is that even though I think improving the hit testing >> to >> support multiple items is a good idea, I don't want to spend a lot of time >> improving something that no one else wants. It seems to me that any changes >> to >> support multiple item hit testing will result in a significant change in the >> behavior of EESchema that users may not like. The real question is would the >> majority of users see this as an improvement or not. > > You will never know that, since at best you can only poll a subset.
I'll probably step out on that limb over the next couple of weeks. I think it's safe to say that I'll find out pretty quickly how many users don't like the new behavior. > > I don't see a reason to stray too far away from PCBNEW over all feel on this > issue. I was planning on using the PCBNew behavior to maintain consistency between applications. Thanks for the input. Wayne > > Dick > > > _______________________________________________ > Mailing list: https://launchpad.net/~kicad-developers > Post to : [email protected] > Unsubscribe : https://launchpad.net/~kicad-developers > More help : https://help.launchpad.net/ListHelp > _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp

