Idea: "Undo2" - Go back 1 step in current or previous command

While doing some drawing today I started thinking of a new way of undoing things in Rhino. It’s not meant to replace the current Undo but just a different Undo which I will call “Undo2” here due to lack of a better name.

So here’s an example of what often happens to me, and I’m sure other people experience the same issue:
I’m in the rotate command, I’ve selected the object I want to rotate, gave a rotation point and I started rotating. Then just before I click to confirm the final position my mouse snaps to something I didn’t want and my object turns out to be in the wrong spot. “Oops”. I Undo the rotation and need to go over the all steps again of selecting object, rotation center, and start and end direction of rotating. This undoing and/or having to restart a command and reselecting seems to happen with a lot of commands.

So I thought: What if there was an Undo2 command that would only undo the last input you gave and go back to the previous menu with the inputs you’ve had before? Even after you’ve completed a command it would be able to go back into the previous command so you don’t need to reselect everything you did.

I’m not a developer so I don’t know how much work this would be but I think this could be something very useful. I see video tutorials (even published by McNeel) where people experience the same "Oops"problem of restarting commands. So I just thought I’d throw it out here. What are other people’s thoughts? Am I overlooking obvious errors that would occur with this idea?


Some commands (like Trim) have this built-in and it is very handy indeed and I miss that on many other commands that don’t have it, when I mess up one internal step. So yes, definitely a global In-command-step Undo (your Undo2) would be quite helpful.

True. It’s also quite connected to the previous topic highlighting this problem for Orient and Copy: Orient improvement: Undo

Except now it would refer to all commands. Being able to actually go back into any command after it’s finished would prevent a lot of having to redo things.

I guess the “easier” thing to implement without revolution how things are coded would be to create a list of commands where the “internal undo” could be handy. Orient definitely being one of them. But obviously each single internal step sub-undoable would be good to have.

Now I know why I had a sudden Déjà vu when I read your first post in this thread :wink:

But the example here is not “in-command” and I imagine that makes it a lot more complicated.
If you make sure you always use Rotate with the Copy option, RH-47799 would apply here as well.

Hi Wim,
Rotate was really just to give an example. It goes way beyond that:

  • After boolean commands realizing you forgot to select or deselect something
  • In arraypolar snapping to the wrong point as a center
  • Arraylinear snapping to a wrong point/distance
  • Trying to loft and realising you forgot to select one curve
  • Extruding with a specific distance in the wrong direction because the mouse snaps to a point on the other side of the curve (I realize you can set this to only follow negative and positive values to decide on the direction, but I need both options)
  • Clicking on the wrong edge at the target surface when doing flow along surface
  • Accidental snapping with drawing a basic shape (line, rectangle, circle, arcs, …) in the curve commands
  • Finishing the Offsetsurface command and forgetting to set “Solid=Yes”
  • Forgetting to set “Rigid=Yes” in Flow along surface
  • Basically a lot of those menu options of which the result is only visible after finishing the command
  • etc…

Hei Siemen,
Thanks for those examples.
It’s on the list now - RH-49040

Sounds like a good feature to implement by a universal library routine that could be incorporated into any command where appropriate. Then it would work in a standardized uniform way wherever used and make for easy user familiarity.

Can I just bump this topic again? I think this could be a really really useful feature. I sometimes wonder how much percent of the commands I do I end up “oopsing” (aka undo and redo the command)

I even came up with a command name for it, so no need to spend time on that:

Hei Siemen -
I’ve bumped it but I imagine that this would require a rewrite of all commands…

If all commands get this kind of update regarding their interface - this should be a wider discussion !

I could imagine some kind of “Selection+Option Set” (S-O-Set) in the background of each command. “Undo2” would be more a modification of this S-O-Set. But then it would be great to also run another command with the same set. A Set chosen for _edgeSrf could be used for _sweep2 or _netWorksrf again.
Repeating a _matchSrf would be easy
Drawing a line from point to point
The S-O-Set could be used to Move or copy from point to point…

If this S-O-Set it could be a nice improvements for fast coding commands and all those “get…” stuff.

But I see a lot of traps …

There is related Topics if all command - inputs get rewritten:

(As this a completely other aspect - I write a second post)

I think there can be a lot of workarounds and fine tuning of Workflows to make less “Oops”:

  • do more breaks, drink more coffee, get more sleep

  • work slower, but more precise

  • use oneshot Objectsnaps

  • select Options via keyboard - the fastest way !

  • zoom and rotate view a lot, and make sure the view fits to your selection or target point snap.

  • in most cases preselection is faster and more stable as it will “survive” the command. If you know the command, make the first selection before you run it. (one ! keypress less ;-))

  • use macros including correct options for stuff you need often

after “Oops” care:

  • delete unwanted (_sellast is great), remove from selection with (cmd, ctrl click)
  • paste from the future - i love this: to many results ? - select the few ones you need, copy, then undo, past the correct results only (sometimes easier then deleting unwanted - or very helpful if copy / delete option was wrong.