Wish: "Revolve" to have an "UseLastAxis" option in the Command line

“Rotate 2-D” has a Command line option called “UseLastCenter”, and “Rotate 3-D” has “UseLastAxis”. They are both remembered independently, meaning that if you use to rotate objects with either command, their respective axis of rotation will be remembered and could be used later.
Could you add a similar option to the “Revolve” tool, as well? Currently, the revolve axis must be set manually each time.



That may be handy in certain situations.

I am just wondering what could be the behaviour of such an option regarding the location ( start point) for the remembered axis ( start point + end point )

A : Remember the last used axis ( start point + end point ) ?

= Stating that the user wants to revolve other objects using the same start point ( Axis location in space )

B : Remember the last used axis ( Vector dir only ) and ask the user to define a new start point via mouse click or xyz coordinates ?

= stating that the user want to revolve other objects using the same vector direction, but with another start point ( Axis location in space).

Rodolfo Santos

It should work exactly like the “UseLastAxis” option used on the “Rotate 3-D” command, i.e. remembering of the axis vector (point A and point B) but not the starting point, because the latter must be specified by the user subsequently.

I see, it makes sense from the user perspective.

I don’t think that idea will be retained because the intent is to store two datas ( start-end point - positions in space ), recall them back and at the same time, allow the user to change the scenario by modifying one of the two collected datas ( the start point )…

Rodolfo Santos

It’s already implemented in the “Rotate 3-D” tool exactly like that and it works beautifully. :slight_smile:

1 Like

Let’s see…

i like the idea of having those kind of “dependencies” as “use last axis” … but i think there would be a much better / wider approach:

a better integration of c-planes in those commands:

instead of “use last axis” there could be a
"save axis as c-plane" - which would be a “cplane by normal”
a second option:
"use named cplane z-Axis"
this would allow a cross-usage for different commands, including move, orient, orient3pt, revolve, railrevolve, rotate, rotate3d … and some more

i like most:
what about an Option similar to infinity plane ?



Actually an approach like this might allow an easy approach for beginners and all those special wishes advanced user have:

any command could have an “additional options” - similar to terminal -h (help) this additional options would just pop all supported options into the commandline - the additonal options woud be accessibly like infinity plane…
rebuild, refit, last axis, infinity plane, simple sweep, tolerances, …

what do you think ?

1 Like


I think the wish is to have access to a non intrusive option that may help to facilitate the execution of repetitive tasks in the context of the used command.

Your suggestion is more or less a request for a new ( relevant ) feature.
A new wish by so, right ?
A new topic…

Rodolfo Santos

dear @RodolfoSantos
are you asking me to post a new topic “non-intrusive options”?

my thoughts were somehow viewing from a more and more abstract view on this topic - the steps in my brain:
(1) yes - reusing an axis is great - but what if you want to use the second last axis? shall rotate and revolve share the “same last axis” ?
(2) → saving them with a name would even be better. - but we already have named c-planes…
(3) → a z-Axis of a named c-plane could serve as a axis of rotation. - but for full functionality, this would mean at least 2 options: save axis as cplane, use z-Axis of named cplane … but this would make the command options more and more complex…
(4) → we already have IP, which is somehow a hidden(?) or “non-intrusive” option, so we could use this mechanism here as well and even expand it to other commands…

regards - tom


I was suggesting to dissociate your suggestions that i find relevant from what I think is willing @Rhino_Bulgaria that is more about implementing an option to the native Revolve tool.

There’s kind of a convergence with your idea, but I think that what you have in mind leads to a more wider approach ( as you wrote).
This may justify a new wish topic.

Just my humble feeling.

Rodolfo Santos

Since the “UseLastAxis” option for “Rotate 3-D” is already implemented in the code of Rhino, I think that it would be super easy to be added to the “Revolve” tool as well. :slight_smile:

About a couple of years ago I proposed somewhere in the forum saving of used axis of rotation, but at the time the idea probably was not of first priority to the Rhino developers. I already use lots of CPlanes saved as rotation axes for rotation of objects, or creation of revolved surfaces and extrusions, though it’s a bit annoying when I use one of the CPlanes and then forget to switch back to the World plane to continue modeling other stuff. :smiley:
Expanding the idea to use saved axes of rotation as a single-use option to certain commands that will not require switching from the current CPlane to another CPlane will definitely serve a good purpose to many people who create mechanical or architectural models, but it also require extra developer time. This is already possible with the saved CPlanes, but as I mentioned above, it requires to revert back to the previous Cplane once the temporarily used Cplane with different orientation is no longer needed.

I guess I do not see any reason this would be difficult, not that I’d know, but it also seems less generally useful than in the Rotate commands where one might want to adjust the rotation of an object more or less interactively.


