123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #!/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 taille du point focal du laser"
- echo "un ensemble de trait 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 "-l\tlargeur minimale en mm"
- echo -e "-L\tlargeur maximale en mm"
- echo -e "-p\tpas entre deux hauteurs 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 "l:L:p:f:hV" OPT
- do
- case "$OPT" in
- h)
- usage
- exit 0
- ;;
- V)
- version
- exit 0
- ;;
- l)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- readonly L_MIN=${OPTARG}
- ;;
- L)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- readonly L_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}
- ;;
- f)
- #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
- readonly FOCALE=${OPTARG}
- ;;
- *)
- #ce point est atteint lorsqu'une option inexistante est demandée
- echo "parametres non valide"
- usage
- exit 1
- ;;
- esac
- done
- if [ -z "${L_MIN}" ]
- then
- echo "la largeur minimale est inconnue"
- usage
- exit 10
- else
- re='^[0-9]+([.][0-9]+)?$'
- if ! [[ $L_MIN =~ $re ]]
- then
- echo "l'argument de largeur minimale n'est pas un nombre"
- usage
- exit 15
- fi
- fi
- if [ -z "${L_MAX}" ]
- then
- echo "la largeur maximale est inconnue"
- usage
- exit 20
- else
- re='^[0-9]+([.][0-9]+)?$'
- if ! [[ $L_MAX =~ $re ]]
- then
- echo "l'argument de largeur maximale n'est pas un nombre"
- usage
- exit 25
- fi
- fi
- if [ -z "${PAS}" ]
- then
- echo "le pas est inconnue sa valeur sera fixée à 0.1mm"
- PAS=0.1
- else
- re='^[0-9]+([.][0-9]+)?$'
- if ! [[ $PAS =~ $re ]]
- then
- echo "l'argument de largeur maximale n'est pas un nombre"
- usage
- exit 35
- fi
- fi
- if [ -z "${FOCALE}" ]
- then
- echo "la distance focale est inconnue sa valeur sera fixée à 5mm"
- FOCALE=5
- else
- re='^[0-9]+([.][0-9]+)?$'
- if ! [[ $FOCALE =~ $re ]]
- then
- echo "l'argument de largeur maximale n'est pas un nombre"
- usage
- exit 45
- fi
- 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" > 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
- #La première doit s'éloigner du nombre écrit juste avant
- echo -e "\nM400\nM106 P1 S255\nG1 X 20" >> sortie.gcode
- DELTA=$(echo "2*$i" | bc)
- 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 ";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
- echo -e "M400\nG1 X 10" >> sortie.gcode
- 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\nG1 X 0 Y $i\n" >> sortie.gcode
- echo -e "M400\nM106 P1 S0\nG1 X -20" >> sortie.gcode
- echo -e "M400\nM106 P1 S0\n" >> sortie.gcode
- rm $i.gcode
- done
- rm temp.scad
- rm temp.dxf
- exit 0
|