Hiding 3D cursor: use cases

Edit 2: Blender core developers are against the option to manually hide 3D cursor. The only thing remaining to discuss here is how to implement it “unofficially” (i.e. via unconventional methods). See the post #18 and further.

Edit: perhaps I shouldn’t have made a poll for this, since there are much more options to consider than I originally thought. Please read the discussion before voting.

THE ORIGINAL POST:

Hi,

As my first attempt to contribute to the Blender’s source, I’m trying to add an option to hide 3D cursor in 3D view.


However, Ton Rosendaal says we shouldn’t complicate Blender with more options and buttons. It seems that hiding 3D cursor is only necessary for Paint and Sculpt modes (and others where cursor is not used), in which case the cursor should be hidden automatically in these modes.

So here’s the question: how should cursor-hiding be implemented?

  • Auto-hide in some modes (which ones? Paint, Sculpt, Text Edit?); always show in other modes.
  • Give user an explicit option to show/hide cursor (per View3D? per scene? a global setting?); the option would not depend on the current mode.
  • A combination of the above: auto-hide in some modes, allow user to show/hide the cursor manually in the others.
  • Same as #3, but the option is only accessible via python (so that addon developers can display something different in place of cursor).
  • Cursor hiding should not be implemented. The 3D Cursor Is Fine The Way It Is.

Your poll left out the option “The 3D Cursor Is Fine The Way It Is”

My vote goes for any option that allows manually hiding it. Auto-hiding in paint/sculpt mode wouldn’t hurt either but I can also see how it can be preferred to hide it in object mode as well.

3D cursor is actually one of the few annoyances I have with Blender. I hardly ever use it, but I constantly find myself clicking it out of viewports to get rid of it. It’s especially annoying when you are trying to take screenshots and only after saving it you realize there is that annoying circle in the middle of the image. :spin:

Personally, I find the cursor distracting so I would prefer not to see the cursor in any mode because I usually set its location either manually or by clicking on some surface (with cursor depth enabled) or by snapping it to an object - in all these cases I know exactly where it is. I know about “Only Render” option, but it hides cameras, lights and many other things I often want to see. So having an option to hide the cursor is useful - with it I would not have to switch “Only Render” on and off so often.

I think it is better to have this as per viewport setting and the cursor should be visible by default.

Your poll left out the option “The 3D Cursor Is Fine The Way It Is”

Oops! Confirmation bias. Is it possible to edit the poll? :3

The 3d curser is used in paint mode when using the clone brush

What is ‘Text Edit’ mode ? If you mean the text editor then the 3d curser does not show there anyway.

I’m in favor of making it able to be hidden, though automatically able to be turned on (like if you switch to 3D pivot mode and it’s off, turn it back on). Also rather than the checkbox like in your image, I’d prefer the checkbox to be on the actual panel name (like Grease Pencil or Motion Tracking).

Oh, didn’t know that. Thanks!

I meant Edit mode of a 3D Text object.

Good point :slight_smile:

People in the bf-blender mailing list are also suggesting:

  • Put a cursor on/off toggle in the 3D View header.
  • Make a hotkey to toggle 3D cursor.
  • Forbid cursor location changes when it’s invisible, or, alternatively, unhide cursor when its location changes.

I’m not sure what all situations it should be turned back on if it’s off, but here are the ones I can think of:

  • LMB Click (sigh I hate that control);
  • 3D Cursor Pivot;
  • Shift+S – pretty much anything in the menu other than “Selection to Grid” should probably turn visibility back on;
  • Clone tool is selected in Texture Paint;
  • Grease Pencil if Cursor is selected;

Spin and Screw tool uses the 3D Cursor, but due to the way they work I’m not sure if they should reactivate it’s visibility or not.

Also the ability to adjust its visibility/transparency would be sweet! Right now aesthetically speaking its the ugliest thing in Blender. It is useful in many cases yes but I find myself moving it away from my center of focus so it is not in my way, last time was just a couple of hours ago. So at least a toggle for show/hide would be awesome. I wanted this for several years.

Please don’t cram any more buttons anywhere near the viewport, the Nkey panel and header bar are crowded as it is.

There’s really no reason to toggle this on and off multiple times while working. Just put the option in preferences. Blender users generally either know how useful the cursor is, or they don’t. The former won’t want to hide it, the latter won’t want to show it. Add an operator to toggle it so the few that will want to can add a keybinding.

^IMO

Well, seems like core developers came to a consensus about this topic:

rejecting this patch, better to hide the cursor in situations its not used (as in sculpt), we already suffer from too many options.

My personal opinion is, sculpting/painting are the modes where most of the non-renderable things are distracting, so for many people the “Only Render” option is already a sufficient solution… Quite likely, other users might be confused if cursor suddenly appears/disappears under some paint modes. With all this in mind, the situation might be not worth changing at all.

