I want to make a stamp from vector image with such a profile:

amp profile

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
  <path d="M21.32 11.71h9.23v.82q-1.91.17-2.84.85-.9.7-2.83 4.18-1.96 3.5-4.35 6.53.99 1.14 1.84 1.65 1.56.2 1.52 0 2.57-.82 1.06-.83 1.5-2.43l.81.59q-.81 3.1-2.62 4.57-1.8 1.47-4.2 1.47-.9 0-1.8-.24-.9-.22-1.86-.72-.95-.53-1.96-1.35-.99-.8-2.09-1.97-2.74 2.41-4.92 3.36-2.18.92-4.66.92-1.82 0-3.27-.53-1.46-.52-2.49-1.4-1.03-.9-1.58-2.09Q0 26.36 0 25.03q0-2.66 1.91-5.3 1.9-2.65 7.19-5.49-.53-1.16-.88-2.06-.33-.93-.55-1.67-.2-.77-.29-1.43-.06-.68-.06-1.39 0-1.65.6-2.99.59-1.34 1.62-2.28 1.05-.97 2.44-1.47 1.4-.53 3-.53 1.28 0 2.36.42 1.1.41 1.9 1.22 2.09 0 2.35-1.6 4.09-.8.88-2.2 1.84-1.39.95-3.43 2 1.4 2.51 2.86 4.77 1.45 2.27 2.96 4.33 3.87-4.63 3.87-7.78 0-.41-.13-.83-.13-.44-.4-.77-.24-.35-.63-.6-.38-.24-.88-.3zm-8.4.58q5.43-2.6 5.43-6.62 0-.77-.26-1.43-.27-.68-.73-1.16-.44-.5-1.07-.77-.62-.29-1.34-.29-.97 0-1.7.4-.72.37-1.2.96-.49.58-.73 1.28-.24.68-.24 1.3 0 .57.06 1.65t.92 2.29zm3.41 13.73q-1.45-2-2.46-3.43-1-1.43-1.56-2.35-.57-.92-1.19-2.04-.6-1.12-1.27-2.49-5.3 3.06-5.3 7.3 0 1.17.4 2.24.4 1.06 1.12 1.75 1.32 1.04.48 0 1.34-.1.64-.12 1.35-.42.7-.31 1.53-.88.84-.57 1.96-1.5z" />

How to make this? Better – in Linux / Blender?


I tried a lot, but not find any working solution.

Chamfer/fillet in FreeCAD imports SVG as splitted curves (you need re-build image manually). Eg. O will be two circles (not circle with hole). Chamber in FreeCAD is very limited and more "not works" than "work" in this point.

freecad splitted curves

Finally, I wrote a script for OpenSCAD, but this is not flexible and simple…


background_height = 1;
body_height = 1;
layer_height = 0.12;
bevel_height = 1;
bevel_offset = 0.1;

    import("/home/user/Projects/Stamp/amp32mm.svg", dpi=72);

        import("/home/user/Projects/Stamp/amp32mm.svg", dpi=72);

