Browse Source

ajout du paramètre de position de départ

Jackbot 2 years ago
parent
commit
ba7d2447a5
1 changed files with 83 additions and 59 deletions
  1. 83 59
      bmp2gcode.cc

+ 83 - 59
bmp2gcode.cc

@@ -9,9 +9,10 @@ class BMP2Gcode
 {
 	public:
 		BMP2Gcode();
-		void traitement(std::string nom_fichier);
-		int fichier_configuration(std::string conf);
-
+		void traitement(std::string &nom_fichier);
+		int fichier_configuration(std::string &conf);
+		void position_depart(std::string &position);
+		
 	private:
 		int entete();
 		int donnees();
@@ -23,7 +24,7 @@ class BMP2Gcode
 		unsigned int BMP_largeur, BMP_hauteur, BMP_offset, BMP_profondeur, BMP_taille;
 		double conf_taille_laser, conf_puissance_min, conf_puissance_max, conf_vitesse, conf_vitesse_max, conf_taille_image, conf_taille_pixel;
 		std::vector<unsigned int> tab_donnees;
-		std::string nom_fichier_bmp;
+		std::string nom_fichier_bmp, pos_depart;
 };
 
 BMP2Gcode::BMP2Gcode()
@@ -33,24 +34,40 @@ conf_vitesse(-1), conf_vitesse_max(-1),
 conf_taille_image(-1), conf_taille_pixel(-1)
 {}
 
-void BMP2Gcode::traitement(std::string nom_fichier)
+void BMP2Gcode::traitement(std::string &nom_fichier)
 {
-	//convertion du fichier et redimensionnement du fichier
-	int nbr_pixel_x = conf_taille_image / conf_taille_pixel;
-	std::string commande("convert " + nom_fichier + " -resize " + std::to_string(nbr_pixel_x) + " " + nom_fichier + ".bmp");
-	system(commande.c_str());
-	
-	nom_fichier_bmp = nom_fichier + ".bmp";
+	//vérification de l'existance du fichier image
+	std::ifstream fichier_image(nom_fichier);
 
-	if(entete() == 0)
+	//s'il n'existe pas
+	if(!fichier_image)
+	{
+		std::cout << "ATTENTION ! le fichier image n'existe pas" << std::endl;
+	}
+	else
 	{
-		if(donnees() == 0)
-		{sortie();}
+		//convertion du fichier et redimensionnement du fichier
+		int nbr_pixel_x = conf_taille_image / conf_taille_pixel;
+		std::string commande("convert " + nom_fichier + " -resize " + std::to_string(nbr_pixel_x) + " " + nom_fichier + ".bmp");
+		system(commande.c_str());
+
+		nom_fichier_bmp = nom_fichier + ".bmp";
+
+		if(entete() == 0)
+		{
+			if(donnees() == 0)
+			{sortie();}
+			else
+			{std::cout << "une erreur s'est produite" << std::endl;}
+		}
 		else
 		{std::cout << "une erreur s'est produite" << std::endl;}
 	}
-	else
-	{std::cout << "une erreur s'est produite" << std::endl;}
+}
+
+void BMP2Gcode::position_depart(std::string &position)
+{
+	pos_depart = position;
 }
 
 int BMP2Gcode::entete()
@@ -207,7 +224,19 @@ int BMP2Gcode::sortie()
 
 	//On passe en mode relatif
 	fichier_sortie << "G91" << std::endl;
-
+	
+	//si une position de départ est fournie
+	if(pos_depart == "centrer")
+	{
+		fichier_sortie << "G0 F" << conf_vitesse_max << " X-" << (double)(BMP_largeur * conf_taille_pixel/2.0) << " Y-" << (double)(BMP_hauteur * conf_taille_pixel/2.0) << std::endl;
+		std::cout << "la position de départ sera le centre en X et Y de l'objet" << std::endl;
+	}
+	else if(pos_depart == "centrerX")
+	{
+		fichier_sortie << "G0 F" << conf_vitesse_max << " X-" << (double)(BMP_largeur * conf_taille_pixel/2.0) << std::endl;
+		std::cout << "la position de départ sera le centre en X l'objet" << std::endl;
+	}
+	
 	//on s'assure que le laser est éteint
 	fichier_sortie << "M106 P1 S0" << std::endl;
 
@@ -323,7 +352,7 @@ unsigned int BMP2Gcode::consecutif(unsigned int indice, unsigned int min, unsign
 	return nbr;
 }
 
