mire.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/bin/bash
  2. #fonction appelée en cas de paramètres non valide ou de l'option -h
  3. usage()
  4. {
  5. # "$(basename "${0}") pour gérer les espaces
  6. echo "$(basename "${0}") description"
  7. echo ''
  8. echo "Ce script permet de générer un fichier gcode"
  9. echo "afin de créer un damier contenant toutes les nuances de gris"
  10. echo ""
  11. echo "Le fichier gcode en sortie utilisera des coordonées relatives."
  12. echo ""
  13. echo "La procédure est la suivante :"
  14. echo "-connaitre la distance focale"
  15. echo "-connaitre le diamètre du laser"
  16. echo "-exécuter le fichier gcode"
  17. echo ""
  18. echo "Détail des options"
  19. echo -e "-f\tfocale du laser en mm"
  20. echo -e "-d\tdiamètre du laser en mm"
  21. echo -e "-v\tvitesse de gravute en mm/min"
  22. echo -e "-t\ttaille de la mire mm"
  23. }
  24. readonly VERSION='1.0'
  25. #affiche la version du script
  26. version()
  27. {
  28. echo "$(basename "${0}") : ${VERSION}"
  29. echo ''
  30. }
  31. verification()
  32. {
  33. if [ -z $1 ]
  34. then
  35. echo "la variable $2 n'a pas été précisée, la valeur par défaut est $3"
  36. VALEUR=$3
  37. else
  38. re='^[0-9]+([.][0-9]+)?$'
  39. if ! [[ $1 =~ $re ]]
  40. then
  41. echo "l'argument $2 n'est pas un nombre"
  42. usage
  43. exit 25
  44. else
  45. VALEUR=$1
  46. fi
  47. fi
  48. }
  49. #boucle pour la gestion des options
  50. #s: signifie qu'un paramètre est attendu
  51. #hV signifie que ces options existent mais ne prennent pas de paramètre
  52. while getopts "d:f:v:t:hV" OPT
  53. do
  54. case "$OPT" in
  55. h)
  56. usage
  57. exit 0
  58. ;;
  59. V)
  60. version
  61. exit 0
  62. ;;
  63. d)
  64. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  65. DIAMETRE=${OPTARG}
  66. ;;
  67. f)
  68. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  69. FOCALE=${OPTARG}
  70. ;;
  71. v)
  72. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  73. VITESSE=${OPTARG}
  74. ;;
  75. t)
  76. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  77. TAILLE=${OPTARG}
  78. ;;
  79. *)
  80. #ce point est atteint lorsqu'une option inexistante est demandée
  81. echo "parametres non valide"
  82. usage
  83. exit 1
  84. ;;
  85. esac
  86. done
  87. verification "$DIAMETRE" "diamètre" 0.2
  88. DIAMETRE=$VALEUR
  89. echo -e "diamètre=$DIAMETRE"
  90. verification "$FOCALE" "focale" 5
  91. FOCALE=$VALEUR
  92. echo -e "focale=$FOCALE"
  93. verification "$VITESSE" "vitesse" 2000
  94. VITESSE=$VALEUR
  95. echo -e "vitesse=$VITESSE"
  96. verification "$TAILLE" "taille" 100
  97. TAILLE=$VALEUR
  98. echo -e "taille=$TAILLE"
  99. #la mire est constitué de carrés formant un dégradé
  100. #sur chaque ligne on gravera des carré de plus en plus foncés
  101. #on balaye donc sur une ligne des valeurs de n à n + 15
  102. #la largeur d'un carré est donnée par $TAILLE/16
  103. largeur=$(echo "scale=1; $TAILLE/16.0" | bc)
  104. demi_largeur=$(echo "scale=1; $TAILLE/32.0" | bc)
  105. echo -e "G91\nG21\nG0 Z $FOCALE" > sortie.gcode
  106. echo -e "G1 F$VITESSE\n" >> sortie.gcode
  107. for ligne in `seq 0 15`
  108. do
  109. for hauteur in `seq 1 $DIAMETRE $demi_largeur`
  110. do
  111. #on trace des lignes de $DIAMETRE d'épaisseur
  112. for colonne in `seq 0 15`
  113. do
  114. puissance=$(echo "16*$ligne + $colonne" | bc)
  115. echo -e "M106 P1 S$puissance\nG1 X$largeur" >> sortie.gcode
  116. done
  117. #une fois qu'on a tracé une ligne on se décalle d'abord sur Y
  118. echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
  119. #puis on repart dans l'autre sens
  120. for colonne in `seq 15 -1 0`
  121. do
  122. puissance=$(echo "16*$ligne + $colonne" | bc)
  123. echo -e "M106 P1 S$puissance\nG1 X-$largeur" >> sortie.gcode
  124. done
  125. echo -e "G1 X0 Y-$DIAMETRE" >> sortie.gcode
  126. done
  127. #à ce moment là on vient de finir une ligne de carés
  128. #on place donc une délimitation avant de continuer
  129. echo -e "\nM106 P1 S255" >> sortie.gcode
  130. echo -e "G1 X$TAILLE" >> sortie.gcode
  131. echo -e "G1 X-$TAILLE" >> sortie.gcode
  132. done
  133. #une fois fini on trace les délimitation verticales
  134. echo -e "\nM106 P1 S255" >> sortie.gcode
  135. for colonne in `seq 1 8`
  136. do
  137. echo -e "G1 X0 Y$TAILLE" >> sortie.gcode
  138. echo -e "G1 X$largeur" >> sortie.gcode
  139. echo -e "G1 X0 Y-$TAILLE" >> sortie.gcode
  140. echo -e "G1 X$largeur" >> sortie.gcode
  141. done
  142. echo -e "\nM106 P1 S255" >> sortie.gcode
  143. exit 0