8
$\begingroup$

I'm editing 2D Bezier curves and I need a way to make a second curve that would outline existing curve.

For mesh shapes it could be easily done with SIRE outline or offset edges plugins, but is it possible with Curves? Is duplicating the whole curve and manually adjusting every point the only solution?

If not in Blender, then maybe in another software like Inkscape?

bezier outline

$\endgroup$
  • 1
    $\begingroup$ the 'Offset' (Geometry sub-tab of Font / Curve Objects ) parameter will do a good job to 'offset outwards', in a 2D surface curve, but you won't be able to see the original at the same time. $\endgroup$ – zeffii Sep 1 '15 at 14:13
  • $\begingroup$ That is actually pretty useful! I could just work with a copy and then join two curves after offset. Please submit this solution as a separate answer to make it more visible for others. $\endgroup$ – jubi Sep 1 '15 at 14:18
  • $\begingroup$ One more question - how to "apply" the offset to the curve? When I join two curves the "offset" parameter gets lost. And when going into Edit Mode while "offset" is set, it's effect dissappears. $\endgroup$ – jubi Sep 1 '15 at 14:20
  • $\begingroup$ to the second question, I don't know if you can apply the offset to create a new curve with handles. at - least - i've never seen it done. You are welcome to submit an answer that suits you, but I think there's already qestions about offsetting a curve -- but If I can't find any, else i'll answer or someone else will . $\endgroup$ – zeffii Sep 1 '15 at 14:27
  • $\begingroup$ this may be off topic, but there's a neat .js library for exactly this kind of thing. pomax.github.io/bezierjs $\endgroup$ – zeffii Sep 1 '15 at 16:05
5
$\begingroup$

As shown you can use the Offset section in the Font / Curve Objects tab, of the Properties panel. This produces a reasonable offset perimeter for 2D Curve and Font objects. There are limitations with respect to self intersection.

I'm writing this response in Sept 2015, some of these details might change but they describe the current state of this feature.

  • A non-zero offset will expand or shrink the surface area of the Object.

    here positive offset expands it:

    enter image description here

  • You can't see the original shape as an outline when the offset is non-zero. I can imagine it would be useful sometimes to see the original via some ghosting outline, (You could duplicate the object and leave the duplicate with no offset to see the original form, but that's extra work..)

  • you can't see the 'projected' Curve handles. (Without looking at the code i'm not even sure they are projected ..the outline could be generated post tessellation of the surface, and you might only get a polyline.. i don't know.)
  • When you convert a font-object with offset to a Curve object, you get a 2D curve with the Curve handles of the original Glyphs. This means you don't get the Curve handles that are the result of the offset, same issue as above. Usually this isn't a problem, but I can imagine use-cases where the offset Curve handles would be preferred.

    enter image description here

In a subsequent question you ask how one might get those handles. Currently i'm not aware that there is a way to get them easily without

  1. changing Blender's source-code
  2. writing a Python script that re-implements the C source for the 2D Curve offset as python operator, or implements an alternative outline algorithm to retain the Curve handles.

Making an outline anyway

Is possible, but any method that I can think of seems to have some inelegance.

enter image description here

  • For the above image I used 2 font objects, one with zero offset, and one a positive offset.
  • The Font object with offset is converted to mesh, then converted to Curve, and you get a single closed polyline. You set the Curve mode back to 2D and if you have the surface filled 2D Curve again, (but now it lacks Bezier handles).
  • Then you convert the original Font Object to a Curve (which will have Bezier handles) and join it with the new closed poly-line version to get something like this:

    enter image description here

$\endgroup$
5
$\begingroup$

This can be done quite easily using Inkscape.

  • First you have to get an image like this: (a simple B&W image, where black represent what you want to be converted into 3D)

enter image description here

  • Then you have to convert it into vector graphics using Inkscape, you can see this short and simple Tutorial on how to do it.

  • Then you can import it in Blender, and start adjusting it in the properties panel, Data Tab.

enter image description here

It will be imported as Curve, but it could be easily converted into mesh by pressing AltC > Mesh from Curve/Meta/Surf/Text

enter image description here

$\endgroup$
1
$\begingroup$

There are new Bezier Tools improvements implemented during Google Summer of Code 2016 that do exactly what I wanted in my original question from 2015:

https://wiki.blender.org/index.php/User:Genio84/gsoc2016/final_report/

Offset tool

The Offset tool allows you to offset the selected spline. Due to the mathematical details of Bezier curves, true mathematical curve offset (i. e. where the distance between every point in the curve and its offset is equal) is not possible. This tool offers an approximation based on the algorithm. Offset distance can be inputted in three different ways (mouse, keyboard and tool shelf).

The offset tool will add a new spline where each control point is at a fixed distance from the original one. It is not possible to offset line segments.

To use this feature however, you will have to wait for the release version containing it, compile Blender with aforementioned patch yourself or download a test build from GraphicAll:

http://graphicall.org/1194

You will find "Offfset" option in the "Modeling" section, or press Shift + O while in Edit Mode:

bezier curves build screenshot

$\endgroup$

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.