#!/bin/bash #fonction appelée en cas de paramètres non valide ou de l'option -h usage() { # "$(basename "${0}") pour gérer les espaces echo "$(basename "${0}") description" echo '' echo "Ce script permet de générer un fichier gcode" echo "afin de trouver le diamètre du point focal du laser" echo "un ensemble de traits seront tracés de plus en plus espacés" echo "" echo "Le fichier gcode en sortie utilisera des coordonées relatives." echo "" echo "La procédure est la suivante :" echo "-connaitre la distance focale" echo "-placer la tête de l'imprimante 3D en buté sur l'objet à graver" echo "-exécuter le fichier gcode" echo "" echo "Détail des options" echo -e "-d\tdiamètre minimal en mm" echo -e "-D\tdiamètre maximal en mm" echo -e "-p\tpas entre deux espacement en mm" echo -e "-f\tla distance focale du laser en mm" } readonly VERSION='1.0' #affiche la version du script version() { echo "$(basename "${0}") : ${VERSION}" echo '' } #boucle pour la gestion des options #s: signifie qu'un paramètre est attendu #hV signifie que ces options existent mais ne prennent pas de paramètre while getopts "d:D:p:f:hV" OPT do case "$OPT" in h) usage exit 0 ;; V) version exit 0 ;; d) D_MIN=${OPTARG} ;; D) D_MAX=${OPTARG} ;; p) PAS=${OPTARG} ;; f) FOCALE=${OPTARG} ;; *) #ce point est atteint lorsqu'une option inexistante est demandée echo "parametres non valide" usage exit 1 ;; esac done verification "$D_MIN" "diamètre minimal" 0.1 D_MIN=$VALEUR echo -e "diamètre minimal=$D_MIN" verification "$D_MAX" "diamètre maximal" 0.4 D_MAX=$VALEUR echo -e "diamètre maximal=$D_MAX" verification "$PAS" "pas" 0.1 PAS=$VALEUR echo -e "pas=$PAS" verification "$FOCALE" "focale" 5 FOCALE=$VALEUR echo -e "focale=$FOCALE" echo "\$fn = 30;valeur=\"0\";translate([-1, 0, 0]){text(valeur, size=3, halign=\"right\");}" > temp.scad echo -e "G91" > sortie.gcode echo -e "G0 Z $FOCALE" >> sortie.gcode echo -e "G1 F2000\n" >> sortie.gcode #Pour que seq renvoie des nombre avec '.' et non ',' il faut : LANG=en_US for i in `seq $L_MIN $PAS $L_MAX` do openscad -o temp.dxf -D 'valeur="'$i'"' temp.scad dxf2gcode temp.dxf -q -e "${i}.gcode" #numérotation de la ligne cat $i.gcode >> sortie.gcode #On trace un paquet de lignes sur une hauteur de 3mm echo -e "\nM400\nM106 P1 S255" >> sortie.gcode DELTA=$(echo "2*$i" | bc) deplacement_y=0 for j in `seq $i $DELTA 3` do #Une fois la première ligne tracée on fait des aller-retour sur 10mm echo -e "M400\nG1 X 10" >> sortie.gcode echo -e ";changement de ligne\nG1 X 0 Y $i" >> sortie.gcode echo -e "M400\nG1 X -10" >> sortie.gcode echo -e ";changement de ligne\nG1 X 0 Y $i" >> sortie.gcode deplacement_y=$(echo "$deplacement_y + 2*$i" | bc) done #pour la dernière étape on se déplace une dernière fois de $PAS sur l'axe Y et on revient au début sur X echo -e ";changement de ligne\nM400\nM106 P1 S0" >> sortie.gcode echo -e "G1 X 0 Y -$deplacement_y\n" >> sortie.gcode rm $i.gcode done rm temp.scad rm temp.dxf exit 0