Retour à la page d'accueilHackerspace Ventres mous

main(){

Convertir un SVG en DXF pour OpenSCAD

OpenSCAD est un logiciel libre qui permet de concevoir des modèles 3D à partir d'instructions saisies sous forme de programme.

Sa simplicité permet de s'attaquer au monde de la 3D rapidement sans passer par une phase complexe d'apprentissage d'interfaces graphiques (si vous regardez les tutos de base de logiciels comme Blender, vous vous apercevrez qu'on passe un temps non négligeable à vous apprendre à utiliser l'interface avant même de penser à créer).

Cette simplicité a un coût : il n'est pas facile de créer des formes libres.

Pour contourner le problème, il est possible de recourir à des fichiers DXF qu'on importe via la commande "import" d'OpenSCAD.

N'étant pas plus un utilisateur de LibreCAD ou de FreeCAD, je préfère utiliser Inkscape, un outil de dessin vectoriel.

Se posent alors trois problèmes :

Comment préparer un dessin dans Inkscape pour son import dans OpenSCAD ?

Le format SVG est beaucoup trop versatile pour pouvoir être importé dans OpenSCAD après conversion.

Voici un petit florilège d'éléments qui poseront problème une fois le dessin converti :

Et voici les transformations à leur appliquer :

Après ces modifications, enregistrez le résultat dans un nouveau fichier, histoire de conserver le fichier original pour de future modifications.

Comment convertir du SVG en DXF ?

Inkscape ne sait pas exporter en DXF.

En revanche, il sait exporter en EPS et il existe "pstoedit", un outil en ligne de commande sous Linux facilement installable sous Debian/Ubuntu (sudo apt-get install pstoedit).

Il va cependant falloir passer les bons paramètres et ce n'est pas toujours choses aisée.

Voici donc un script Bash qui s'en charge :

#!/bin/bash
# The assert function for Bash
function assert {
   local rc
   local message="$1"
   shift
   "$@" 2>&1 > /dev/null
   rc=$?
   [ $rc -eq 0 ] && return 0
   set $(caller)
   date=$(date "+%Y-%m-%d %T%z")
    echo "$date $2 [$$]: $message (line=$1, rc=$rc)" >&2
    exit $rc
}

# Retrieves the input and output filenames
infile="$1"
outfile="$2"

# Checks the system
assert "Inkscape not found" which inkscape
assert "Pstoedit not found" which pstoedit
assert "svg2dxf takes 2 arguments (infile, outfile)" test $# -eq 2
assert "Input file not found" test -f "$infile"

# Converts the SVG to DXF
printf "Converting %s to %s..." "$infile" "$outfile" >&2
inkscape --file="$infile" --export-eps=/dev/stderr 2>&1 >/dev/null \
     | pstoedit -dt -f 'dxf:-polyaslines -mm' /dev/stdin /dev/stdout \
     > "$outfile" 2> /dev/null
printf " OK\n" >&2

Le script prend 2 paramètres : le premier correspond au fichier SVG à convertir, le second au fichier DXF à récupérer.

Comment utiliser le fichier obtenu dans OpenSCAD ?

Le fichier peut désormais être importé dans OpenSCAD en utilisant la commande "import" imbriquée dans une commande "linear_extrude" ou "rotate_extrude" suivant le résultat souhaité. L'exemple ci-dessous inclut également un commande "translate" pour centrer l'objet.

 translate([-40,-60,0])
     linear_extrude(height = 30, convexity = 5)
         import(file = "zigazou.dxf", layer = "0");

La calque à utiliser est le calque "0".