4
$\begingroup$

I need to make a curve that "exits" straight out of (perpendicular to) a face.

I can manually make it perpendicular by manually manipulating the handle (Bezier) or the first segment (Nurbs) but I assume there is a simpler way to do it.
I've been fiddling with this for over an hour but could not figure it out.
I did figure out how to make it exit parallel to the surface (by snapping the handle or segment to the face) but not perpendicular.

Can someone show me the way, please?

I'm interested to learn how to do it both with Bezier and Nurbs curves.

Edit:
I figured out how to do it when the face is aligned with global axes (snap a handle to the face, then translate it along the axis perpendicular to the face), however, I still cannot figure out how to do it when the face is not aligned with global axes.
I suppose I need to find out how to align to local axes of that face while editing the curve. Is that even possible?

Edit 2:
This is how it looks (and how I meant it to be) with Duarte's third method (notice the snap options and transformation orientation option being Local): enter image description here enter image description here

$\endgroup$
3
  • 1
    $\begingroup$ Please add an image to clarify your final goal. Would particles as emitter or hair be useful to you? $\endgroup$ Apr 15, 2016 at 7:37
  • 1
    $\begingroup$ @atomicbezierslinger, I need this on a single face. Duarte got it right in his third method - I'm waiting for him to add couple of steps to make it a full answer before I accept it. I wouldn't dare edit an answer of someone with high reputation ;) $\endgroup$
    – spacer
    Apr 15, 2016 at 10:45
  • $\begingroup$ I don't know how to do this, but I saw an addon that allows you to do this. https://gum.co/curve-array-pro $\endgroup$
    – glukzina
    Mar 27, 2021 at 15:51

4 Answers 4

4
$\begingroup$

Unfortunately Blender isn't great for precision modelling as it currently stands, and it becomes even more difficult with bezier curves. That being said you can achieve most operations even if it is an involved and time consuming process.

You could try one of three methods

  1. Enter Edit Mode on your mesh
  2. Select the face you want to make the curve perpendicular to
  3. Snap the cursor to it
  4. Add a curve there
  5. Enter Edit Mode in the curve
  6. Make both handle types Vector
  7. Move the starting point of the curve to local coordinate $0,0,0$
  8. Now exit Edit Mode of the curve and enter edit mode in the mesh
  9. Extrude previously selected face (this is a temporary hack)
  10. Now snap the cursor to the newly created face
  11. You can now undo the extrusion and exit edit mode
  12. Enter Edit Mode on the previously created curve and snap the end point to the cursor
  13. Profit!

The con of this method is the curve's axis wont be properly oriented to be perpendicular to the face, only the segment, so you couldn't easily convert it to a bi dimensional 2D curve (if that is what you want). Also it can be time consuming and become unpractical for many iterations.

Perpendicular curve

This second method is my favorite and as the advantage to leave your curve properly oriented, however it can become inadequate if you only want a few instances.

  1. Snap the cursor to the object whose face you want to make the curve perpendicular to (not the single face)
  2. Add a curve there
  3. Enter edit mode and make it's vertex start at $0,0,0$ and end at $0,0,1$
  4. Now exit Edit Mode and parent the curve to the mesh
  5. Select the mesh object and in the Properties Window > Object > Duplication enable Face duplication
  6. Now make the curves independent objects with the operator "Make Duplicates Real*
  7. Profit!

enter image description here

Third method is the simplest using snapping, but may give inaccurate results because Blender may average the normals of surrounding vertex

  1. Turn on Align the rotation with the snapping target option at the bottom of the 3D View right next to the snap options
  2. Switch to Snap to Faces mode
  3. Add a new curve
  4. Move it with G and use snapping to align it to the surface normal as you move it around by pressing Ctrl while grabbing.
    If you turn on "Project individual elements on the surface of other objects" option (also next to the snap options), the curve will orient itself to the surface (no need for pressing Ctrl).
  5. Enter Edit Mode in the curve
  6. Translate one curve endpoint to the face
  7. Switch to Snap to Vertex mode
  8. Translate handle point (or second point for Nurbs) to the point from step 6
  9. Translate the same point along the $Z$ axis to get a perpendicular start/segment
  10. Grand Total profit!
