1
$\begingroup$

I am trying to make a cross-section of an object with a rotational symmetry. I thought using a curve for the cross-section with the screw modifier would be a better way to do that than using boolean modifiers on a mesh.

But if I use a filled 2D curve and the screw modifier, the fill gets messed up as in the attached picture (Objects A and D). If I use a 3D curve, there are just no caps (Object B).

Object C is what I would like to achieve. I made it by converting the bezier curve to a mesh, creating a face and then using extrude->spin in edit mode. But then I loose the flexibility of editing the cross-section.

How can I achieve the same while keeping the cross-section a curve?

enter image description here

Blender example file:

$\endgroup$
6
  • 1
    $\begingroup$ I can't read your mind.. :) which one is BezierCurve .001? $\endgroup$
    – Robin Betts
    Commented Nov 18, 2020 at 16:20
  • $\begingroup$ Sorry, I was planning to add the .blend file, but could not figure out how. It's the one in the middle between the uncapped screwed bezier and the circular tube. $\endgroup$
    – KIAaze
    Commented Nov 18, 2020 at 16:42
  • $\begingroup$ Added labels to screenshot. $\endgroup$
    – KIAaze
    Commented Nov 18, 2020 at 16:52
  • 1
    $\begingroup$ Cheers! To add a .blend file, visit blend-exchange.giantcowfilms.com, and fill in the forms (one of the fields is the url of this question) $\endgroup$
    – Robin Betts
    Commented Nov 18, 2020 at 16:54
  • 1
    $\begingroup$ Thanks. File added. :) $\endgroup$
    – KIAaze
    Commented Nov 18, 2020 at 21:28

1 Answer 1

1
$\begingroup$

I found one possible solution by simply using three linked curves, one for the solid and two for the caps. This can be further improved for flexibility by adding drivers.

See attached blender file and the included README:

In it, you can change the cross-section angle by changing the X rotation angle of "BezierCurveDriver".

Changing the material or editing the bezier curve will affect the extruded solid and the two caps.

How to do it:

  1. Add curve

  2. Make it 2D, cyclic and filled:

    • Properties->object data properties->Shape->2D
    • Properties->object data properties->Shape->Fill Mode->Both
    • Properties->object data properties->Active spline->Cyclic: check box
  3. Optional: Now you may want to make your curve flat along the planned rotation axis (X for instance), by setting the some or all of the handle types to "free" and aligning some of the control points on that axis:

    • Go into edit mode (press tab with the curve selected with the mouse in the 3D viewport)
    • Select desired nodes
    • 3D Viewport->Control points->Set handle type->Free (or press V and select "free")
    • Position control points along X axis as desired (snapping, scale YZ zero, enter Local/Global coordinates, etc...)
  4. Make sure you are in Object mode, then duplicate the curve twice with linked data by pressing Alt-D (or 3D viewport->Object->Duplicate Linked):

    • One will form the solid by using a screw modifier: "BezierCurveWithModifier"
    • One will form the bottom cap: "BezierCurveBottomCap"
    • One will form the top cap and drive the angle of the screw modifier: "BezierCurveDriver"
  5. Add a screw modifier to one of them ("BezierCurveWithModifier" in this example):

    • Properties->Modifier properties->Add modifier->Screw
  6. Right-click on the Angle property of the modifier and select "Add driver". This will open up a driver editor window.

  7. In the driver editor window:

    • Choose "BezierCurveDriver" as the Object.
    • Choose "X rotation" as the type.
    • Set the expression to "var".
  8. Now you should be able to "extrude" the curve nicely to any angle by changing the X rotation angle of "BezierCurveDriver":

    • Properties->Object Properties->Transform->Rotation X
  9. Changing the material or editing the shape of any of the three linked curves will affect the extruded solid and the two caps.

enter image description here

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .