Convertir un SVG en DXF pour OpenSCAD
Par Zigazou le jeudi 12 juillet 2018 - Projets - réalisations - documentations
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 ?
- Comment convertir du SVG en DXF ?
- Comment utiliser le fichier obtenu dans OpenSCAD ?
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 :
- n'utiliser qu'un seul calque
- n'utiliser que la couleur noire
- tout dégrouper (Édition → Sélectionner tout ctrl+A, Objet → Dégrouper maj+ctrl+G jusqu’à ce qu'il n’y ait plus de groupe
- convertir les lignes droites et courbes de Bézier en chemins (Chemin → Contour en chemin ctrl+alt+c)
- convertir les cercles, ellipses, rectangles et autres formes géométriques en chemins (Chemin → Objet en chemin maj+ctrl+C)
- supprimer les à-plat
- effectuer une union de tous les objets (Édition → Sélectionner tout ctrl+A, Chemin → Union ctrl++)
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".