Feedback requested: Requirements to place a fiducial

I’m looking to get feedback from users based on some recently changed behavior as it relates to placing fiducials. This post is originally motivated by a bug report I issued at Unable to place markups points while moving mouse · Issue #5713 · Slicer/Slicer · GitHub.

Starting with ENH: Allow view rotation&zoom while placing markup · Slicer/Slicer@6b8566e · GitHub which was first included in Slicer preview build Slicer-4.13.0-2021-06-25, the mouse must not be moving at time of placing a fiducial. If you are slightly moving your mouse at time of click, the placement will get rejected.

@lassoan provided context of the change in markup placement behavior which can be read below:

The change in behavior was introduced to remove the clash of right-click to finish placement / right-button-down to show context menu; and clash of left-click to jump to selected fiducial and left-button-down to place a fiducial. As a side effect, you can now zoom and rotate the view, etc. without exiting markups placement mode (and you assign the left-click-and-drag gesture during point placement in slice views to any custom actions).

The current implementation has several important advantages, but as side effect you indeed need to stop to place a point. Right now I feel that the advantages outweigh the single disadvantage, but it would be good to hear from others as well.

I personally found this change in behavior annoying as well as some other users in my group because it slows down the workflow when trying to quick actions. These actions include placing a Line Node, placing points as part of a SurfaceCut segment editor effect and DrawTube effect. Often you can place the points quickly and then modify their position later if you weren’t as precise with your location click. However, now I end up missing a click and it throws off my workflow for a bit.

Below is a video of the fiducial placement behavior. It would be great to hear from other users about their thoughts of this recent change by using it. At first I place fiducials really quickly to demonstrate their placement being rejected. Then I try to place them slower, however even around the 6 second mark I accidentally have a fiducial position rejected even when I’m trying to be slow.

Just to show why requiring “button click” (press and release) to place a markup instead of just “button press” - left click is used for placing a point, while left-click-and-drag rotates the view, right-click finishes point placement, while right-click-and-drag zooms in/out the view.

You can now interact with your view normally, even during placing markups.
@muratmaga could you try the latest Slicer Preview Release?

Obviously any unrequested change is annoying, but the important question is if advantages of the new behavior justify the effort to adapt to the changes. We could also make it possible to turn this new feature off (as I often say, if you cannot turn off a feature then it is a bug). Unfortunately, making this operating mode switchable would not be easy, because it requires remapping of gestures in many widgets and it is complicated to separate click events (context menu, jump to slice) from mouse button events.

Bringing over another comment from my GitHub issue post:

Placing fiducials in the 3D view in our 3D ultrasound workflow is not really of interest to us. We use the 3D view for visualization purposes only. I can ask some of the other users in my group about the usage in the 3D view, but I would assume they have similar opinions.

We also do some custom fiducial placement of M-Mode using DrawTube and this M-Mode volume doesn’t even need a 3D view being a 2D/2Dt volume. We detect this when we load and show volumes and set it to Red-slice only. These draw tube points are placed pretty quickly and having to stop to click is painful for the workflow.

I’m ok with the change in the 3D View as it doesn’t impact me, however the decrease in performance when placing fiducials in the 2D slice views is not desired. Could the new behavior be limited to interaction of the 3D View?

Your users may find it useful that they can zoom in/out without exiting and re-entering placement mode. The click-and-drag feature could be mapped to some other feature that is useful during curve drawing (for example, in inkscape click places a spline control point and click-and-drag adjusts the tangent). Maybe it would be better to do what many other spline drawing implementations do (PowerPoint, ITK-snap, etc.) if you click-and-drag during curve drawing: placing many points points automatically as you draw the line. It would by much faster and more convenient for the user than asking to quickly keep clicking while trying to follow the curve on the image.

Click and drag requires a lot more precision if lots of points were going to be placed. This would lead to a jagged curve. Here we actually want a smooth curve which is why placing points at the peaks has worked well for us.

Note that this still doesn’t resolve our 2D performance issues of using say SurfaceCut segmentations.

I did, and I like this behavior. It overcomes the major issue of not being able to rotate/zoom while placing fiducials. And we do most (not necessarily all) of landmarking in 3D views.

For me the slowdown in 2D slice is very little (required me to stop on a spot for a fraction of a second), but I only tested with MRHead. Perhaps it is slower for larger datasets. Anyhow, if it is going to help, I am ok having this new behavior reserved for 3D (where it really matters to be able to rotate and zoom, without going out of placement mode).

Unfortunately, having different behavior in slice and 3D views would be about as hard to implement as making the mode selectable (and even worse, users may report this inconsistency as a bug). So, let’s keep brainstorming on alternative options.

What do you think about using the left-click-and-drag for something useful in slice views (e.g., continuous drawing with automatically placing control points along the way)? It could even be some kind of magnetic lasso tool (that would make the curve attracted to high gradient)? It could be all implemented in a new custom image curve markup (using the new pluggable markups infrastructure).

