Grouped markups display control

Often, I need to visualize a group of markups together for comparison and need I way to control their display properties jointly via UI.

If we are to take on this, what would be the more straightforward way of implementing this behavior? Having a folder created by the user and all nodes to be control are moved inside, and in the markups window, the display is enabled for this folder level (which applies to all nodes inside it).

Or highlight the individual markups and develop a right-click action that will say something like “group display properties” and then whichever one is changed it applies to all the nodes within the group.

image

@smrolfe @lassoan @jamesobutler

This reminds of related discussion about should a folder in the subject hierarchy be able to control display states of all things that are under it. Also discussed as Controlling visibility of volume node children in subject hierarchy · Issue #4961 · Slicer/Slicer · GitHub. Node visibility is a display property just like markup display visibility or markup color etc.

I think this type of discussion will need to continue as there seemed to be many things to consider. For example a folder as shown in the subject hierarchy could contain nodes of a single type as shown, but it could also contains other nodes such as volume nodes.

While I would like to a general purpose method that applies to the other nodes (volumes, models, volume rendering) to control their disply settings, i think that will be too big. At the moment I would like to achieve this only for markups.

This feature is already implemented for visibility, opacity, and color. Visibility and opacity of markups is already filtered by visibility and opacity of the folder display node. Color of the markups is only overridden by the folder display node if “Apply color to all children” option is enabled.

If you want to temporarily override other display properties then the markups widgets need to be updated to take into account information stored in the folder display node.

If you want to override markups-specific display properties then you could add a reference from the folder display node to a markups display node. That markups display node could be a new one or the display node of any markups in the branch.

The GUI for this would be probably menu item(s) in the color context menu (similarly to the “Apply color to all children”). When you select the folder node in markups module, the display properties editor could modify this overriding markups display node.

Another option could be a simple subject hierarchy plugin that would add something like a “Copy to siblings” in the visualization menu so that you could first edit the properties of one fiducial list and then easily apply it to all the others in the folder. Or if you wanted this to be dynamic/automatic there could be linking modes like for views with observers and so forth. None is very difficult, but we’d want to get it all working cleanly and decide if we want to prototype in SlicerMorph or add something to the core.

Changing display properties is certainly much simpler than dynamically overriding them (it could be as simple as enabling multi-select in the node selector tree in Markups module), but it would cause permanent changes in the display node. @muratmaga is permanent change of display properties desirable for your use cases?

Another fairly simple thing to do would be to add a menu item like “Make display preset” which pops up a dialog prompting for a name (default ‘template-%d’) and then these could be added to the folder’s visualization menu to apply to all the contents so you could easily switch among them. These could also be persisted to the scene.

This should be fine. In fact, it think if it wasn’t permanent it would be a bit confusing.