Complex extrusion howto

I want to extrude a profile (either a mesh or a curve) along a "guide" curve such that:

• Its local Z axis is and remains parallel to the global Z axis at every point of the extrusion
• Its X axis must always intersect the center axis, parallel to the global Z axis
• The rotation of the profile matches that of the guide-curve, which may be non-linear

What are my options? I am looking for an automatic way of doing it, i.e. not by a vertex-by-vertex manipulation. Should the only way possible be via python programming and you can englight me, please do so!

Perhaps you might wonder why I would want such particular restrictions, so you might find it useful to know what I am trying to do. I am trying to model a vertical wind turbine (VAWT), such as the one in this picture:

I am modeling one of the blades. Note that the blades' profiles remain perpendicular to the radius of the turbine at all times (see top view), and also remain parallel to the horizontal plane (see side view).

Update

Well I had not thought it necessary to show exactly what I was trying to model. I thought that the sample image of a VAWT would suffice to have blenders out here provide the right answer to my question. However, to quit puzzling readers, here I post an animation of the paths I want the blade profiles to follow:

• So just to get this straight, 1) you want the profile to remain level with the Z-plane, 2) you want the profile to rotate on the Z-plane according to it's angle in the sweep, 3) over the vertical dimension of the blade you want to have equal distance to a given point Commented Jun 4, 2013 at 19:45
• 1) I think parallel is a better word, but I think you got it, 2) Assuming the local Z axis of the profile is parallel to the global Z axis but intersects the centroid of the profile, it is said that the profile must rotate about its local Z axis an angle equal to its sweep angle relative to the Z axis, and on the same rotation direction. Sorry I find this a bit difficult to express in few fords. Commented Jun 4, 2013 at 23:31
• I have updated the description of the question so it is understood easier. Commented Jun 4, 2013 at 23:43
• I'm very sorry that I changed the requirements a bit, putting your solutions in disadvantage, but at the first time I wrote this I was not being objective enough. Commented Feb 1, 2015 at 10:35

There's a lot of different ways to do this. I suggest using modifiers for a non-destructive workflow. You can get the specific result you're looking for by using a few different modifiers, but perhaps the most straight forward is the Simple Deform Modifier.

1. Add the mesh for the propellor blade, with the origin centered along the Z-axis, and the mesh offset along the Y-axis. The origin position is key for the modifiers to work right.

2.Add an Empty, and rotate it accordingly (you will likely need to adjust the rotation after Step 3, depending on your configuration).

2. Add a Simple Deform modifier. This will be used for the bending of the mesh. Set the Origin field to use the Empty you created in step 2. Set the mode to Bend and adjust the Deform Angle as desired.

3. Add another Simple Deform modifier. This second modifier will control the amount of twist. Set the modifier mode to Twist and once again adjust the Deform Angle as desired.

• The profile must be parallel to the Z-plane on every extrusion step, this solution tilts along with the curve. Commented Jun 4, 2013 at 18:31
• @zeffii you're right, the depth does tilt along the curve but the main width stays parallel. Perhaps not an ideal solution, but it's one of the most flexible and least destructive I think. Although, looking back, I see the first Simple Deform modifier is not needed to match the provided reference. In which case it will stay perfectly parallel. Commented Jun 4, 2013 at 18:34
• now i'm convinced I didn't understand the question :/ Commented Jun 4, 2013 at 19:19

If you place your 'plan' image in the background using 'Background Images' on the Properties panel:

Then go to Front Ortho view ( numpad1 ) and add a Cylinder (adjust the number of Vertices, Radius and Depth to fit the side view on the 'plan'. I found that 36 Vertices is a close match):

Then in edit mode, add enough edge loops ( ctrlR + scroll ) to give a smooth transition along the length of the blade. Select all and rotate on the Z axis until two of the vertices line up with the bottom end of the blade:

Now enable Proportional Editing and set it to Linear:

Select the top edge of vertices and rotate about the Z axis, ensuring the influence covers the whole cylinder ( scroll ), until the top opposing vertices line up with the top of the blade:

Select the edges you require, then select inverse ( ctrlI ) and delete:

I hope this is good enough for your requirements, (although it may not be 'automatic' enough).

This is my update to your update!

To get the profile you need, you could use part of a circle positioned to give you the angles you require at the top and bottom of your blades. The circle can be distorted to the correct shape by scaling X and Z and using the 3D Cursor as an anchor:

Delete unwanted vertices, and then with the Cursor back in the center, rotate the new profile to the front with RZ-90. Duplicate this SHIFTD and move it to the left GX- by half the width of the blade, then make another duplicate and move it to the right GX+ to give you the other side of the blade:

Fill in the blade using CTRLE >Bridge Two Edge Loops:

Now select the top edge and, using the 3D Cursor as the pivot, rotate about the Z axis with the proportional editing on and set to Linear as I suggested before:

Then it's just a matter of duplicating and rotating to get the desired number of blades around the turbine:

I added rings to the picture just to make it easier to see that the blade faces are perpendicular to the center.

• Well this is a nice approach, I learned a thing or two. However, I need the top view to resemble the profile of the blades too. Also, the image shown is not the exact thing I want to model, I just felt it helped illustrating. Please refer to the question again which I will update right now with the right model guideline. Commented Jun 18, 2013 at 0:08
• Well I read your update to my update yesterday and your solution indeed inspired an acceptable solution for me! I will post my own answer to explain my steps. Commented Feb 1, 2015 at 9:56

