123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #!/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 créer un damier contenant toutes les nuances de gris"
- 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 "-connaitre le diamètre du laser"
- echo "-exécuter le fichier gcode"
- echo ""
- echo "Détail des options"
- echo -e "-f\tfocale du laser en mm"
- echo -e "-d\tdiamètre du laser en mm"
- echo -e "-v\tvitesse de gravute en mm/min"
- echo -e "-t\ttaille de la mire 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 "d:f:v:t:hV" OPT
- do
- case "$OPT" in
- h)
- usage
- exit 0
- ;;
- V)
- version
- exit 0
- ;;
- d)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- DIAMETRE=${OPTARG}
- ;;
- f)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- FOCALE=${OPTARG}
- ;;
- v)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- VITESSE=${OPTARG}
- ;;
- t)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- TAILLE=${OPTARG}
- ;;
- *)
- #ce point est atteint lorsqu'une option inexistante est demandée
- echo "parametres non valide"
- usage
- exit 1
- ;;
- esac
- done
- verification "$DIAMETRE" "diamètre" 0.2
- DIAMETRE=$VALEUR
- echo -e "diamètre=$DIAMETRE"
- verification "$FOCALE" "focale" 5
- FOCALE=$VALEUR
- echo -e "focale=$FOCALE"
- verification "$VITESSE" "vitesse" 2000
- VITESSE=$VALEUR
- echo -e "vitesse=$VITESSE"
- verification "$TAILLE" "taille" 100
- TAILLE=$VALEUR
- echo -e "taille=$TAILLE"
- #la mire est constitué de carrés formant un dégradé
- #sur chaque ligne on gravera des carré de plus en plus foncés
- #on balaye donc sur une ligne des valeurs de n à n + 15
- #la largeur d'un carré est donnée par $TAILLE/16
- largeur=$(echo "scale=1; $TAILLE/16.0" | bc)
- demi_largeur=$(echo "scale=1; $TAILLE/32.0" | bc)
- echo -e "G91\nG21\nG0 Z $FOCALE" > sortie.gcode
- echo -e "G1 F$VITESSE\n" >> sortie.gcode
- for ligne in `seq 0 15`
- do
- for hauteur in `seq 1 $DIAMETRE $demi_largeur`
- do
- #on trace des lignes de $DIAMETRE d'épaisseur
- for colonne in `seq 0 15`
- do
- puissance=$(echo "16*$ligne + $colonne" | bc)
- echo -e "M106 P1 S$puissance\nG1 X$largeur" >> sortie.gcode
- done
- #une fois qu'on a tracé une ligne on se décalle d'abord sur Y
- echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
- #puis on repart dans l'autre sens
- for colonne in `seq 15 -1 0`
- do
- puissance=$(echo "16*$ligne + $colonne" | bc)
- echo -e "M106 P1 S$puissance\nG1 X-$largeur" >> sortie.gcode
- done
- echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
- done
- #à ce moment là on vient de finir une ligne de carés
- #on place donc une délimitation avant de continuer
- echo -e "\nM106 P1 S255" >> sortie.gcode
- echo -e "G1 X$TAILLE" >> sortie.gcode
- echo -e "G1 X-$TAILLE" >> sortie.gcode
- done
- #une fois fini on trace les délimitation verticales
- echo -e "\nM106 P1 S255" >> sortie.gcode
- for colonne in `seq 1 8`
- do
- echo -e "G1 X0 Y$TAILLE" >> sortie.gcode
- echo -e "G1 X$largeur" >> sortie.gcode
- echo -e "G1 X0 Y-$TAILLE" >> sortie.gcode
- echo -e "G1 X$largeur" >> sortie.gcode
- done
- echo -e "\nM106 P1 S255" >> sortie.gcode
- exit 0
|