I have a use case (for aeva) where I would like an operation to modify the application’s selection. I see a few ways to do it:
-
good: add
ReferenceItem
s to the operator’s Result
attribute named append to selection and remove from selection. Then the application can decide what to do with them when processing the result. The reference items can have HoldReference="true"
so that shared pointer things (like ephemeral selection objects).
-
bad: add a new
SelectionOperation
subclass of XMLOperation
and have the application register its Selection
with the operation manager, which will construct each SelectionOperation it creates with the application’s selection object.
-
ugly: have the operation link to the SMTK’s
paraview/appcomponents
library. When the application runs, it fetches the application’s selection from the pqSMTKBehavior
instance and modifies it.
While I included the ugly option as a joke (albeit a prank I may pull in the short term), does anyone have a preference for the long-term solution?
I am not sure if your good solution is that much better than the other options you mentioned. I’m also not sure that the other options you mentioned are all that bad and ugly. I would be interested in knowing more about your use-case to determine whether or not this is broad pattern that we expect many modeling sessions to require.
Offline, @tj.corona came up with a third alternative that seems like the cleanest approach:
- add a
SelectionGroup
(that inherits smtk::operation::Group
) to indicate the operation would like to work with a selection provided by the operation.
- have the application add an
operation::MetadataObserver
to its operation::Manager
that passes the Selection
to operations in that group as they are created by the operation manager.
I’m not sure how (without inheritance), the application’s metadata observer can pass the selection to the operation, but assuming that works out, it definitely is the most flexible alternative; the operation would be able to prepare the selection directly instead of via hints.