Actually, I just tried with a 3D model of MRHead segmentation (previously I was using a volume rendering), and the interactions are indeed rather slow. For every mouse move, it takes about two seconds for the fiducial to catch up.

Hmm I’m not sure how a continuous drawing with point placement will work in the slice views as it relates to Surface Cut. Surface cut benefits from a low number of points required that can then support modifying easily. If there is a bunch of points it is harder to know which ones are constraining the convex hull.

Seconding @muratmaga’s comments. This change makes the persistent placement mode much more useful. The placement mode shortcut in the markups update is now less important, although probably still nice to have.

We had handled the rotation in placement mode issue by toggling with the space bar with the segment editor (surface cut fiducial placement) button visible. Then had used a forbidden arrow cursor and disabled the 3D view interactor as we don’t allow 3D view placement of fiducials for segmenting.

For 2D Slice views, Ctrl+alt+left-click-and-drag is what does rotation of the slice intersections. If users are wanting to stay in placement mode during this action I think we have to keep it in context relative to this movement.

It’s the stacking of actions that use left mouse click that can get complicated. For instance Window/Level, left-click-and-drag can’t be used while in markups placement mode. Slicer requires changing the mouse mode to accomplish this. Will there be more mouse modes? What other left-click and left-click-and-drag actions will there be?

The new behavior change in the 3D view is essentially turning on 2 mouse modes at once (transform mode and placement mode).

@lassoan Could this place fiducials and rotate type dual functionality be a new mouse mode?

1 Like

I’m from the same group as @jamesobutler and have to agree with him that it is annoying that I have to deliberately stop moving my cursor to be able to place fiducials in the 2D views (for segmenting and other operations). I use Slicer not only for analysis, but also for acquiring new image data with robotic imaging hardware. It is common for me to quickly place fiducials in a 2D view that guide the robot where to go. These locations do not have to be precise which is why my cursor might frequently be moving at the time that I click. When I’m imaging there is usually a lot of things going on at once and I want to be as fast as possible and not get thrown off by a fiducial placement getting rejected.

Another observation, the fact that my cursor type is the fiducial placement icon with a fiducial visible at the end of it even while my cursor is moving and then it not doing anything when I click in a 2D view feels like a bug. It’s indicating to me that it can place something, but then silently rejects it which is confusing.

I took a look at other 3D modeling programs (e.g. Solidworks) to get some inspiration on how to deal with simultaneous point placement and view manipulation. It looks like their approach is to not perform any view manipulation with the Left click and keep that action reserved for Tool actions. For example, the 3D Rotation action is performed by the Middle-click, while Pan and 2D-Rotate are accomplished by Ctrl-Middle and Alt-Middle respectively. Slicer currently accomplishes these things with Left-click, Middle-click, and Ctrl-Left.

If it is too drastic of a change to migrate away from Left-click, what about using an Alt-Left when in Point Placement mode? The Alt button appears to be underutilized for these sorts of view manipulations.

I agree with you guys - we would much rather have superior performance in placing markup points over view because well, that’s what we want to focus on when using the markups module.

As in, I think it’s not a big deal if we place the markup point in a slightly incorrect spot occasionally due to view issue because it can be easily corrected once it’s been placed - however having to deal with the slightly delayed mouse click every time we place a point is quite annoying I must say.

It would be great if you could take our feedback into consideration :smiley:

I think this depends on the workflow what level of precision you are looking for. It is completely the other way around for us. I would rather place the point precisely in the first place and move on to the next without having the review the placement later. This new behavior facilitates that.

The challenge is finding a behavior that will support both use cases effectively.

I tried to simulate this behavior when I am doing LM. It is might be solution. However, I suspect you will find this equally disruptive and causing slow down, if your goal is to place lots of landmarks approximately in a very quick fashion. (Or perhaps not if you keep the ALT pressed down and manage to go click-click-click).

In this case, it might be preferable to use the ALT key to enable rotation, and update the mouse icon to to translate.

This would be more consistent with the place mode selection, which the user could then temporarily suspend with a keyboard shortcut.

1 Like

Oh I see, my original post may not have been clear. What I meant is the Left-click action will place fiducial points as in previous versions of Slicer, while holding Alt-Left would allow you to perform a 3D rotation of the view.

In other words, roll back to the old version of the fiduicial placement, which is fast and snappy, but achieve the 3D rotation functionality your group desires by introducing a new Alt-Left action.

This type of manipulation is already somewhat enabled using Ctrl-Left. If you enter the Open Curve Draw Mode, Left click lets you place fiducials, while Ctrl-Left lets you do a 2D rotation of the 3D view even though you’re still technically in “point placement mode”.

Does this make sense?