$\endgroup$
7
  • $\begingroup$ thanks, I need just one curve so the second method is out for me. The first method looks like something I could use. Is there a way to use normal axes of a face for alignment without editing that object? $\endgroup$
    – spacer
    Apr 15, 2016 at 0:34
  • 1
    $\begingroup$ You could try the "Align the rotation with the snapping target" option at the bottom of the 3D view right next to the snap options, along with "Snap to Faces" but I'm not sure how well it will work, as it may try to average the local vertex normals, and not be perfectly perpendicular to the faces. $\endgroup$ Apr 15, 2016 at 0:41
  • $\begingroup$ thanks for suggestion, that worked! It really aligns curve's axes to the face it snaps to. Then the first segment can be easily made perpendicular (by translating control point along Y axis). Can you edit your answer to include this, so I can accept it? $\endgroup$
    – spacer
    Apr 15, 2016 at 1:58
  • $\begingroup$ Sure, it's done added a third option. $\endgroup$ Apr 15, 2016 at 2:29
  • 1
    $\begingroup$ As Duarte did not respond yet, I dared to edit the post to round up his third method. Will accept as soon my edit is approved. :) $\endgroup$
    – spacer
    Apr 18, 2016 at 16:23
2
$\begingroup$

This is a fairly basic task involving snapping.

Firstly, Tab into edit mode on the mesh and select the face you wish the curve to 'exit' from. Press Ctrl + Alt + Space to create a new transformation orientation aligned with this face. This defines the perpendicular direction in which you want the curve to 'exit' the face.

Next, Tab into edit mode on the curve. Enable vertex snapping and select the curve point you wish to position. and hover the mouse over three vertices of the face you wish to align to and press A. With the mouse over the last face vertex left click to snap to the averaged position of all four points - i.e. the centre of the face.

Next align the Bezier handles to the predefined face normal direction. To do this, select a handle and snap it to the curve point. Then drag the transform manipulator Z-axis widget to move the handle along the face normal which we defined earlier.

enter image description here

The curve should now exit from the centre of the face in the direction of the face normal.

$\endgroup$
2
  • $\begingroup$ Thanks, Xtremity! This is similar to the third solution by Duarte, being same from step 5 on. Creating new transformation orientation aligned with a face is certainly a new discovery for me, hence the upvote. However, I'm not sure I want to create new transformation orientation every time I do this so the accept goes to Duarte's solution after all. $\endgroup$
    – spacer
    Apr 18, 2016 at 21:03
  • $\begingroup$ I confess I didn't read the other answers as they seemed a little overly complicated for what is really a bread-and-butter operation. Pressing Ctrl+Alt+Space with the 'Overwrite Previous' option means you can overwrite your custom orientation with one keystroke. $\endgroup$
    – Xtremity
    Apr 18, 2016 at 21:05
1
$\begingroup$

enter image description here

  • A Bezier Curve is the object particle to a particle system on a sphere. Emission Numer = 518 to match the faces.
  • A plane with a Emission Number = 1, particle system is an option.
  • Particle systems routinely use the geometric Normal to place particle objects
  • The Bezier Curve origin is set to the first on curve control point.
  • Particles systems can be made real by Pressing the Convert button in the modifier panel. Keep the current selection or Select by various means. The generated Bezier curves have a common name base.
  • Menu Object /Make Single User/ Object & Data. So curves do not share data. Suit to taste. Image below.

enter image description here

enter image description here

A single Bezier Curve of 500 in edit mode. Above.

enter image description here

Bezier Curve used as the object in Particle System Render Panel. Click image for details. Above.

$\endgroup$
1
$\begingroup$

Here's a (more idiot-proof?) way that I found to work this out:

  1. Edit the curve so the starting point is at the origin and the other end somewhere above it. Make the handles in-line by selecting everything and scaling to 0 while using shift-Z to constrain.
  2. Now switch to object mode. This is because the alignment option for snapping works here, despite not being available for curve handles in edit mode. (Annoying isn't it? Which is why you're looking here.)
  3. Place curve object on your model via snapping with alignment turned on. (This is the "idiot-proof" part, no other tricks really.)
  4. Starting point will now be aligned with the surface, so do whatever to the rest of curve in edit mode as desired.

Following steps are if you want both ends of a curve to align with parts of a mesh.
(1 through 3, same as above.)

  1. If you want another end to do the same elsewhere, duplicate the same basic curve and snap it elsewhere onto the model's surface as with step 3.
  2. Join the curve objects for the start and end points. (CTRL-J)
  3. Go back into edit mode and select the ends that are away from the mesh, join them with F.
  4. Since both ends are aligned with faces, you can now do whatever, and even delete the extra two vertices if you don't need them. Just remember not to move the handles on the ends to keep the alignment, scale them instead and use twist (CTRL-T) as needed.
$\endgroup$

You must log in to answer this question.

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