translate([0,0,background_height + body_height])
    for(i=[0:bevel_height / layer_height]) {
      height = layer_height * i;
        offset(r = -i * bevel_offset)
          import("/home/user/Projects/Stamp/amp32mm.svg", dpi=72);
  • 3
    Hi. Welcome to GDSE. Blender questions should be posted on Blender Stack Exchange. You can flag your own question and ask the mods to migrate it there for you if you want.
    – Billy Kerr
    Jun 1 at 17:55
  • @BillyKerr, It's not blender question. Any linux-compatible software allowed.
    – gello
    Jun 1 at 21:36
  • @user287001, It's not for paper, it's for clay. But it's not make sense - I want to make triangle bevel from vector path.
    – gello
    Jun 1 at 21:38
  • 1
    @gello unfortunately this has nothing to do with graphic design. And even more unfortunately this is not an entirely trivial problem to solve since there is no known universally working closed form solution for this. Its one of those things that actually plays a role in manufacturing, so one can easily make hundreds of thousands if not millions in money if one can solve it better than current solvers. Therefore i find it unlikely that you will get a satisfactory answer for this question. But by any means if you find a good solution please share it because it will save me 1000€ anually
    – joojaa
    Jun 2 at 15:24
  • FreeCAD: Try importing to a sketch (no idea how it works). Then it may be treated differently. The program has a possibility to be sure the curves are in the same plane. If you are lucky you can extrude the ampersand area between the curves.
    – user287001
    Jun 3 at 8:16

2 Answers 2


In CAD programs there's available trick named "chamfer" which make something which resembles what you want:

enter image description here

In the left there's a flat ampersand, In the middle it's extruded and one of the top edges is selected for chamfering. In the right every top side edge has got the same chamfer.

Just in this CAD program one can select multiple edges for chamfering - or actually he must select more than one to get sharp corners handled consistently. Characters, like the ampersand, are often complex curves which in CAD get splitted to separate curve- and line segments. My ampersand is not an exception. More harmful was a couple of obscure zero length and duplicated curves that the ampersand contained. I guess the font has some errors which do not harm the normal use, but which cause troubles in 3D applications by generating overlapping surfaces.

Chamfering is generic, it's available with the same name in every CAD program I have used. Unfortunately they have all been in Windows, so I cannot present an example in Linux.

Chamfering in OpenScad may be tricky. I am curious, so I opened a couple of forum discussions of it. I must admit I didn't understand what they said. The program seems to be controlled only by writing command strings and scripts. Hopefully you can read them.

Check also FreeCAD. It's a more conventional CAD program with graphical user interface, although much more complex than the one in my example.


CNC engraving needs special single line fonts for good results. If you happen to have one or you bother to draw the needed curves, you simply extrude (=sweep) the stamp profile along the curve segments. Every segment may need a separate sweep, if the program cannot resolve sharp corners or other areas which generate self-cutting.

Generating single line (or open contour) versions of existing fonts has been wanted here in GDSE numerous times, but no easy automatic method has been shown.

An example:

enter image description here

The & and the "end wall of the house" are drawn manually.

  • Thanks for extended answer. I tried to use FreeCad, but there is two problem - FreeCad imports SVG as splitted curves. Eg. O will be two circles (not circle with hole). Second problem with chamber - it's very limited and more "not works" than "work" in this point.
    – gello
    Jun 3 at 6:57
  • Just for information: The program in my examples is DesignSpark Mechanical, a free version of SpaceClaim Engineer. It runs in Windows and, like usually in free versions of commercial tools, there are carefully selected limitations to prevent pro work - for ex. very limited import and export, reduced geometry tools and definitely no tools to prepare assemblies or engineering drawings. The program is for hobbyists who want to do 3D printing.
    – user287001
    Jun 3 at 7:50
  • @gello the problem is that nomatter how you do it your dealing with piecewise elements. And the algorithms in question can not deal with sel fintersectional elements very well. This problem arises basically because fonts and beziers are not desiged for this usecase so they frequently have HUGE modelling errors on them which is not really a problem in 2d but becme problem n 3d. In essence this simple problem has NO goo easy solution you can just bolt in. In fact if you could solve this problem you would reducde engineering times quite dramatically.
    – joojaa
    Jun 3 at 9:16

Ok, this is an important concept so i will share it here because it applies to graphic design, although very remotely.

Industries have standardized to something that works for them but frequently dont work across the board. This is one of those cases.

Your essentially taking a thing thats designed to play an illusion on paper or screen and make it a physical object. Your trying to bridge media with physical manufacturing.

Unknowingly you have crossed over to a realm with different constraints and different customs.

Ok so svg files are (poly) bezier curves, font are (poly) bezier curves. Nearly all of 2D media production is either bezier curves or discrete data. This is fine for 2D production where tangency conditions arent all that strict and the data gets often discretisized on last step of output anyway.

Enter production oriented 3D. Its based on (nonuniform) rational basis splines, although it does not have to be, different CAD applications usually have exotic primitives. Now a NURB spline can represent a bezier span easily all you do is you triplicate the knot at end of each span. You cant do it in reverese though, so a NURBS can only be approximated by a bezier. Just like beziers can not make circles.

Now here comes your first shock easiest way to do it is to make a separate curve for each polybezier segment. Which freecad is doing. This is hardly suprising because that is exactly what the bezier curve is, separate curves fitted together. Thats right the oneness is of 2D is a lie. But in in many cases CAD users look at the world as primitives anyway.

So what your seeing is expected. Theres no need for outer surface with hole if your not trying to solve layering of 2D primitives your not going to have overlap misunderstanding problems your building a boundary representation and you solve for this eventuality

Ok so all is still pretty easy to this point. Enter your bevel... Simply very unlikely to work out first problem begins with the font designer. They are not really expecting this usecase, they dont expect a few of their inconsequential design choices to have such a big impact down the line.

Second problem lies in propeeties of sweeping functions and brep models. Its not so much that we cannot sweep its that we cant self intersect. So there is a limit how far we can bevel easily that is set by font designers attention to detail that is not considered in normal font design. Beyond that no dice.

Yet there are 3 easy ways out. Ok so if you only 3D print then you can just discretisize the data into pixels and do this as a height map. This is pretty trivial, because thats what 2D apps do anyway. Second you can linearize the problem. Its way easier to do this with polygons because you dont have to deal with errors in font designers tangency conditions and your linearisation hides small errors that the font designer made. Or third just mill with a v bit the universe has no problem in solving what the shape actually is (but might not be what you expected).

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.