I'm trying to use an array modifier on an object such that each copy is rotated 2° about the z-axis from the previous one, and then translated along the x and the z axis.

This is what I started with (the Empty at the origin is used to rotate and translate the object):


This is what happens after I rotate and translate the Empty (pivot point is set to median point) (doesn't matter whether I translate or rotate first, It still turns out like that):

Not working

The problem in the diagram above is that the translation on the x-axis does not happen; only the z-axis and the rotation is done right. If the x-axis translation is done correctly, the track should align exactly, like in the diagram below.

This is the effect I want to achieve:

What I want

Here is my Blender file, if it helps.


  • $\begingroup$ Is using an array mandatory here? $\endgroup$ – lemon Mar 2 '17 at 13:43
  • $\begingroup$ No, this is just an object that I want to 3D print. $\endgroup$ – Bernard Mar 2 '17 at 14:46
  • $\begingroup$ OK, I have answered another way as I don't think the array can work here $\endgroup$ – lemon Mar 2 '17 at 14:48

A way to do it is to use a spiral using add curve extra object standard addon.

enter image description here

To add a first curve, simply add an archimedian spiral curve and tune the parameters on the operator panel on the left:

enter image description here

Now add a second curve, identical except for its radius:

enter image description here

Convert them both to a mesh, using AltC, then join them CtrlJ:

enter image description here

Enter edit mode, select all the vertices, and CtrlE 'bridge edge loops':

enter image description here

Curve the floor of the ramp, adding a loop cut CtrlR (or 2...) and grab the cut a bit down:

enter image description here

Connect the edge (use the F2 addon to do it fast):

enter image description here

Shade smooth, add a subdivision surface modifier, and here you are.


In complement, here a script that uses the spiral operator. What it does is generating spiral from two parts (bottom and top parts) of your initial ramp.

The bottom part is an object named 'from' and the top part is named 'to'.

The script goes along the vertices of 'from' and 'to' and generates the spirals between them.

enter image description here

To be done manually... about 42 'bridge edge loop' after all this is converted to mesh and joint. But this way, you have the exact same shape as in your original file.

  • $\begingroup$ Thanks for the nice GIFs! Just a slight problem: Since I'm going to 3D-print this, I need it designed to exact dimensions - the ramp needs to be 7mm in diameter and be 1mm apart from the ramp below. I can't see how I can use this method to get myself exact arcs. The F2 addon is something new you've taught me today though :) $\endgroup$ – Bernard Mar 2 '17 at 15:01
  • $\begingroup$ @Bernard, when you create the spiral, the wanted dimensions can be given in the operator panel. I think you can choose this parameters to meet your needs. For instance, the 2 base spiral can have 7mm and 7+outer. Concerning the height, same thing with the 'height' value. You can also add more spirals (for instance to have the border of the ramp) $\endgroup$ – lemon Mar 2 '17 at 15:17
  • $\begingroup$ I meant that the cross-section of the ramp is to be an arc with 7mm diameter. Using your method would mean that I have to build up the arc manually. In your illustration, it would mean that for the "Curve the floor of the ramp..." step, I will need many more loop cuts, even for the faces hanging from the ramp above, and these loop cuts would have to be done manually (one by one), and if I wanted the arc shape to be exactly right, I would need to do quite a bit of precise measurements to decide exactly how much to displace each loop. $\endgroup$ – Bernard Mar 2 '17 at 15:29
  • $\begingroup$ @Bernard, edited for a python script approach $\endgroup$ – lemon Mar 2 '17 at 17:23
  • $\begingroup$ Thanks! The script does it. I guess I should learn some python for Blender. $\endgroup$ – Bernard Mar 3 '17 at 4:39

If it fits your needs, an easier way to achieve that shape is probably using the screw modifier.

You would use a single 2 dimensional "U" shape, and use the screw modifier to basically "rotate" the object around the origin. You adjust the screw amount to make it also move up on the Z (or other chosen) axis.

  • $\begingroup$ I can't adjust the X while moving it up the Z... The screw modifier seems like a subset of what the array modifier can do. On a side note, I think there is a bug with the screw modifier; when I tried it a few minutes ago, it froze my whole computer and I had to do a restart. $\endgroup$ – Bernard Mar 2 '17 at 15:18
  • $\begingroup$ I've never experienced that bug... And you can adjust the X and Z. However, looks like you have the answer you need above so all good. $\endgroup$ – Lewis Mar 2 '17 at 15:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.