67 std::cout <<
"\033[1;31m" << message <<
"\033[1;32m" << std::endl;
71 template <
class X>
void ajouter_list(
int ligne,std::string var,X* x,std::map<std::string,X*> &lst)
73 typedef typename std::map<std::string,X* >::iterator ITERATEUR;
74 std::pair<std::string ,X*> tmp(var,x);
75 std::pair<ITERATEUR,bool> ret=lst.insert(tmp);
76 if (ret.second==
false)
79 sprintf(mess,
" Ligne %d : variable %s deja utilisée",ligne,var.c_str());
86 template <
class X> X*
get_list(
int ligne,std::string var,std::map<std::string,X*> &lst)
88 typedef typename std::map<std::string,X* >::iterator ITERATEUR;
89 ITERATEUR it=lst.find(var);
93 sprintf(mess,
" Ligne %d : variable %s inconnue",ligne,var.c_str());
134 affiche((
char*)
"\033[1;36m************************************************************");
137 affiche((
char*)
"************************************************************");
141 affiche((
char*)
"************************************************************");
142 affiche((
char*)
"Execution d'un script MAGiC\033[1;31m");
144 affiche((
char*)
"\033[1;32m************************************************************\033[1;33m");
147 affiche((
char*)
"Debut execution");
148 FILE* in=fopen(chemin,
"rt");
150 std::map<std::string,MG_GESTIONNAIRE*> lstgest;
151 std::map<std::string,MG_GEOMETRIE*> lst_mg_geometrie;
152 std::map<std::string,MG_CG_MODELE*> lst_mgcg_modele;
153 std::map<std::string,MG_CG_ASSEMBLAGE*> lst_mgcg_assemblage;
154 std::map<std::string,MG_CG_FORME*> lst_mgcg_forme;
155 std::map<std::string,MG_CG_OPERATEUR*> lst_mgcg_operateur;
156 char instruction[500];
157 fgets(instruction,500,in);
166 std::string instruction2=instruction;
167 size_t pos=instruction2.find_first_not_of(
" ");
168 instruction2.erase(0,pos);
169 strcpy(instruction,(
char*)instruction2.c_str());
170 parse.
decode(instruction,
"@ = @",param);
171 strcpy(variable,param[0].argument[0].c_str());
172 strcpy(commande,param[1].argument[0].c_str());
174 int nb=sscanf(commande,
"%s",key);
178 if (variable[0]!=
'#')
180 if (strcmp(key,
"FICHIER")==0)
183 sscanf(commande,
"%s %s",key,fichier);
185 if (strcmp(fichier,
"NOUVEAU")==0)
188 sprintf(message,
" Création d'un nouveau fichier MAGiC \033[38;5;46m[%s]\033[1;33m",variable);
191 ajouter_list<MG_GESTIONNAIRE>(ligne,variable,gest,lstgest);
196 sprintf(message,
" Lecture d'un fichier MAGiC \033[38;5;46m[%s]\033[1;33m",variable);
199 ajouter_list<MG_GESTIONNAIRE>(ligne,variable,gest,lstgest);
204 else if (strcmp(key,
"IMPORTSTEPOCC")==0)
208 char fichier_entree[400];
209 char fichier_sortie[400];
214 bool fusionner_entite_similaire=
false;
215 bool importer_triangulation=
false;
217 sscanf(commande,
"%s %s %s %s %lf %s %s %lf",key,var,fichier_entree,fichier_sortie,&eps,fusion,triSTL,&eps_tri);
218 upcase(fusion);
if(strcmp(fusion,
"FUSION")==0)fusionner_entite_similaire=
true;
220 if(strcmp(triSTL,
"TRISTL")==0)importtri=1;
221 if(strcmp(triSTL,
"TRIANGULATION")==0)importtri=2;
222 if(importtri>0) importer_triangulation=
true;
224 sprintf(message,
" Importation d'un fichier step via OpenCascade \033[38;5;46m[%s]\033[1;33m",variable);
228 std::string str_fichier_sortie_caf;
229 std::string str_nom_fichier_caf_mggeo;
230 std::string str_fichier_sortie(fichier_sortie);
231 if(str_fichier_sortie.size()>6)
233 std::size_t find_magic = str_fichier_sortie.find(
".magic");
234 if(find_magic!=std::string::npos)
236 str_fichier_sortie_caf = str_fichier_sortie;
237 str_fichier_sortie_caf.erase(find_magic,6);
238 str_nom_fichier_caf_mggeo = str_fichier_sortie_caf;
239 str_fichier_sortie_caf = str_fichier_sortie_caf +
".ocaf";
244 ajouter_list<MG_GEOMETRIE>(ligne,variable,mggeo,lst_mg_geometrie);
247 else if (strcmp(key,
"CREEMODELE")==0)
257 bool fusionner_entite_similaire=
false;
258 bool importer_triangulation=
false;
259 sscanf(commande,
"%s %s %s %lf %lf %s %s %lf",key,var,nom,&unite,&eps,fusion,triSTL,&eps_tri);
260 upcase(fusion);
if(strcmp(fusion,
"FUSION")==0)fusionner_entite_similaire=
true;
262 if(strcmp(triSTL,
"TRISTL")==0)importer_triangulation=
true;
263 else if(strcmp(triSTL,
"TRIANGULATION")==0)importer_triangulation=
true;
264 else if(strcmp(triSTL,
"TRUE")==0)importer_triangulation=
true;
271 ajouter_list<MG_CG_MODELE>(ligne,variable,mgcg_modele,lst_mgcg_modele);
273 sprintf(message,
" Création d'un MG_CG_MODELE \033[38;5;46m[%s]\033[1;33m : ID MG_GEOMETRIE = \033[1;31m%li\033[1;33m",variable,mgcg_modele->
get_mg_geometrie()->
get_id());
277 else if (strcmp(key,
"CREEASSEMBLAGE")==0)
282 sscanf(commande,
"%s %s %s",key,var,nom);
283 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
285 ajouter_list<MG_CG_ASSEMBLAGE>(ligne,variable,mgcg_assemblage,lst_mgcg_assemblage);
287 sprintf(message,
" Création d'un MG_CG_ASSEMBLAGE \033[38;5;46m[%s]\033[1;33m : ID MG_GEOMETRIE = \033[1;31m%li\033[1;33m",variable,mgcg_assemblage->
get_mg_sous_geometrie()->
get_id());
291 else if (strcmp(key,
"AJOUTASS")==0)
297 sscanf(commande,
"%s %s %s",key,var1,var2);
298 sprintf(message,
" Ajout d'une MG_CG_FORME \033[38;5;46m[%s]\033[1;33m à un MG_CG_ASSEMBLAGE \033[38;5;46m[%s]\033[1;33m",var2,var1);
300 MG_CG_ASSEMBLAGE* mgcg_assemblage = get_list<MG_CG_ASSEMBLAGE>(ligne,var1,lst_mgcg_assemblage);
301 MG_CG_FORME* mgcg_forme = get_list<MG_CG_FORME>(ligne,var2,lst_mgcg_forme);
304 else if (strcmp(key,
"P_BOITE")==0)
308 double x1,y1,z1,x2,y2,z2;
309 sscanf(commande,
"%s %s %lf %lf %lf %lf %lf %lf ",key,var,&x1,&y1,&z1,&x2,&y2,&z2);
311 sprintf(message,
" Création d'une MG_CG_FORME_VOLUME_BOITE \033[38;5;46m[%s]\033[1;33m",variable);
313 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
316 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme,lst_mgcg_forme);
318 else if (strcmp(key,
"P_SPHERE")==0)
322 sscanf(commande,
"%s %s %lf %lf %lf %lf",key,var,&x1,&y1,&z1,&r);
324 sprintf(message,
" Création d'une MG_CG_FORME_VOLUME_SPHERE \033[38;5;46m[%s]\033[1;33m",variable);
326 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
329 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme,lst_mgcg_forme);
331 else if (strcmp(key,
"P_ELLIPSOIDE")==0)
334 double centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon_majeur,rayon_mineur;
335 sscanf(commande,
"%s %s %lf %lf %lf %lf %lf %lf %lf %lf",key,var,¢re_x,¢re_y,¢re_z,&axe_x,&axe_y,&axe_z,&rayon_majeur,&rayon_mineur);
337 sprintf(message,
" Création d'une MG_CG_FORME_VOLUME_ELLIPSOIDE \033[38;5;46m[%s]\033[1;33m",variable);
339 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
342 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme,lst_mgcg_forme);
344 else if (strcmp(key,
"P_CYLINDRE")==0)
347 double centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon,longueur;
348 sscanf(commande,
"%s %s %lf %lf %lf %lf %lf %lf %lf %lf",key,var,¢re_x,¢re_y,¢re_z,&axe_x,&axe_y,&axe_z,&rayon,&longueur);
350 sprintf(message,
" Création d'une MG_CG_FORME_VOLUME_CYLINDRE \033[38;5;46m[%s]\033[1;33m",variable);
352 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
355 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme,lst_mgcg_forme);
357 else if (strcmp(key,
"P_CONE")==0)
360 double centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon,longueur;
361 sscanf(commande,
"%s %s %lf %lf %lf %lf %lf %lf %lf %lf",key,var,¢re_x,¢re_y,¢re_z,&axe_x,&axe_y,&axe_z,&rayon,&longueur);
363 sprintf(message,
" Création d'une MG_CG_FORME_VOLUME_CONE \033[38;5;46m[%s]\033[1;33m",variable);
365 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
368 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme,lst_mgcg_forme);
370 else if (strcmp(key,
"P_TORE")==0)
373 double centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon_cercle,rayon_tore,angle_seg,angle_rotation;
374 sscanf(commande,
"%s %s %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",key,var,¢re_x,¢re_y,¢re_z,&axe_x,&axe_y,&axe_z,&rayon_cercle,&rayon_tore,&angle_seg,&angle_rotation);
376 sprintf(message,
" Création d'une MG_CG_FORME_VOLUME_TORE \033[38;5;46m[%s]\033[1;33m",variable);
378 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
379 MG_CG_FORME* mgcg_forme =
MG_CG::creer_MG_CG_FORME_VOLUME_TORE(mgcg_modele,centre_x,centre_y,centre_z,axe_x,axe_y,axe_z,rayon_cercle,rayon_tore,angle_seg,angle_rotation);
381 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme,lst_mgcg_forme);
383 else if (strcmp(key,
"UNION")==0)
388 char sem[500];sem[0]=0;
389 sscanf(commande,
"%s %s %s %s %s",key,var,var1,var2,sem);
391 sprintf(message,
" Création d'un MG_CG_OP_BOOL_UNION et construction de la MG_CG_FORME \033[38;5;46m[%s]\033[1;33m",variable);
393 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
394 MG_CG_FORME* mgcg_forme_entree_1 = get_list<MG_CG_FORME>(ligne,var1,lst_mgcg_forme);
395 MG_CG_FORME* mgcg_forme_entree_2 = get_list<MG_CG_FORME>(ligne,var2,lst_mgcg_forme);
398 std::map<long,MG_CG_FORME*>::iterator it;
400 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme_sortie,lst_mgcg_forme);
402 else if (strcmp(key,
"DIFF")==0)
407 char sem[500];sem[0]=0;
408 sscanf(commande,
"%s %s %s %s %s",key,var,var1,var2,sem);
410 sprintf(message,
" Création d'un MG_CG_OP_BOOL_DIFFERENCE et construction de la MG_CG_FORME \033[38;5;46m[%s]\033[1;33m",variable);
412 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
413 MG_CG_FORME* mgcg_forme_entree_1 = get_list<MG_CG_FORME>(ligne,var1,lst_mgcg_forme);
414 MG_CG_FORME* mgcg_forme_entree_2 = get_list<MG_CG_FORME>(ligne,var2,lst_mgcg_forme);
417 std::map<long,MG_CG_FORME*>::iterator it;
419 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme_sortie,lst_mgcg_forme);
421 else if (strcmp(key,
"INTER")==0)
426 char sem[500];sem[0]=0;
427 sscanf(commande,
"%s %s %s %s %s",key,var,var1,var2,sem);
429 sprintf(message,
" Création d'un MG_CG_OP_BOOL_INTERSECTION et construction de la MG_CG_FORME \033[38;5;46m[%s]\033[1;33m",variable);
431 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
432 MG_CG_FORME* mgcg_forme_entree_1 = get_list<MG_CG_FORME>(ligne,var1,lst_mgcg_forme);
433 MG_CG_FORME* mgcg_forme_entree_2 = get_list<MG_CG_FORME>(ligne,var2,lst_mgcg_forme);
436 std::map<long,MG_CG_FORME*>::iterator it;
438 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme_sortie,lst_mgcg_forme);
440 else if (strcmp(key,
"FRAGMENT")==0)
445 char sem[500];sem[0]=0;
446 sscanf(commande,
"%s %s %s %s %s",key,var,var1,var2,sem);
448 sprintf(message,
" Création d'un MG_CG_OP_BOOL_FRAGMENT et construction de la MG_CG_FORME \033[38;5;46m[%s]\033[1;33m",variable);
450 MG_CG_MODELE* mgcg_modele = get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
451 MG_CG_FORME* mgcg_forme_entree_1 = get_list<MG_CG_FORME>(ligne,var1,lst_mgcg_forme);
452 MG_CG_FORME* mgcg_forme_entree_2 = get_list<MG_CG_FORME>(ligne,var2,lst_mgcg_forme);
455 std::map<long,MG_CG_FORME*>::iterator it;
457 ajouter_list<MG_CG_FORME>(ligne,variable,mgcg_forme_sortie,lst_mgcg_forme);
459 else if (strcmp(key,
"TRISTLMODELE")==0)
464 sscanf(commande,
"%s %s %s",key,var,triSTL);
465 if(strcmp(triSTL,
"TRISTL")==0)importtri=1;
466 if(strcmp(triSTL,
"TRIANGULATION")==0)importtri=2;
467 MG_CG_MODELE* mgcg_modele=get_list<MG_CG_MODELE>(ligne,var,lst_mgcg_modele);
474 sprintf(message,
" Generation de la triangulation STL de \033[38;5;46m[%s]\033[1;33m : ID = \033[1;31m%li\033[1;33m",var,maillage_stl->
get_id());
477 else if (strcmp(key,
"TRISTLASSEMBLAGE")==0)
482 sscanf(commande,
"%s %s %s",key,var,triSTL);
483 if(strcmp(triSTL,
"TRISTL")==0)importtri=1;
484 if(strcmp(triSTL,
"TRIANGULATION")==0)importtri=2;
485 MG_CG_ASSEMBLAGE* mgcg_assemblage = get_list<MG_CG_ASSEMBLAGE>(ligne,var,lst_mgcg_assemblage);
493 sprintf(message,
" Generation de la triangulation STL de \033[38;5;46m[%s]\033[1;33m : ID = \033[1;31m%li\033[1;33m",var,maillage_stl->
get_id());
496 else if (strcmp(key,
"BREPASSEMBLAGE")==0)
500 sscanf(commande,
"%s %s %s",key,var,nom);
502 sprintf(message,
" Exportation du modele BREP de \033[38;5;46m[%s]\033[1;33m",var);
504 MG_CG_ASSEMBLAGE* mgcg_assemblage = get_list<MG_CG_ASSEMBLAGE>(ligne,var,lst_mgcg_assemblage);
507 sprintf(message,
" Création du fichier \033[1;31m%s\033[1;33m ",nom);
511 else if (strcmp(key,
"ENREGISTRER")==0)
515 sscanf(commande,
"%s %s %s",key,var,nom);
516 affiche((
char*)
" Enregistrement d'un fichier MAGiC");
518 strcat(nom,
".magic");
521 sprintf(message,
" Création du fichier \033[1;31m%s\033[1;33m ",nom);
526 else if (strcmp(key,
"EXPORT_MG_GMSH")==0)
531 sscanf(commande,
"%s %s %s %d",key,var,nom,&num);
532 affiche((
char*)
" Exportation au format GMSH d'un maillage MG");
538 sprintf(message,
" Création du fichier \033[1;31m%s.msh\033[1;33m ",nom);
541 else if (strcmp(key,
"EXPORT_FEM_GMSH")==0)
546 sscanf(commande,
"%s %s %s %d",key,var,nom,&num);
547 affiche((
char*)
" Exportation au format GMSH d'un maillage FEM");
553 sprintf(message,
" Création du fichier \033[1;31m%s.msh\033[1;33m ",nom);
556 else {
char info[5000];sprintf(info,
" %s commande inconnue",commande);
affiche_erreur(info);}
559 fgets(instruction,500,in);
565 affiche((
char*)
"Fin execution");
576 affiche((
char*)
"\033[1;32m************************************************************");
581 sprintf(version+20,
"- CPU ");
582 sprintf(version+40,
"- ECOULE ");
586 sprintf(version,
" Total MAGiC ");
587 sprintf(version+20,
": \033[1;31m%.2lfs\033[1;32m ",tps);
588 sprintf(version+54,
": \033[1;31m%.0lfs\033[1;32m ",ecoule);
593 sprintf(version,
" Total Code Aster : ");
594 sprintf(version+20,
": \033[1;31m%.2lfs\033[1;32m ",
CODE_ASTER_CPU);
600 sprintf(version,
" Total ");
601 sprintf(version+20,
": \033[1;31m%.2lfs\033[1;32m ",
CODE_ASTER_CPU+tps);
604 affiche((
char*)
"************************************************************\033[00m");
609 for (
int i = 0; i < strlen(chaine); i++)
610 chaine[i]=toupper(chaine[i]);
615 std::cout << message << std::endl;