소스 검색

correction des conditions limites des boucles

Jackbot 4 년 전
부모
커밋
641c6a5028
1개의 변경된 파일20개의 추가작업 그리고 32개의 파일을 삭제
  1. 20 32
      bmp2gcode.cc

+ 20 - 32
bmp2gcode.cc

@@ -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()