MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mstruct_analyse_mg_maillage.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mstruct_analyse_mg_maillage.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:57 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
23 #include "mstruct_ves.h"
24 #include "mstruct_outils.h"
25 #include "mstruct_definition.h"
26 #include "mg_cg_forme.h"
27 #include "mg_cg_groupe_forme.h"
28 #include "mg_cg_assemblage.h"
29 #include "mg_cg_modele.h"
30 #include "magic_plot.h"
31 #include "ot_mathematique.h"
32 #include <string.h>
33 
35 {
36 }
37 
39  std::string identifiant,
40  long int id_maillage,
41  double largeur_colonne_qualite_2D,
42  double largeur_colonne_taille_2D,
43  double largeur_colonne_qualite_3D,
44  double largeur_colonne_taille_3D,
45  std::string nom_groupe_forme,
46  BOITE_3D *boite_3d): MSTRUCT_ANALYSE(ves,identifiant,nom_groupe_forme,boite_3d)
47 {
48  m_id_maillage=id_maillage;
49  m_2D_qualite_histogramme.fixe_largeur_colonne(largeur_colonne_qualite_2D);
50  m_3D_qualite_histogramme.fixe_largeur_colonne(largeur_colonne_qualite_3D);
51  m_2D_taille_histogramme.fixe_largeur_colonne(largeur_colonne_taille_2D);
52  m_3D_taille_histogramme.fixe_largeur_colonne(largeur_colonne_taille_3D);
53 }
54 
55 
57 {
59  if(cpy_data)
60  {
83  m_volume=mdd.m_volume;
85  }
86  else
87  {
88  m_nb_element_2D=0.0;
89  m_nb_element_3D=0.0;
90  m_2D_qualite_min=0.0;
91  m_2D_qualite_max=0.0;
95  m_3D_qualite_min=0.0;
96  m_3D_qualite_max=0.0;
100  m_2D_taille_min=0.0;
101  m_2D_taille_max=0.0;
105  m_3D_taille_min=0.0;
106  m_3D_taille_max=0.0;
110  m_volume=0.0;
112  }
113 }
114 
116 {
117 
118 }
119 
121 {
122  return m_id_maillage;
123 }
124 
126 {
127  return m_nb_element_2D;
128 }
129 
131 {
132  return m_nb_element_3D;
133 }
134 
136 {
137  return m_2D_qualite_moyenne;
138 }
139 
141 {
143 }
144 
146 {
147  return m_2D_qualite_min;
148 }
149 
151 {
152  return m_2D_qualite_max;
153 }
154 
156 {
157  return &m_2D_qualite_histogramme;
158 }
159 
161 {
162  return m_3D_qualite_moyenne;
163 }
164 
166 {
168 }
169 
171 {
172  return m_3D_qualite_min;
173 }
174 
176 {
177  return m_3D_qualite_max;
178 }
179 
181 {
182  return &m_3D_qualite_histogramme;
183 }
184 
186 {
187  return m_2D_taille_moyenne;
188 }
189 
191 {
192  return m_2D_taille_ecart_type;
193 }
194 
196 {
197  return m_2D_taille_min;
198 }
199 
201 {
202  return m_2D_taille_max;
203 }
204 
206 {
207  return &m_2D_taille_histogramme;
208 }
209 
211 {
212  return m_3D_taille_moyenne;
213 }
214 
216 {
217  return m_3D_taille_ecart_type;
218 }
219 
221 {
222  return m_3D_taille_min;
223 }
224 
226 {
227  return m_3D_taille_max;
228 }
229 
231 {
232  return &m_3D_taille_histogramme;
233 }
234 
236 {
237  return m_volume;
238 }
239 
241 {
242  return m_fraction_volumique;
243 }
244 
246 {
248 }
249 
251 {
252  MG_CG_GROUPE_FORME* groupe_forme=NULL;
254  TPL_MAP_ENTITE<MG_CG_FORME*> tpl_map_forme;
255  if(groupe_forme!=NULL)
256  {
257  std::map<long,MG_CG_FORME*>::iterator it_forme;
258  for(MG_CG_FORME* forme=groupe_forme->get_premiere_mgcg_forme(it_forme);forme!=NULL;forme=groupe_forme->get_suivante_mgcg_forme(it_forme))
259  {
260  tpl_map_forme.ajouter(forme);
261  }
262  }
263  else
264  {
265  std::map<long,MG_CG_FORME*>::iterator it_forme;
267  for(MG_CG_FORME*forme=mgcg_ass->get_premiere_mgcg_forme(it_forme);forme!=NULL;forme=mgcg_ass->get_suivante_mgcg_forme(it_forme))
268  {
269  tpl_map_forme.ajouter(forme);
270  }
271  }
274  tpl_map_forme,
280  m_volume,
282 }
283 
284 void MSTRUCT_ANALYSE_MG_MAILLAGE::exporter(std::ofstream& ofstrm, long i, bool avec_entete, bool avec_graph, char* prefix_graph)
285 {
286  if(avec_entete) ofstrm << "#(1) volume(2) frac_vol(3) nb_ele_2D(4) nb_ele_3D(5) 2D_qualite[moy(6) ±(7) min(8) max(9)] 3D_qualite[moy(10) ±(11) min(12) max(13)] 2D_taille[moy(14) ±(15) min(16) max(17)] 3D_taille[moy(18) ±(19) min(20) max(21)]" << std::endl;
287  ofstrm << i << " "
288  << m_volume << " "
289  << m_fraction_volumique << " "
290  << m_nb_element_2D << " "
291  << m_nb_element_3D << " "
292  << m_2D_qualite_moyenne << " "
293  << m_2D_qualite_ecart_type << " "
294  << m_2D_qualite_min << " "
295  << m_2D_qualite_max << " "
296  << m_3D_qualite_moyenne << " "
297  << m_3D_qualite_ecart_type << " "
298  << m_3D_qualite_min << " "
299  << m_3D_qualite_min << " "
300  << m_2D_taille_moyenne << " "
301  << m_2D_taille_ecart_type << " "
302  << m_2D_taille_min << " "
303  << m_2D_taille_max << " "
304  << m_3D_taille_moyenne << " "
305  << m_3D_taille_ecart_type << " "
306  << m_3D_taille_min << " "
307  << m_3D_taille_max << " "
308  << std::endl;
309  if(avec_graph)
310  {
311  char nom_fichier[500];
312  char nom_plot[500];
313  MAGIC_PLOT magic_plot;
314  sprintf(nom_fichier,"%s/histo_%s_qualite_2D.txt",prefix_graph,m_identifiant.c_str());
315  std::ofstream of_histo_qual_2d(nom_fichier,std::ios::out|std::ios::trunc);
316  of_histo_qual_2d.precision(16);
317  of_histo_qual_2d.setf(std::ios::showpoint);
318  m_2D_qualite_histogramme.exporter(of_histo_qual_2d);
319  of_histo_qual_2d.close();
320  sprintf(nom_plot,"%s/histo_%s_qualite_2D.plt",prefix_graph,m_identifiant.c_str());
321  magic_plot.histogramme_couleur=MAGIC_PLOT::COULEUR::BLEU;
322  magic_plot.histogramme_titre=m_identifiant.c_str();
323  magic_plot.histogramme_axeX_nom="Qualite 2D";
324  magic_plot.histogramme_axeY_nom="";
325  magic_plot.histogramme_nom_fichier_eps=std::string(m_identifiant+".eps").c_str();
326  sprintf(nom_fichier,"histo_%s_qualite_2D.txt",m_identifiant.c_str());
327  magic_plot.plot_script_histogramme(nom_fichier,nom_plot,true);
328 
329  sprintf(nom_fichier,"%s/histo_%s_qualite_3D.txt",prefix_graph,m_identifiant.c_str());
330  std::ofstream of_histo_qual_3d(nom_fichier,std::ios::out|std::ios::trunc);
331  of_histo_qual_3d.precision(16);
332  of_histo_qual_3d.setf(std::ios::showpoint);
333  m_3D_qualite_histogramme.exporter(of_histo_qual_3d);
334  of_histo_qual_3d.close();
335  sprintf(nom_plot,"%s/histo_%s_qualite_3D.plt",prefix_graph,m_identifiant.c_str());
336  magic_plot.histogramme_couleur=MAGIC_PLOT::COULEUR::BLEU;
337  magic_plot.histogramme_titre=m_identifiant.c_str();
338  magic_plot.histogramme_axeX_nom="Qualite 3D";
339  magic_plot.histogramme_axeY_nom="";
340  magic_plot.histogramme_nom_fichier_eps=std::string(m_identifiant+".eps").c_str();
341  sprintf(nom_fichier,"histo_%s_qualite_3D.txt",m_identifiant.c_str());
342  magic_plot.plot_script_histogramme(nom_fichier,nom_plot,true);
343 
344  sprintf(nom_fichier,"%s/histo_%s_taille_2D.txt",prefix_graph,m_identifiant.c_str());
345  std::ofstream of_histo_taille_2d(nom_fichier,std::ios::out|std::ios::trunc);
346  of_histo_taille_2d.precision(16);
347  of_histo_taille_2d.setf(std::ios::showpoint);
348  m_2D_taille_histogramme.exporter(of_histo_taille_2d);
349  of_histo_taille_2d.close();
350  sprintf(nom_plot,"%s/histo_%s_taille_2D.plt",prefix_graph,m_identifiant.c_str());
351  magic_plot.histogramme_couleur=MAGIC_PLOT::COULEUR::BLEU;
352  magic_plot.histogramme_titre=m_identifiant.c_str();
353  magic_plot.histogramme_axeX_nom="Taille 2D";
354  magic_plot.histogramme_axeY_nom="";
355  magic_plot.histogramme_nom_fichier_eps=std::string(m_identifiant+".eps").c_str();
356  sprintf(nom_fichier,"histo_%s_taille_2D.txt",m_identifiant.c_str());
357  magic_plot.plot_script_histogramme(nom_fichier,nom_plot,true);
358 
359  sprintf(nom_fichier,"%s/histo_%s_taille_3D.txt",prefix_graph,m_identifiant.c_str());
360  std::ofstream of_histo_taille_3d(nom_fichier,std::ios::out|std::ios::trunc);
361  of_histo_taille_3d.precision(16);
362  of_histo_taille_3d.setf(std::ios::showpoint);
363  m_3D_taille_histogramme.exporter(of_histo_taille_3d);
364  of_histo_taille_3d.close();
365  sprintf(nom_plot,"%s/histo_%s_taille_3D.plt",prefix_graph,m_identifiant.c_str());
366  magic_plot.histogramme_couleur=MAGIC_PLOT::COULEUR::BLEU;
367  magic_plot.histogramme_titre=m_identifiant.c_str();
368  magic_plot.histogramme_axeX_nom="Taille 3D";
369  magic_plot.histogramme_axeY_nom="";
370  magic_plot.histogramme_nom_fichier_eps=std::string(m_identifiant+".eps").c_str();
371  sprintf(nom_fichier,"histo_%s_taille_3D.txt",m_identifiant.c_str());
372  magic_plot.plot_script_histogramme(nom_fichier,nom_plot,true);
373  }
374 
375 }
376 
377 void MSTRUCT_ANALYSE_MG_MAILLAGE::enregistrer(std::ofstream& ofstrm)
378 {
379  long type_analyse=get_type();
380  ofstrm.write((char*)&type_analyse,sizeof(long));
382  ofstrm.write((char*)&m_id_maillage,sizeof(long));
383 
384  ofstrm.write((char*)&m_nb_element_2D,sizeof(long));
385 
386  ofstrm.write((char*)&m_nb_element_3D,sizeof(long));
387 
388  ofstrm.write((char*)&m_2D_qualite_min,sizeof(double));
389  ofstrm.write((char*)&m_2D_qualite_max,sizeof(double));
390  ofstrm.write((char*)&m_2D_qualite_moyenne,sizeof(double));
391  ofstrm.write((char*)&m_2D_qualite_ecart_type,sizeof(double));
393 
394  ofstrm.write((char*)&m_3D_qualite_min,sizeof(double));
395  ofstrm.write((char*)&m_3D_qualite_max,sizeof(double));
396  ofstrm.write((char*)&m_3D_qualite_moyenne,sizeof(double));
397  ofstrm.write((char*)&m_3D_qualite_ecart_type,sizeof(double));
399 
400  ofstrm.write((char*)&m_2D_taille_min,sizeof(double));
401  ofstrm.write((char*)&m_2D_taille_max,sizeof(double));
402  ofstrm.write((char*)&m_2D_taille_moyenne,sizeof(double));
403  ofstrm.write((char*)&m_2D_taille_ecart_type,sizeof(double));
405 
406  ofstrm.write((char*)&m_3D_taille_min,sizeof(double));
407  ofstrm.write((char*)&m_3D_taille_max,sizeof(double));
408  ofstrm.write((char*)&m_3D_taille_moyenne,sizeof(double));
409  ofstrm.write((char*)&m_3D_taille_ecart_type,sizeof(double));
411 
412  ofstrm.write((char*)&m_volume,sizeof(double));
413 
414  ofstrm.write((char*)&m_fraction_volumique,sizeof(double));
415 
416 }
417 
418 void MSTRUCT_ANALYSE_MG_MAILLAGE::ouvrir(std::ifstream& ifstrm)
419 {
420  MSTRUCT_ANALYSE::ouvrir(ifstrm);
421  ifstrm.read((char*)&m_id_maillage,sizeof(long));
422 
423  ifstrm.read((char*)&m_nb_element_2D,sizeof(long));
424 
425  ifstrm.read((char*)&m_nb_element_3D,sizeof(long));
426 
427  ifstrm.read((char*)&m_2D_qualite_min,sizeof(double));
428  ifstrm.read((char*)&m_2D_qualite_max,sizeof(double));
429  ifstrm.read((char*)&m_2D_qualite_moyenne,sizeof(double));
430  ifstrm.read((char*)&m_2D_qualite_ecart_type,sizeof(double));
432 
433  ifstrm.read((char*)&m_3D_qualite_min,sizeof(double));
434  ifstrm.read((char*)&m_3D_qualite_max,sizeof(double));
435  ifstrm.read((char*)&m_3D_qualite_moyenne,sizeof(double));
436  ifstrm.read((char*)&m_3D_qualite_ecart_type,sizeof(double));
438 
439  ifstrm.read((char*)&m_2D_taille_min,sizeof(double));
440  ifstrm.read((char*)&m_2D_taille_max,sizeof(double));
441  ifstrm.read((char*)&m_2D_taille_moyenne,sizeof(double));
442  ifstrm.read((char*)&m_2D_taille_ecart_type,sizeof(double));
444 
445  ifstrm.read((char*)&m_3D_taille_min,sizeof(double));
446  ifstrm.read((char*)&m_3D_taille_max,sizeof(double));
447  ifstrm.read((char*)&m_3D_taille_moyenne,sizeof(double));
448  ifstrm.read((char*)&m_3D_taille_ecart_type,sizeof(double));
450 
451  ifstrm.read((char*)&m_volume,sizeof(double));
452 
453  ifstrm.read((char*)&m_fraction_volumique,sizeof(double));
454 }
455 
457 {
459  char ligne[5000];
460  sprintf(ligne,"MSTRUCT_ANALYSE_CAO");fonc(ligne);
461  sprintf(ligne,"-> ID MG_MAILLAGE : %li",m_id_maillage);fonc(ligne);
462  sprintf(ligne,"-> Nb element 2D : %li",m_nb_element_2D);fonc(ligne);
463  sprintf(ligne,"-> Nb element 3D : %li",m_nb_element_3D);fonc(ligne);
464 
465  fonc(ligne);
466  sprintf(ligne,"-> Qualite moyenne 2D : %lf",m_2D_qualite_moyenne);fonc(ligne);
467  sprintf(ligne,"-> Qualite ecart_type 2D : %lf",m_2D_qualite_ecart_type);fonc(ligne);
468  sprintf(ligne,"-> Qualite min 2D : %lf",m_2D_qualite_min);fonc(ligne);
469  sprintf(ligne,"-> Qualite max 2D : %lf",m_2D_qualite_max);fonc(ligne);
470  sprintf(ligne,"-> OT_HISTOGRAMME Qualite 2D : nb_colonne(%li), largeur_colonne(%lf), xmin(%lf), xmax(%lf)", m_2D_qualite_histogramme.get_nb_colonne(),
474  fonc(ligne);
475  sprintf(ligne,"-> Qualite moyenne 3D : %lf",m_3D_qualite_moyenne);fonc(ligne);
476  sprintf(ligne,"-> Qualite ecart_type 3D : %lf",m_3D_qualite_ecart_type);fonc(ligne);
477  sprintf(ligne,"-> Qualite min 3D : %lf",m_3D_qualite_min);fonc(ligne);
478  sprintf(ligne,"-> Qualite max 3D : %lf",m_3D_qualite_max);fonc(ligne);
479  sprintf(ligne,"-> OT_HISTOGRAMME Qualite 3D : nb_colonne(%li), largeur_colonne(%lf), xmin(%lf), xmax(%lf)", m_3D_qualite_histogramme.get_nb_colonne(),
483  fonc(ligne);
484  sprintf(ligne,"-> Taille moyenne 2D : %lf",m_2D_taille_moyenne);fonc(ligne);
485  sprintf(ligne,"-> Taille ecart_type 2D : %lf",m_2D_taille_ecart_type);fonc(ligne);
486  sprintf(ligne,"-> Taille min 2D : %lf",m_2D_taille_min);fonc(ligne);
487  sprintf(ligne,"-> Taille max 2D : %lf",m_2D_taille_max);fonc(ligne);
488  sprintf(ligne,"-> OT_HISTOGRAMME Taille 2D : nb_colonne(%li), largeur_colonne(%lf), xmin(%lf), xmax(%lf)", m_2D_taille_histogramme.get_nb_colonne(),
492  fonc(ligne);
493  sprintf(ligne,"-> Taille moyenne 3D : %lf",m_3D_taille_moyenne);fonc(ligne);
494  sprintf(ligne,"-> Taille ecart_type 3D : %lf",m_3D_taille_ecart_type);fonc(ligne);
495  sprintf(ligne,"-> Taille min 3D : %lf",m_3D_taille_min);fonc(ligne);
496  sprintf(ligne,"-> Taille max 3D : %lf",m_3D_taille_max);fonc(ligne);
497  sprintf(ligne,"-> OT_HISTOGRAMME Taille 3D : nb_colonne(%li), largeur_colonne(%lf), xmin(%lf), xmax(%lf)", m_3D_taille_histogramme.get_nb_colonne(),
501  fonc(ligne);
502  sprintf(ligne,"-> Volume : %lf",m_volume); fonc(ligne);
503  fonc(ligne);
504  sprintf(ligne,"-> Fraction volumique : %lf",m_fraction_volumique); fonc(ligne);
505  fonc(ligne);
506 }
std::string histogramme_axeX_nom
Definition: magic_plot.h:55
std::string histogramme_axeY_nom
Definition: magic_plot.h:56
std::string histogramme_titre
Definition: magic_plot.h:53
std::string histogramme_nom_fichier_eps
Definition: magic_plot.h:54
int histogramme_couleur
Definition: magic_plot.h:52
void plot_script_histogramme(std::string data_histogramme, std::string output, bool aveccouleur=false)
Definition: magic_plot.cpp:147
virtual MG_CG_FORME * get_premiere_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
virtual MG_CG_FORME * get_suivante_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
MG_CG_FORME * get_suivante_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
MG_CG_FORME * get_premiere_mgcg_forme(std::map< long, MG_CG_FORME * >::iterator &it)
MG_CG_GROUPE_FORME * get_mgcg_groupe_forme(std::string nom)
virtual void enregistrer(std::ofstream &ofstrm)
virtual void exporter(std::ofstream &ofstrm, long i, bool avec_entete=false, bool avec_graph=false, char *prefix_graph=(char *)"")
virtual void affiche_contenu(fonction_affiche *fonc)
virtual void ouvrir(std::ifstream &ifstrm)
virtual OT_HISTOGRAMME * get_distribution_qualite_3D(void)
virtual OT_HISTOGRAMME * get_distribution_taille_2D(void)
virtual OT_HISTOGRAMME * get_distribution_qualite_2D(void)
virtual OT_HISTOGRAMME * get_distribution_taille_3D(void)
MSTRUCT_VES * m_ves
virtual void affiche_contenu(fonction_affiche *fonc)
std::string m_identifiant
virtual void enregistrer(std::ofstream &ofstrm)
virtual void ouvrir(std::ifstream &ifstrm)
std::string m_nom_groupe_forme
static int statistiques_mg_maillage(BOITE_3D boite_VES, MG_MAILLAGE *mai, TPL_MAP_ENTITE< MG_CG_FORME * > &tpl_map_forme, long &nb_element_2D, long &nb_element_3D, double &qualite_moyenne_2D, double &qualite_ecart_type_2D, double &qualite_min_2D, double &qualite_max_2D, OT_HISTOGRAMME &histogramme_qualite_2D, double &qualite_moyenne_3D, double &qualite_ecart_type_3D, double &qualite_min_3D, double &qualite_max_3D, OT_HISTOGRAMME &histogramme_qualite_3D, double &taille_moyenne_2D, double &taille_ecart_type_2D, double &taille_min_2D, double &taille_max_2D, OT_HISTOGRAMME &histogramme_taille_2D, double &taille_moyenne_3D, double &taille_ecart_type_3D, double &taille_min_3D, double &taille_max_3D, OT_HISTOGRAMME &histogramme_taille_3D, double &volume, double &fraction_volumique)
virtual MG_CG_ASSEMBLAGE * get_mgcg_assemblage(void)
virtual MG_CG_MODELE * get_mgcg_modele(void)
virtual MG_MAILLAGE * get_mg_maillage(void)
virtual BOITE_3D get_boite3d_ves(void)
void ouvrir_bin(std::ifstream &ifstr)
double get_largeur_colonne(void)
double get_x_min(void)
void fixe_largeur_colonne(double largeur_colonne)
void exporter(std::ofstream &ofstrm)
double get_x_max(void)
void enregistrer_bin(std::ofstream &ofstr)
long get_nb_colonne(void)
virtual void ajouter(X x)
void fonction_affiche(char *)
Definition: fct_taille.h:28