The Future

Blender is currently missing a option to not twist the "Bevel Object". I have now submitted a patch to the tracker for said feature.

Options using the current version of Blender

• You can do a extrude the curve using the Screw (with 0° angle) and Solidify modifiers (this'll only keep the axis's aligned for a 2D curve).

• Using NURBS:

1. Create you cross section as a Surface curve.
2. add a Clamp To constraint (found in the Properties window under Object Constraints), and add target curve object.
3. Create instances of the surface Alt+dz and place the desired distance between segments. Press Shift+r several times to repeat long the curve.
4. Select all the surface curves and press control+j to join.
5. tab into edit mode and press f to skin.
• Alternatively you can deform a mesh along the curve via a lattice eg:

1. First create our objects:
• Add a Cube Shift+a, m,c.
• Add a Lattice Shift+a, l.
• Add a Bezier Curve Shift+a, b, c.
2. With the Curve selected:
• In the "Object Data" Shape panel, enable "Stretch" and "Bounds Clamp".
3. Now select the lattice:
• Scale it to match the cube s, 2, Return.
• "Object Data" Lattice panel, set "U" to say 48, "V" and "Z" to 1.
• In "Object Modifiers" panel, add a Curve modifier and set the curve in the Object field.
4. Select the Cube, again in "Object Modifiers" panel:
• Add a Subsurf modifier and click the simple button and set View: to 5 and optionally enable Optimal Display.
• And finally add a Lattice modifier and set the lattice in the Object field.
• I added a lattice with multiple points only in the direction of the length of the blade. Then added a curve modifier to the lattice so it adopts the shape of the blade but for some reason it gets centered vertically in relation to the curve, and shortened. Then adding the lattice modifier to the mesh shows completely unexpected results: the mesh does not even adopt a curve form. Could you elaborate your explanation? Commented Jun 7, 2013 at 4:52

One way would be to use the curve modifier. In the picture below, the curve is used to control the mesh's shape, and the mesh must have sufficient edge loops to get smooth deformation.

Pay attention too, to the curve object's axis. The mesh's Curve modifier use this information to deform the mesh along the correct axis (below right). For the curve itself, check Stretch and Bounds Clamp to make the mesh deformed using it follows its overall shape; otherwise it'd be hard to deform correctly.

• this doesn't follow the constraints of the question, the profile for the extrusion must not rotate with the direction of the extrusion path. Commented Jun 4, 2013 at 9:36
• @zeffii Yes, I haven't fully succeeded getting there with this method. I played with Curve modifier's Vertex Group setting, with a vg containing all but the tip, and both object's axis aligned. The tip doesn't follow path, but I haven't found a way to get the overall form right: s19.postimg.org/u9ht40oz7/curve_mod.gif
Commented Jun 4, 2013 at 10:02
• yeah it's a tricky one :) Commented Jun 4, 2013 at 14:25

Based on the solution suggested by SteveW.

Under the assumption that the curve along which the profile will be extruded exists (henceforth called guide-curve), and also such profile, I have followed the next steps:

1. Convert the guide-curve to a mesh with a fine density of vertices (if it was previously a curve).
2. Convert the profile to a mesh too (if it was a curve before).
3. Set the parent of the profile mesh to be the guide-curve mesh.
4. In the object properties of the guide-curve mesh add Duplication of type Verts. Check the Rotation checkbox.
5. Tweak the Relations Extras to fit your needs. In my case I needed no tweaking.
6. Now you will see a series of profiles lined up with the guide-curve, when the guide-curve is selected. Convert the series into an object with Make Duplicates Real (press Spacebar and type it up if you don't know where to find it). To this point, each of the profile elements had correct Z rotation and Y rotation, but an unwanted X rotation; I solved this in the next step.
7. A series of new objects will be created. To fix the rotation, select all elements and with a Python command you will clear the X rotation: for obj in bpy.context.selected_objects: obj.rotation_euler[0] = 0
8. Now all my profiles had the correct rotation in all axes! Time to make the final edits to the mesh: bridge all the profile loops to make a faced cylinder. For this, join all the profile elements in the series, go into Edit Mode, select all profiles and Bridge Edge Loops.

Note: It can be tricky to get each element's rotation right; in my case, it was easier if the profile stayed a curve and not a mesh.

• I have no idea though how I managed to get the rotation of the profile in the global Z axis right. I try to repeat it and I can't :o Commented Feb 1, 2015 at 18:23

You could always model it manually: CTRLLEFTMOUSECLICK will extrude the selected faces to the cursor. If you decide to go along this path, you can easily duplicate the object using the spin tool or the array modifier.

• Well perhaps I should have specified it, but the point of the question is to find an automatic way to do the job hehe Commented Jun 4, 2013 at 23:23
• Sure, but that's where the array modifier comes in. Model it once manually(which shouldn't take long) and duplicate it as many times as you want. It might take more time than it's worth to come up with the correct mathematical function when you can simply model it by hand in a few minutes. The example you gave would probably be faster to model by hand. Commented Jun 4, 2013 at 23:55