|
@@ -124,6 +124,7 @@ int BMP2Gcode::entete()
|
|
|
|
|
|
std::cout << "largeur BMP : " << BMP_largeur << std::endl;
|
|
|
std::cout << "hauteur BMP : " << BMP_hauteur << std::endl;
|
|
|
+ std::cout << "profondeur BMP : " << BMP_prof << std::endl;
|
|
|
|
|
|
delete[] entete;
|
|
|
fichier.close();
|
|
@@ -151,7 +152,7 @@ int BMP2Gcode::donnees()
|
|
|
char *donnees = new char [ limite ];
|
|
|
fichier.read(donnees, limite);
|
|
|
|
|
|
- for(int i = BMP_offset() ; i < limite ; i += 3)
|
|
|
+ for(int i = BMP_offset() ; i < limite ; i += BMP_prof/8)
|
|
|
{
|
|
|
if(donnees[i] < 0)
|
|
|
{tab_donnees.push_back(256 + (int)donnees[i]);}
|
|
@@ -174,16 +175,17 @@ int BMP2Gcode::sortie()
|
|
|
fichier_sortie.open (nom_fichier_gcode);
|
|
|
|
|
|
/****************************CONDITIONS INITIALES****************************/
|
|
|
- double taille_pixel = (double)(conf_taille_image)/(double)(BMP_largeur), position_Y = 0, verif = 0;
|
|
|
+ double taille_pixel = (double)(conf_taille_image)/(double)(BMP_largeur), position_Y = 0;
|
|
|
|
|
|
int sens = 1;
|
|
|
- unsigned int indice = 0, ligne = 1;
|
|
|
+ unsigned int indice = 0, ligne = 0;
|
|
|
|
|
|
- //on arrondi la taille du pixel au dixième de mm
|
|
|
- //taille_pixel = round(10.0*taille_pixel)/10.0;
|
|
|
+ //on arrondi la taille du pixel pour quelle corresponde à un multiple de la taille du laser
|
|
|
+ double rapport = ceil(taille_pixel/conf_taille_laser);
|
|
|
+ taille_pixel = rapport * conf_taille_laser;
|
|
|
|
|
|
std::cout << "***SORTIE***" << std::endl;
|
|
|
- std::cout << "largeur = " << conf_taille_image << " mm" << std::endl;
|
|
|
+ std::cout << "largeur = " << BMP_largeur * taille_pixel << " mm" << std::endl;
|
|
|
std::cout << "hauteur = " << BMP_hauteur * conf_taille_image/BMP_largeur << " mm" << std::endl;
|
|
|
std::cout << "taille pixel = " << taille_pixel << " mm" << std::endl;
|
|
|
|
|
@@ -195,50 +197,37 @@ int BMP2Gcode::sortie()
|
|
|
|
|
|
//on défini la vitesse
|
|
|
fichier_sortie << "G1 F" << conf_vitesse << std::endl;
|
|
|
- while(ligne <= BMP_hauteur)
|
|
|
+
|
|
|
+ //on parcourt toutes les lignes
|
|
|
+ while(ligne < BMP_hauteur)
|
|
|
{
|
|
|
//pour graver une ligne on fera des aller-retour tant que :
|
|
|
- while(position_Y <= ligne * taille_pixel)
|
|
|
+ while(position_Y < ligne * taille_pixel)
|
|
|
{
|
|
|
- int nbr_pixels = 0;
|
|
|
//traitement d'une ligne
|
|
|
-
|
|
|
- unsigned int indice_max = ligne * BMP_largeur - 1, indice_min = indice_max - BMP_largeur + 1;
|
|
|
-// std::cout << "indice_min = " << indice_min << std::endl;
|
|
|
-// std::cout << "indice_max = " << indice_max << std::endl;
|
|
|
-
|
|
|
- while(indice < indice_max && indice >= indice_min)
|
|
|
+ //indice = ligne * BMP_largeur + colonne;
|
|
|
+ do
|
|
|
{
|
|
|
- //on détermine la puissance associé au pixel indice
|
|
|
unsigned int puissance = conversion(255 - tab_donnees[indice], conf_puissance_min, conf_puissance_max);
|
|
|
|
|
|
//on détermine le nombre de pixels successifs pour lesquels la puissance du laser sera la même
|
|
|
int nbr = 1;
|
|
|
- while( puissance == conversion(255 - tab_donnees[indice + nbr], conf_puissance_min, conf_puissance_max)
|
|
|
- && indice + nbr < indice_max && indice + nbr > indice_min)
|
|
|
+ while( puissance == conversion(255 - tab_donnees[indice + sens * nbr], conf_puissance_min, conf_puissance_max)
|
|
|
+ && (indice + sens * nbr) % BMP_largeur != 0)
|
|
|
{nbr ++;}
|
|
|
|
|
|
fichier_sortie << "M106 P1 S" << puissance << std::endl;
|
|
|
|
|
|
//on se déplace selon le sens
|
|
|
fichier_sortie << "G1 X" << sens * taille_pixel * nbr << std::endl;
|
|
|
- verif += sens * taille_pixel * nbr;
|
|
|
-
|
|
|
- //pour chaque pixel parcourut on incrémente l'étape
|
|
|
- nbr_pixels += nbr;
|
|
|
|
|
|
//et on se déplace dans le tableau selon le sens
|
|
|
indice += sens * nbr;
|
|
|
}
|
|
|
-
|
|
|
-// std::cout << "sens : " << sens << std::endl;
|
|
|
-// std::cout << "verif : " << verif << std::endl;
|
|
|
+ while(indice % BMP_largeur != 0);
|
|
|
|
|
|
//une fois que la ligne est finie, on décale d'une taille de laser sur l'axe Y
|
|
|
fichier_sortie << "G1 Y" << conf_taille_laser << std::endl;
|
|
|
-
|
|
|
- //est ce qu'un M400 changerai les choses ??
|
|
|
-
|
|
|
position_Y += conf_taille_laser;
|
|
|
|
|
|
//on change de sens
|
|
@@ -251,13 +240,12 @@ int BMP2Gcode::sortie()
|
|
|
|
|
|
fichier_sortie << ";ligne numéro " << ligne << std::endl;
|
|
|
}
|
|
|
+
|
|
|
+ std::cout << "indice = " << indice << std::endl;
|
|
|
|
|
|
//il ne faut pas oublier d'éteindre le laser à la fini
|
|
|
fichier_sortie << "M106 P1 S0" << std::endl;
|
|
|
|
|
|
- std::cout << "position_Y : " << position_Y << std::endl;
|
|
|
- std::cout << "fermeture fichier" << std::endl;
|
|
|
-
|
|
|
fichier_sortie.close();
|
|
|
|
|
|
return 0;
|
|
@@ -293,7 +281,7 @@ unsigned int BMP2Gcode::conversion(unsigned int valeur, unsigned int min, unsign
|
|
|
pour x = 255 <=> y = 255*a+min = max
|
|
|
<=> a = (max - min)/255
|
|
|
*/
|
|
|
-
|
|
|
+
|
|
|
return valeur * (max - min)/255 + min;
|
|
|
}
|
|
|
void BMP2Gcode::fichier_conf()
|