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.