-int BMP2Gcode::fichier_configuration(std::string conf)
+int BMP2Gcode::fichier_configuration(std::string &conf)
 {
 	int nbr_parametres = 0;
 	//On regarde si le fichier de configuration existe déjà
@@ -334,7 +363,11 @@ int BMP2Gcode::fichier_configuration(std::string conf)
 	{
 		//alors on le crée
 		std::ofstream fichier_conf;
-		fichier_conf.open(conf);
+		if(conf.empty())
+		{fichier_conf.open("laser.conf");}
+		else
+		{fichier_conf.open(conf);}
+		
 		fichier_conf << "taille_laser(mm) 0.2" << std::endl;
 		fichier_conf << "puissance_min 0" << std::endl;
 		fichier_conf << "puissance_max 255" << std::endl;
@@ -390,43 +423,43 @@ int BMP2Gcode::fichier_configuration(std::string conf)
 		//vérification des paramètres
 		if(conf_taille_laser == -1)
 		{
-			std::cout << "ATTENTION ! La taille du laser n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La taille du laser n'a pas été fourni" << std::endl;
 			return 3;
 		}
 
 		if(conf_puissance_min == -1)
 		{
-			std::cout << "ATTENTION ! La puissance minimale du laser n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La puissance minimale du laser n'a pas été fourni" << std::endl;
 			return 3;
 		}
 		
 		if(conf_puissance_max == -1)
 		{
-			std::cout << "ATTENTION ! La puissance maximale du laser n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La puissance maximale du laser n'a pas été fourni" << std::endl;
 			return 3;
 		}
 
 		if(conf_vitesse == -1)
 		{
-			std::cout << "ATTENTION ! La vitesse du laser n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La vitesse du laser n'a pas été fourni" << std::endl;
 			return 3;
 		}
 
 		if(conf_vitesse_max == -1)
 		{
-			std::cout << "ATTENTION ! La vitesse maximale du laser n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La vitesse maximale du laser n'a pas été fourni" << std::endl;
 			return 3;
 		}
 		
 		if(conf_taille_image == -1)
 		{
-			std::cout << "ATTENTION ! La taille de l'image n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La taille de l'image n'a pas été fourni" << std::endl;
 			return 3;
 		}
 
 		if(conf_taille_pixel == -1)
 		{
-			std::cout << "ATTENTION ! La taille du pixel n'a pas été fournie" << std::endl;
+			std::cout << "ATTENTION ! La taille du pixel n'a pas été fourni" << std::endl;
 			return 3;
 		}
 
@@ -447,62 +480,53 @@ int BMP2Gcode::fichier_configuration(std::string conf)
 void aide()
 {
 	std::cout << "Ce programme permet de générer une fichier gcode à partir d'une image." << std::endl;
-	std::cout << "Pour fonctionner il nécessite imagemagik afin de convertir et redimensionner les images." << std::endl;
+	std::cout << "Pour fonctionner il nécessite imagemagik afin de convertir et redimensionner les images" << std::endl;
+	std::cout << std::endl;
 	std::cout << "Les options :" << std::endl;
-	std::cout << "-h\t--help\taffiche cette aide" << std::endl;
-	std::cout << "-c\t\tpour préciser le fichier de configuration" << std::endl;
-	std::cout << "-i\t\tpour préciser l'image à traiter" << std::endl;
+	std::cout << "-h\taffiche cette aide" << std::endl;
+	std::cout << "-c\tpour préciser le fichier de configuration" << std::endl;
+	std::cout << "-i\tpour préciser l'image à traiter" << std::endl;
+	std::cout << "-p\tpour préciser la position de départ (centrer pour centrer en X et Y, centrerX pour uniquement centrer sur X)" << std::endl;
 }
 
 int main(int argc, char* argv[])
 {
+	std::string conf, fichier, position;
+
 	//Il est nécessaire d'avoir au moins 3 arguments
 	if(argc >= 3)
 	{
 		//On cherche la position des arguments
 		int position_c = -1, position_i = -1;
 		
-		for(int i = 0 ; i < argc ; i++)
+		for(int i = 0 ; i < (argc - 1) ; i++) //on ne va pas jusqu'au bout car chaque option nécessite un paramètre
 		{
+			//ici on récupère le nom du fichier de configuration placé après l'option -c
 			if(std::string(argv[i]) == "-c")
-			{position_c = i;}
-			
+			{conf = argv[i + 1];}
+
 			if(std::string(argv[i]) == "-i")
-			{position_i = i;}
-		}
+			{fichier = argv[i + 1];}
 
-		//On vérifie que les positions sont cohérentes
-		if(position_c == argc || position_i == argc || abs(position_c - position_i) < 2)
-		{
-			std::cout << "argument manquant\n" << std::endl;
-			aide();
-			return 1;
+			if(std::string(argv[i]) == "-p")
+			{position = argv[i + 1];}
 		}
 		
-		//si on arrive ici c'est que des arguments ont été fournis
-		//On va donc les récupérer
-		std::string conf, fichier;
-		
-		if(position_c > 0)
-		{conf = argv[position_c + 1];}
-		
-		if(position_i > 0)
-		{fichier = argv[position_i + 1];}
+		/*2 fichiers sont nécessaire,
+		le fichier de configuration et le fichier image,
+		on vérifie donc qu'ils aient été fourni*/
 		
-		std::cout << "fichier image : " << fichier << std::endl;
-		
-		//on vérifie qu'il y a bien un fichier image
-		//s'il n'existe pas
-		std::ifstream fichier_image(fichier);
-		if (!fichier_image)
+		if(fichier.empty())
 		{
-			// read away
-			std::cout << "Le fichier image n'existe pas" << std::endl;
+			std::cout << "ATTENTION ! Le fichier image n'a pas été fourni" << std::endl;
+			std::cout << std::endl;
+			aide();
 			return 2;
 		}
 
 		BMP2Gcode image;
-		
+
+		image.position_depart(position);
 		if(image.fichier_configuration(conf) != 0)
 		{return 3;}
 		image.traitement(fichier);