Well, whether some people agree with the resolution or not, at least it’s a kind of relief. The project maintainers made an official statement on the issue (as I understand it, “not another option for a narrow use-case”), and I suggest everyone to go along with it.

The only possibility to manually hide cursor that the core devs haven’t explicitly ruled out (yet) is the ability to achieve the “hiding” effect via addons. For example, even a global run-time (not saved in .blends) Python-accessible option to hide cursor(s) is already sufficient to implement all sorts of cursor-visualization logic. This perhaps would be the best of both worlds: most of Blender users won’t notice any change, and users with special demands will still be able to customize this part of Blender to their liking.
This is, of course, assuming that “we already suffer from too many options” referred to GUI and not to Blender source code :stuck_out_tongue:
I’ll try to ask core devs what they think about such possibility, and the answer will decide whether any further discussion of this topic makes sense.

Not too surprising. I don’t think you’re the first one to propose hiding it.

One thing that I think would improve it is if it was part of the history stack so people could at least undo it when they move it. I think it’s scary for users that don’t know what it is, and they fire up Blender for the first time and move it and can’t seem to undo it. I have no idea how difficult that would be to do though.

I suppose you might find this StackExchange answer useful:

first few weeks in blender I hated it!!! wanted rid of it so much!!!

then I got to use it more an more and miss the heck out of it when I go into other apps

This is not true. I use it often, but I want to hide it. There is no reason for me to actually see it, it distracts me and forces me to use “only render” option too often. It is sad that this idea got rejected.

Please post when you know what they think about this… Hope at least they allow us to have this option as addon.

I’ve talked in IRC to Ton Roosendaal about this, he said that the issue wouldn’t be solved this way.

His argumentation goes along the following lines (pardon me for translating an IRC chat into a literary text):
3d cursor functionality is important. A lot of editing and tools use it; this was a design decision, and it turned out to be very useful. Hiding it would just cripple the UI and make blender behave weirdly. To work without the cursor, a proper replacement (for all the tools that need it) would have to be designed, not just giving the user the power (and responsibility) to hide/show it on demand.
Also, making everything optional is not the good way to better tools design.

So, basically, that’s the final and definite end to the “Official Way To Hide 3D Cursor” saga. Ton clearly disapproves of such “feature”, and his opinion is the most influential among the core developers. Let’s move on :slight_smile:

…And by “moving on” I mean “a similar effect can still be achieved through hacky means” :wink:
Currently I can think of 3 ways to “hide” 3D cursor via python scripting:

  1. Move cursor outside of camera frustum for the duration of View3D overlay drawing. That’s the most easy way. In the “Enhanced 3D Cursor” addon I was trying to implement this by temporarily setting cursor coordinates to (NaN, NaN, NaN), but it was causing bugs. However, a possibly less-buggy solution would be to temporarily set cursor location just to somewhere the camera cannot see. Maybe even the buggy behavior described in that bug report can be circumvented through the clever restoration of last cursor position on scene load.
  2. Store a piece of 3D View after all 3D things have been drawn, and paint it over the cursor before all the other 2D things are drawn. However, this is likely to cause a lot of visual glitches.
  3. Turn “Only Render” on for the duration of View3D overlay drawing. This might be the less hacky way, but it would require reimplementing other overlay things in Python (how much of them can be implemented is a matter of investigation).
    I don’t know when I’ll have enough time to properly investigate and bug-hunt “the unofficial methods to hide 3D cursor”, but I’ll probably post a request for testers here when I have something to show :slight_smile:

Summing up: even if the official position is “no way”, it doesn’t necessarily mean there’s really no way :wink: We just have to keep in mind that these other ways might be dangerous and there would be no one to blame except ourselves. :smiley:

  1. Move cursor outside of camera frustum for the duration of View3D overlay drawing. That’s the most easy way. In the “Enhanced 3D Cursor” addon I was trying to implement this by temporarily setting cursor coordinates to (NaN, NaN, NaN), but it was causing bugs. However, a possibly less-buggy solution would be to temporarily set cursor location just to somewhere the camera cannot see. Maybe even the buggy behavior described in that bug report can be circumvented through the clever restoration of last cursor position on scene load.
    If you are looking through the camera the curser can be just be behind the camera. If its in the same location as the camera you will still see it so just needs to be slightly behind. You then have a specific location to position the curser and no issues with it being way outside the scene.

Though personally I really don’t see what the problem is that you are considering such weird workarounds.

Just enumerating the possible options for clarity :slight_smile: I hope that the first method will work, but in case it’s too buggy, it would be nice to have an alternative.