I work on communication devices for people with disabilities that prevent them from speaking. This can be anything from a board with symbols on, to a relatively sophisticated app.

Some potential users also have sight issues and have to distinguish symbols by feel (these particular users have cognitive disabilities and so braile isn't useful) . Currently the solution is to, by hand, stick items onto the buttons. Like this:

enter image description here

This is effective, but takes a very long time.

There exists open symbol libraries like this, that include nice svg images like this one (not uploaded, because SO doesn't like svg, but here's the screenshot:

enter image description here

A friend converted some of these images into 3d prints like so:

enter image description here

This was amazing, and useful, but I understand quite time-intensive for him - and there are thousands of these symbols.

Here's what I want to know: given that SVG is a relatively simple structure and the symbols are very simple, what are the steps for writing the script that says: "Take the svg, map it to a plane, raise everything that is black by 2mm, everything that is gray by 1mm and add height for the rest of the colours according to this table" ?

Bonus points for something that I can reasonably get going on a set of 10000 svg files and come back to later...

  • $\begingroup$ My thoughts would be something like openscad might simplify this. It has a polygon basic operation and an extrude. First map the svg to a polygon then extrude the polygon. So the question then becomes how to map the svg to a set of points that are close enough to represent the shape. You could do this multiple times for each colour and then extrude by different heights. $\endgroup$
    – Ross
    Commented Dec 5, 2017 at 10:38

2 Answers 2


If you install inkscape, pstoedit and ghostscript version 9.21 (not the latest as pstoedit is incompatible) you can get the file into a format that openscad can import using two commands in a cmd file

"C:\Program Files\Inkscape\inkscape" -E "traffic lights.eps" "traffic lights.svg"
"C:\Program Files\pstoedit\pstoedit" -dt -f dxf:-polyaslines "traffic lights.eps" "traffic lights.dxf"

then in openscad

linear_extrude(3) import ("traffic lights.dxf");

will import gives me


With a thickness of 3mm - you can see the model needs some scaling but its seems possible although - I can't see an option to scale based on color -

  • $\begingroup$ That's looking solid! $\endgroup$
    – Joe
    Commented Dec 12, 2017 at 8:42
  • 1
    $\begingroup$ Much more difficult to get different heights automatically based to different colors , I've got an algorithm of how to do it - get a files for each layer based on the colors - eg extract White, Green, Red, Blue and import - this all seems to work - but I have no way to automate the layer extraction $\endgroup$
    – Ross
    Commented Jan 10, 2018 at 6:44

Nothing thats works via scripting BUT is really simple and easy.

  1. register on tinkercad.com (I know register is a bummer but its a great tool)
  2. open a new design
  3. import *.svg file
  4. adjust height or size of the converted object
  5. download .stl

Thats going to take a while for 1000 files but its so simple, printing the stuff will take forever, so you´ve got some time :P

Edit: Maybe edit the topic to something like "SVG to STL conversion" which would make the thread more likely to be found.


You must log in to answer this question.

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