focale.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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 bonne distance focale du laser"
  10. echo "ce script n'est utile que sur les imprimantes 3D puisqu'on joue sur l'axe Z"
  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 grossièrement 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 "-m\thauteur relative minimale en mm"
  21. echo -e "-M\thauteur relative maximale en mm"
  22. echo -e "-p\tpas entre deux hauteurs en 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. #boucle pour la gestion des options
  32. #s: signifie qu'un paramètre est attendu
  33. #hV signifie que ces options existent mais ne prennent pas de paramètre
  34. while getopts "m:M:p:hV" OPT
  35. do
  36. case "$OPT" in
  37. h)
  38. usage
  39. exit 0
  40. ;;
  41. V)
  42. version
  43. exit 0
  44. ;;
  45. m)
  46. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  47. readonly H_MIN=${OPTARG}
  48. ;;
  49. M)
  50. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  51. readonly H_MAX=${OPTARG}
  52. ;;
  53. p)
  54. #afin de garantir le contenu de la variable il est préférable de la déclarer comme readonly
  55. readonly PAS=${OPTARG}
  56. ;;
  57. *)
  58. #ce point est atteint lorsqu'une option inexistante est demandée
  59. echo "parametres non valide"
  60. usage
  61. exit 1
  62. ;;
  63. esac
  64. done
  65. if [ -z "${H_MIN}" ]
  66. then
  67. echo "la hauteur minimale est inconnue"
  68. usage
  69. exit 10
  70. else
  71. re='^[0-9]+([.][0-9]+)?$'
  72. if ! [[ $H_MIN =~ $re ]]
  73. then
  74. echo "l'argument de hauteur minimale n'est pas un nombre"
  75. usage
  76. exit 15
  77. fi
  78. fi
  79. if [ -z "${H_MAX}" ]
  80. then
  81. echo "la hauteur maximale est inconnue"
  82. usage
  83. exit 20
  84. else
  85. re='^[0-9]+([.][0-9]+)?$'
  86. if ! [[ $H_MAX =~ $re ]]
  87. then
  88. echo "l'argument de hauteur maximale n'est pas un nombre"
  89. usage
  90. exit 25
  91. fi
  92. fi
  93. if [ -z "${PAS}" ]
  94. then
  95. echo "le pas n'a pas été précisé, la valeur par défaut est 1mm"
  96. PAS=1
  97. fi
  98. #echo "valeur=\"0\";text(valeur, size=50, halign=\"right\", valign =\"center\");" > temp.scad
  99. echo "\$fn = 30;valeur=\"0\";translate([0, 1, 0]){text(valeur, size=3);}" > temp.scad
  100. echo -e "G91\nG21\nG0 Z $H_MIN" > sortie.gcode
  101. echo -e "G1 F2000\n" >> sortie.gcode
  102. for i in `seq $H_MIN $PAS $H_MAX`
  103. do
  104. openscad -o temp.dxf -D 'valeur="'$i'"' temp.scad
  105. dxf2gcode temp.dxf -q -e "${i}.gcode"
  106. #numérotation de la ligne
  107. cat $i.gcode >> sortie.gcode
  108. #trçage d'une ligne
  109. echo -e "\nM400\nM106 P1 S255\nG1 X 20" >> sortie.gcode
  110. #retour au point de départ
  111. echo -e "M400\nM106 P1 S0\nG1 X -20" >> sortie.gcode
  112. #déplacement pour la nouvelle hauteur
  113. echo -e ";changement de hauteur\nG1 X 0 Y 5 Z $PAS\n" >> sortie.gcode
  114. rm $i.gcode
  115. done
  116. rm temp.scad
  117. rm temp.dxf
  118. exit 0