#!/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 la bonne distance focale du laser" echo "ce script n'est utile que sur les imprimantes 3D puisqu'on joue sur l'axe Z" echo "" echo "Le fichier gcode en sortie utilisera des coordonées relatives." echo "" echo "La procédure est la suivante :" echo "-connaitre grossièrement 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 "-m\thauteur relative minimale en mm" echo -e "-M\thauteur relative maximale en mm" echo -e "-p\tpas entre deux hauteurs 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 "m:M:p:hV" OPT do case "$OPT" in h) usage exit 0 ;; V) version exit 0 ;; m) #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly readonly H_MIN=${OPTARG} ;; M) #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly readonly H_MAX=${OPTARG} ;; p) #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly readonly PAS=${OPTARG} ;; *) #ce point est atteint lorsqu'une option inexistante est demandée echo "parametres non valide" usage exit 1 ;; esac done if [ -z "${H_MIN}" ] then echo "la hauteur minimale est inconnue" usage exit 10 else re='^[0-9]+([.][0-9]+)?$' if ! [[ $H_MIN =~ $re ]] then echo "l'argument de hauteur minimale n'est pas un nombre" usage exit 15 fi fi if [ -z "${H_MAX}" ] then echo "la hauteur maximale est inconnue" usage exit 20 else re='^[0-9]+([.][0-9]+)?$' if ! [[ $H_MAX =~ $re ]] then echo "l'argument de hauteur maximale n'est pas un nombre" usage exit 25 fi fi if [ -z "${PAS}" ] then echo "le pas n'a pas été précisé, la valeur par défaut est 1mm" PAS=1 fi #echo "valeur=\"0\";text(valeur, size=50, halign=\"right\", valign =\"center\");" > temp.scad echo "\$fn = 30;valeur=\"0\";translate([0, 1, 0]){text(valeur, size=3);}" > temp.scad echo -e "G91\nG21\nG0 Z $H_MIN" > sortie.gcode echo -e "G1 F2000\n" >> sortie.gcode for i in `seq $H_MIN $PAS $H_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 #trçage d'une ligne echo -e "\nM400\nM106 P1 S255\nG1 X 20" >> sortie.gcode #retour au point de départ echo -e "M400\nM106 P1 S0\nG1 X -20" >> sortie.gcode #déplacement pour la nouvelle hauteur echo -e ";changement de hauteur\nG1 X 0 Y 5 Z $PAS\n" >> sortie.gcode rm $i.gcode done rm temp.scad rm temp.dxf exit 0