Pascal, “Revolve” is used by many people on mechanical and architecture projects to build radial profiles, as well as to test collision detection between moving parts (it’s convenient to extract border edge(s) and revolve them around the rotating axis) or the maximum reach of rotating objects such as horizontal or vertical doors, windows, car doors of any type and various other stuff.

For example, here is a collision detection test of a scissor door using the “Revolve” tool to build the surfaces that represent the rotating path of the door’s border around the front fender. It’s also used to determine the best ingress/egress space that a fully opened door would allow. The door hinge is oriented based on the information given by the rotating path.

My proposition is to also make possible straight lines to be saved as interactive axis of rotation. This way, if the door hinge shown above is being oriented in a different position while it’s grouped together with a line representing its axis of rotation, the saved axis of rotation would adjust accordingly and the user will not be forced to set a new custom axis of rotation after each change in position of the line. Mobile CPlanes ('_MPlane) already do something similar, except that they change the CPlane based on the change of orientation of the parent object they are linked to. An interactive axis linked to a straight line has the advantage to keep the current CPlane intact.
Another problem with “Revolve” based on using the Z-axis of a CPlane/MPlane is that changing the orientation of the latter will not affect the axis used to “Revolve” a profile. An interactive axis should be able to do that.

On a side note, the “Refresh” option of the '_MPlane command is a bit misleading, because it will not refresh the MPlane. Instead, it activates the Mplane, so I think that you may also consider to rename it as “Activate” instead of “Refresh”. At least this is my logic. I may be wrong. :slight_smile:

Hello - here is how Revolve works now, with History on, if you snap the revolve axis to the ends of, in this case, the red line:

If you snap to the ends of the cyan curve, that also works.



The goal is to be able to orient the axis in different positions while the curve profiles remain in their original place. I can to do that ONLY if the curve used as an axis starts from exactly at the zero of the active CPlane and is vertical along its Z-axis. Unfortunately, this approach can’t handle the history update of the revolve along a curve whose start is not located on the CPlane’s z0.

Edit: I figured out that Rhino gets confused to which object to lock while snapping to set the axis of revolve. At the 14th second of my video I snapped the start of the axis to the line that got thicker for a moment as a visual confirmation that I was snapping to it. However, the point that’s there (it’s grouped to the door hinge) was on the first place in the tooltip saying “point, end, knot”. Do points get prioritized over lines for the snapping, even if the lines get thicker as a confirmation that they are the ones used for the snap?

Edit 2: I did some more tests on two different hinges from my older projects opening totally different files and that problem happened there, too. Points get prioritized over lines that share the same coordinate (i.e. the point and line intersect together), so after I create the revolved extrusion, it could be modified by moving the point. Modifying the line that was supposed to be used as an axis does nothing, though.

1 Like


As I mentioned earlier, @Rhino_Bulgaria suggestion is to my humble opinion, a relevant suggestion.

I teach mechanical design (MD) using other packages and it is true that in many situations, being able to easily define a rotation axis leads to a better user experience.

Coming back to the tittle of this topic, the idea is to add an option Use Las Axis to the Revolve command.
I think it makes sense as it is not rare that


Revolve Axis in Rhino is defined with 2 points. That’s the only way.
In some situation, that approach leads the user to unfocussed procedures.

Back to MD, defining an Axis of Rotation is as simple as clicking on any line available in the scene or any selectable compatible entity on existing solids.

Use Last Axis is one way , it will help to recall a wanted direction , but as mentioned before,

More or less, the idea is to relocate a line.

Use Object is another way
It opens the door to the definition of a Rotation Axis as usual ( 2 pts ) + the opportunity to use a reference object to define the Axis. It may be a sub object , an existing line in the scene, a sub curve ( One shot compatible ),…

I see benefits in having other strategies to define a Rotation Axis with Rhino, as @Rhino_Bulgaria claims, it is a feature that is frequently used in MD as well as in others fields…

Rodolfo Santos.

1 Like

Having an option in the Command line called “PickAxis” (it should allow selecting only of straight lines or edges) could simplify the workflow, because the usual snapping to two points in the viewport in a dense area with other objects around requires zooming in, and could also lead to an unwanted snap to another nearby object (which happens often as the rotation axis is usually set to 3d models of hinges, gears or shafts).

1 Like


Rodolfo Santos

Raising this request, because “Revolve” is hugely slow in repetitive modeling due to lacking the “UseLastAxis” option that both the “Rotate” and “Rotate 3D” tools already have.

Also, Rhino needs an interactive adjustable axis, which I explained in detail in my earlier posts above.

here’s a workaround script I just made.
revolve_sg.py (892 Bytes)

-RunPythonScript "path\to\scripts\revolve_sg.py" 0 #use last axis
-RunPythonScript "path\to\scripts\revolve_sg.py" 1 #use new axis

edit: I see it behaves a bit weird, as it is view dependent… so only partly useful

1 Like