# How do I create an oblong torus with a constant thickness?

I've tried making a torus and stretching it and making an oval curve and beveling a circle on it, but with both methods the torus ends up getting thicker on the sides that are stretched out. Is there any way to keep the minor radius constant along the whole shape?

• Create a mesh circle. Tab to edit mode and stretch along one axis. Tab back to object mode. Convert to curve Alt C > C. Bevel it. Convert back to mesh Alt C > M. Neither Bezier nor Nurbs curves can exactly represent elliptical shapes, not even circles. They approximate circles fairly well, but with ellipses, their shortcomings in this department become painfully apparent.
– user7952
Feb 14, 2015 at 6:22
• @SixthOfFour you should write that as an answer (preferably with screenshots). Feb 14, 2015 at 6:59
• @AWildRolandiXor The reason I wrote it as a comment, is that I'm not at my blending computer, thus I can't make any screenshots. I'll post an answer though, and add screenshots later.
– user7952
Feb 14, 2015 at 7:18
• Yeah, in cases where your comment is an answer it's best to add the answer (unless you think the question might be off topic, but you can provide a solution in a comment while flagging/voting to close). You can always edit answers later to provide improvements, etc. Feb 14, 2015 at 17:37

If you stretch a torus, both the major and the minor radii will be stretched, so the effect you see is perfectly normal. There may be some way to remedy that, but I haven't found it. I have come up with some workarounds though.

# Method 1

Tab into Edit mode1.
Scale it along one axis, SX or SY.
Tab back to Object mode.
Convert the circle, which should now be an ellipse, to a curve AltC > C.
Put a bevel on it. If you want a circular tube, you needn't use a bevel object. Just set the bevel depth and resolution to whatever rocks your boat and set Fill to Full.
When you're happy with it, convert it back to a mesh AltC > M.
Unfortunately I haven't been able to find out how to include the menus when I take screenshots, so this doesn't show the conversion between mesh and curve and back.

The reason I don't use a curve directly, is that neither Bezier nor Nurbs curves represent elliptical object very well. They approximate circles acceptably, but with ellipses they fail miserably unless you give them a ridiculous amount of vertices.

# Method 2

If you have the Extra Objects addon installed and activated, you can use XYZ Math surface to create a torus object of practically any shape.

Add > Mesh > Math Function > XYZ Math Surface

For an elliptical torus with a major axis of 3, a minor axis of 1 and a circular tube with a radius of 0.25

X equation:
(3+.25*cos(u))*cos(v)

Y equation:
(1+.25*cos(u))*sin(v)

Z equation:
.25*sin(u)

U min and V min: 0
U max and V max: 2*pi
U wrap, V wrap and Close V enabled.

The normals will be pointing inwards, so you'll need to flip them. Tab into Edit mode and hit CtrlN to recalculate them to point outwards.

# Method 3

Here's a third method that I discovered today, when reading this question. It uses the Skin modifier, which is something I've never used before. This seems to be the simplest method, and very straightforward, and that's the reason I'm making this late addition.

Tab into Edit mode1.
Scale it along one axis, SX or SY.
Tab back to Object mode.

Add a Subdivision Surface modifier. As pointed out by PGmath in a comment to this answer, the Catmull-Clark algorithm doesn't produce a perfect circle, and depending on your need for accuracy in the shape of the skin, you may want to consider using one of the first two methods instead.

The radius of the skin can be scaled. Make sure the Skin modifier is still in the modifier stack, i.e. do not apply it.
Tab into Edit mode.
Make sure everything is selected (A once or twice).
Press CtrlA and then drag the mouse or use the arrow keys on your keyboard until you're happy with the thickness. Enter or left mouse button to confirm.

1Scaling in Edit mode is essentially the same as scaling in Object mode and then applying the scale.

• BTW, you can use alt+shift+S (I think that's the right combo, if not somebody can correct me) to change the skin radius. And also, technically Catmul-Clark subdivision doesn't converge to a circle (off the top of my head I think it converges to a cubic polynomial), so the cross section won't be a perfect circle. Feb 28, 2015 at 22:16
• @PGmath I know it doesn't make a perfect circle, and the first two methods are more accurate. I still think this third method is very usable though, and the cross section is closer to a circle than a Bézier or Nurbs scaled on one axis would be to an ellipse.
– user7952
Feb 28, 2015 at 22:36
• @PGmath I just consulted the Blender Wiki on the Skin modifier, and the radius can be adjusted with Ctrl+A in Edit mode. I'm a little busy right now, but I'll update my answer when I have a chance. Thanks for pointing it out.
– user7952
Feb 28, 2015 at 22:44

Methods 1 and 3 in the other answer are definitely good, and worthy of an upvote. However, method 2 leaves a little to be desired. The standard equations for a circular torus won't yield an elliptic torus with constant thickness. It will be more visible the more eccentric the ellipse gets.

I'm working on my first ever Blender add-on, which (if all goes well) will add tori of different configurations. Currently I have the elliptic torus in working order, and I'm happy to share it, if anyone would be interested. It's available from my GitHub repo Tori. Just click Clone or download and save it to your harddrive.

To install it, open up Blender, hit CtrlAltU to open up User Preferences.

You should now see the following.

Click the chek box next to Add Mesh: Tori, and the add-on should be working. If you want to make it survive restarts, also click the Save User Settings button.

There should now be an Elliptic Torus entry on the Add -> Mesh menu.

The options are as follows

Major Semi-Radius is half the size of the major axis of the ellipse.
Minor Semi-Radius is half the size of the major axis of the ellipse.