#!/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 '' } verification() { if [ -z $1 ] then echo "la variable $2 n'a pas été précisée, la valeur par défaut est $3" VALEUR=$3 else re='^[0-9]+([.][0-9]+)?$' if ! [[ $1 =~ $re ]] then echo "l'argument $2 n'est pas un nombre" usage exit 25 else VALEUR=$1 fi fi } #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) H_MIN=${OPTARG} ;; M) H_MAX=${OPTARG} ;; p) PAS=${OPTARG} ;; *) #ce point est atteint lorsqu'une option inexistante est demandée echo "parametres non valide" usage exit 1 ;; esac done verification "$H_MIN" "hauteur minimale" 2 H_MIN=$VALEUR echo -e "hauteur minimale=$H_MIN" verification "$H_MAX" "hauteur maximale" 7 H_MAX=$VALEUR echo -e "hauteur maximale=$H_MAX" verification "$PAS" "pas" 0.1 PAS=$VALEUR echo -e "pas=$PAS" echo "\$fn = 30;valeur=\"0\";translate([-1, 0, 0]){text(valeur, size=3, halign=\"right\");}" > temp.scad echo -e "G91\nG21\nG0 Z $H_MIN" > sortie.gcode echo -e "G1 F1300\n" >> sortie.gcode for hauteur in `seq $H_MIN $PAS $H_MAX` do openscad -o temp.dxf -D 'valeur="'$hauteur'"' temp.scad dxf2gcode temp.dxf -q -e "${hauteur}.gcode" #numérotation de la ligne cat $hauteur.gcode >> sortie.gcode #traçage d'une grille echo -e "\nM400\nM106 P1 S255\n" >> sortie.gcode for i in `seq 0 3` do if [ $(($i % 2)) = 0 ] then echo -e "G1 X 0 Y 4" >> sortie.gcode else echo -e "G1 X 0 Y -4" >> sortie.gcode fi echo -e "G1 X 1" >> sortie.gcode done echo -e "G1 X 0 Y 4" >> sortie.gcode for i in `seq 0 3` do if [ $(($i % 2)) = 0 ] then echo -e "G1 X -4" >> sortie.gcode else echo -e "G1 X 4" >> sortie.gcode fi echo -e "G1 X 0 Y -1" >> sortie.gcode done echo -e "G1 X -4" >> sortie.gcode #déplacement pour la nouvelle hauteur echo -e ";changement de hauteur\nG1 X 0 Y -5 Z $PAS\n" >> sortie.gcode rm $hauteur.gcode done #arrêt du laser echo -e "\n;arret du laser\nM400\nM106 P1 S0\n" >> sortie.gcode rm temp.scad rm temp.dxf exit 0