largeur_laser.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 trouver la taille du point focal du laser"
  10. echo "un ensemble de trait seront tracés de plus en plus espacés"
  11. echo ""
  12. echo "Le fichier gcode en sortie utilisera des coordonées relatives."
  13. echo ""
  14. echo "La procédure est la suivante :"
  15. echo "-connaitre la distance focale"
  16. echo "-placer la tête de l'imprimante 3D en buté sur l'objet à graver"
  17. echo "-exécuter le fichier gcode"
  18. echo ""
  19. echo "Détail des options"
  20. echo -e "-l\tlargeur minimale en mm"
  21. echo -e "-L\tlargeur maximale en mm"
  22. echo -e "-p\tpas entre deux hauteurs en mm"
  23. echo -e "-f\tla distance focale du laser en mm"
  24. }
  25. readonly VERSION='1.0'
  26. #affiche la version du script
  27. version()
  28. {
  29. echo "$(basename "${0}") : ${VERSION}"
  30. echo ''
  31. }
  32. #boucle pour la gestion des options
  33. #s: signifie qu'un paramètre est attendu
  34. #hV signifie que ces options existent mais ne prennent pas de paramètre
  35. while getopts "l:L:p:f:hV" OPT
  36. do
  37. case "$OPT" in
  38. h)
  39. usage
  40. exit 0
  41. ;;
  42. V)
  43. version
  44. exit 0
  45. ;;
  46. l)
  47. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  48. readonly L_MIN=${OPTARG}
  49. ;;
  50. L)
  51. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  52. readonly L_MAX=${OPTARG}
  53. ;;
  54. p)
  55. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  56. readonly PAS=${OPTARG}
  57. ;;
  58. f)
  59. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  60. readonly FOCALE=${OPTARG}
  61. ;;
  62. *)
  63. #ce point est atteint lorsqu'une option inexistante est demandée
  64. echo "parametres non valide"
  65. usage
  66. exit 1
  67. ;;
  68. esac
  69. done
  70. if [ -z "${L_MIN}" ]
  71. then
  72. echo "la largeur minimale est inconnue"
  73. usage
  74. exit 10
  75. else
  76. re='^[0-9]+([.][0-9]+)?$'
  77. if ! [[ $L_MIN =~ $re ]]
  78. then
  79. echo "l'argument de largeur minimale n'est pas un nombre"
  80. usage
  81. exit 15
  82. fi
  83. fi
  84. if [ -z "${L_MAX}" ]
  85. then
  86. echo "la largeur maximale est inconnue"
  87. usage
  88. exit 20
  89. else
  90. re='^[0-9]+([.][0-9]+)?$'
  91. if ! [[ $L_MAX =~ $re ]]
  92. then
  93. echo "l'argument de largeur maximale n'est pas un nombre"
  94. usage
  95. exit 25
  96. fi
  97. fi
  98. if [ -z "${PAS}" ]
  99. then
  100. echo "le pas est inconnue sa valeur sera fixée à 0.1mm"
  101. PAS=0.1
  102. else
  103. re='^[0-9]+([.][0-9]+)?$'
  104. if ! [[ $PAS =~ $re ]]
  105. then
  106. echo "l'argument de largeur maximale n'est pas un nombre"
  107. usage
  108. exit 35
  109. fi
  110. fi
  111. if [ -z "${FOCALE}" ]
  112. then
  113. echo "la distance focale est inconnue sa valeur sera fixée à 5mm"
  114. FOCALE=5
  115. else
  116. re='^[0-9]+([.][0-9]+)?$'
  117. if ! [[ $FOCALE =~ $re ]]
  118. then
  119. echo "l'argument de largeur maximale n'est pas un nombre"
  120. usage
  121. exit 45
  122. fi
  123. fi
  124. #echo "valeur=\"0\";text(valeur, size=50, halign=\"right\", valign =\"center\");" > temp.scad
  125. echo "\$fn = 30;valeur=\"0\";translate([0, 1, 0]){text(valeur, size=3);}" > temp.scad
  126. echo -e "G91" > sortie.gcode
  127. echo -e "G0 Z $FOCALE" >> sortie.gcode
  128. echo -e "G1 F2000\n" >> sortie.gcode
  129. #Pour que seq renvoie des nombre avec '.' et non ',' il faut :
  130. LANG=en_US
  131. for i in `seq $L_MIN $PAS $L_MAX`
  132. do
  133. openscad -o temp.dxf -D 'valeur="'$i'"' temp.scad
  134. dxf2gcode temp.dxf -q -e "${i}.gcode"
  135. #numérotation de la ligne
  136. cat $i.gcode >> sortie.gcode
  137. #On trace un paquet de lignes sur une hauteur de 3mm
  138. #La première doit s'éloigner du nombre écrit juste avant
  139. echo -e "\nM400\nM106 P1 S255\nG1 X 20" >> sortie.gcode
  140. DELTA=$(echo "2*$i" | bc)
  141. for j in `seq $i $DELTA 3`
  142. do
  143. #Une fois la première ligne tracée on fait des aller-retour sur 10mm
  144. echo -e ";changement de ligne\nG1 X 0 Y $i" >> sortie.gcode
  145. echo -e "M400\nG1 X -10" >> sortie.gcode
  146. echo -e ";changement de ligne\nG1 X 0 Y $i" >> sortie.gcode
  147. echo -e "M400\nG1 X 10" >> sortie.gcode
  148. done
  149. #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
  150. echo -e ";changement de ligne\nG1 X 0 Y $i\n" >> sortie.gcode
  151. echo -e "M400\nM106 P1 S0\nG1 X -20" >> sortie.gcode
  152. echo -e "M400\nM106 P1 S0\n" >> sortie.gcode
  153. rm $i.gcode
  154. done
  155. rm temp.scad
  156. rm temp.dxf
  157. exit 0