ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/mg_geometrie.cpp
Revision: 1075
Committed: Tue Aug 10 17:02:54 2021 UTC (4 years ago) by francois
File size: 75437 byte(s)
Log Message:
suppression de warning avec le dernier compilateur

File Contents

# Content
1 //------------------------------------------------------------
2 //------------------------------------------------------------
3 // MAGiC
4 // Jean Christophe Cuilli�e et Vincent FRANCOIS
5 // D�artement de G�ie M�anique - UQTR
6 //------------------------------------------------------------
7 // Le projet MAGIC est un projet de recherche du d�artement
8 // de g�ie m�anique de l'Universit�du Qu�ec �
9 // Trois Rivi�es
10 // Les librairies ne peuvent �re utilis�s sans l'accord
11 // des auteurs (contact : francois@uqtr.ca)
12 //------------------------------------------------------------
13 //------------------------------------------------------------
14 //
15 // mg_geometrie.cpp
16 //
17 //------------------------------------------------------------
18 //------------------------------------------------------------
19 // COPYRIGHT 2000
20 // Version du 02/03/2006 �11H22
21 //------------------------------------------------------------
22 //------------------------------------------------------------
23
24
25 #include "gestionversion.h"
26 #include <iostream>
27 #include <string.h>
28
29
30 #include "mg_geometrie.h"
31 #include "mg_gestionnaire.h"
32 #include "mg_sommet_noeud.h"
33 #include "occ_fonction.h"
34 #include "occ_fonction_v2015.h"
35 #include "occ_fonction_v2017.h"
36 #include "ot_chaine.h"
37
38
39
40 MG_GEOMETRIE::MG_GEOMETRIE(char *type,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(),gest_materiau(""),valeur_unite(unite),precision(eps)
41 {
42 ini(type,(char*)nom);
43 }
44
45 void MG_GEOMETRIE::ini(char *type,char *nom)
46 {
47 geometrie_construction=false;
48 fonction1=NULL;
49 nom_du_fichier=new char[strlen(nom)+1];
50 strcpy(nom_du_fichier,nom);
51 strcpy(type_geo,type);
52
53 #ifdef BREP_SAT
54 if (strcmp(type_geo,"ACIS")==0)
55 {
56 get_gest_sat().change_nom(nom_du_fichier);
57 get_gest_sat().lire();
58 }
59 #endif
60
61 #ifdef BREP_STEP
62 if (strcmp(type_geo,"STEP")==0)
63 {
64 get_gest_step().change_nom(nom_du_fichier);
65 get_gest_step().lire();
66 }
67 #endif
68
69 #ifdef BREP_OCC
70 if ((strcmp(type_geo,"STEPOCC")==0)||(strcmp(type_geo,"OCC")==0)||((strcmp(type_geo,"OCCV2015")==0))||((strcmp(type_geo,"OCCV2017")==0)))
71 {
72 if (strcmp(type_geo,"OCC")==0) fonction1=new OCC_FONCTION;
73 #ifdef ALL_OCC
74 else if(strcmp(type_geo,"OCCV2017")==0)
75 {
76 fonction1=new OCC_FONCTION_V2017;
77 return;
78 }
79 #endif
80 else fonction1=new OCC_FONCTION_V2015;
81 char path2[500];
82 strcpy(path2,nom_du_fichier);
83 if (strcmp(type_geo,"STEPOCC")==0)
84 {
85 fonction1->OuvrirFichierStep(nom_du_fichier);
86 char *p=strchr(path2,'.')+1;
87 p[0]='b';
88 p[1]='r';
89 p[2]='e';
90 p[3]='p';
91 p[4]=0;
92 fonction1->Sauvegarder(path2);
93 strcpy(nom_du_fichier,path2);
94 strcpy(type_geo,"OCCV2015");
95 }
96 else fonction1->OuvrirFichier(nom_du_fichier);
97 }
98 #endif
99 }
100
101 MG_GEOMETRIE::MG_GEOMETRIE(char *type,unsigned long num,const char *nom,double unite,double eps):MG_IDENTIFICATEUR(num),valeur_unite(unite),precision(eps)
102 {
103 ini(type,(char*)nom);
104 }
105
106
107
108 MG_GEOMETRIE::~MG_GEOMETRIE()
109 {
110 supprimer_tout_mg_volume();
111 supprimer_tout_mg_coquille();
112 supprimer_tout_mg_face();
113 supprimer_tout_mg_boucle();
114 supprimer_tout_mg_arete();
115 supprimer_tout_mg_sommet();
116 supprimer_tout_mg_point();
117 supprimer_tout_mg_courbe();
118 supprimer_tout_mg_surface();
119 supprimer_tout_mg_visu_courbe();
120 supprimer_tout_mg_poutre();
121 supprimer_tout_mg_coque();
122 supprimer_tout_mg_groupe_topologique();
123 supprimer_tout_mg_geom_fonction();
124 #ifdef BREP_OCC
125 if ((strcmp(type_geo,"STEPOCC")==0)||(strcmp(type_geo,"OCC")==0)||((strcmp(type_geo,"OCCV2015")==0))||((strcmp(type_geo,"OCCV2017")==0)))
126 delete fonction1;
127 #endif
128
129 }
130
131
132 void MG_GEOMETRIE::change_gestionnaire(MG_GESTIONNAIRE* mggest)
133 {
134 gest=mggest;
135 }
136
137 // ENTITE MG_POINT
138
139 int MG_GEOMETRIE::ajouter_mg_point(MG_POINT *mgpt)
140 {
141 gest->recherche_bonid(*mgpt);
142 MG_IDENTIFICATEUR *id=mgpt;
143 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
144 if (!p.second)
145 {
146 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
147 return FAIL;
148 }
149
150 std::pair<const unsigned long,MG_POINT*> tmp(mgpt->get_id(),mgpt);
151 lst_mg_point.insert(tmp);
152 return OK;
153 }
154
155
156 MG_POINT* MG_GEOMETRIE::get_mg_pointid(unsigned long num)
157 {
158 LISTE_MG_POINT::iterator i=lst_mg_point.find(num);
159 if (i==lst_mg_point.end())
160 {
161 // afficheur << INEXISTE << enderr;
162 return NULL;
163 }
164 return ((*i).second);
165 }
166
167
168
169 MG_POINT* MG_GEOMETRIE::get_mg_point(unsigned int num)
170 {
171 if (!(num<lst_mg_point.size()))
172 {
173 // afficheur << INEXISTE << enderr;
174 return NULL;
175 }
176 LISTE_MG_POINT::iterator i=lst_mg_point.begin();
177 for (unsigned long j=0;j<num;j++) i++;
178 return ((*i).second);
179 }
180
181
182
183 unsigned int MG_GEOMETRIE::get_nb_mg_point(void)
184 {
185 return lst_mg_point.size();
186 }
187
188
189 int MG_GEOMETRIE::supprimer_mg_pointid(unsigned long num)
190 {
191 MG_POINT* mgpt=get_mg_pointid(num);
192 if (mgpt==NULL)
193 {
194 // afficheur << INEXISTE2 << enderr;
195 return FAIL;
196 }
197 MG_IDENTIFICATEUR* id=mgpt;
198 LISTE_ENTITE::iterator i=lst_entite.find(id);
199 lst_entite.erase(i);
200 LISTE_MG_POINT::iterator j=lst_mg_point.find(num);
201 lst_mg_point.erase(j);
202 delete mgpt;
203 return OK;
204 }
205
206
207 int MG_GEOMETRIE::supprimer_mg_point(unsigned int num)
208 {
209 MG_POINT* mgpt=get_mg_point(num);
210 if (mgpt==NULL)
211 {
212 // afficheur << INEXISTE2 << enderr;
213 return FAIL;
214 }
215 MG_IDENTIFICATEUR* id=mgpt;
216 LISTE_ENTITE::iterator i=lst_entite.find(id);
217 lst_entite.erase(i);
218 LISTE_MG_POINT::iterator j=lst_mg_point.begin();
219 for (unsigned int k=0;k<num;k++) j++;
220 lst_mg_point.erase(j);
221 delete mgpt;
222 return OK;
223 }
224
225
226 void MG_GEOMETRIE::supprimer_tout_mg_point(void)
227 {
228 while (get_nb_mg_point()!=0)
229 {
230 LISTE_MG_POINT::iterator j=lst_mg_point.begin();
231 MG_POINT* mgpt=(*j).second;
232 MG_IDENTIFICATEUR* id=mgpt;
233 LISTE_ENTITE::iterator i=lst_entite.find(id);
234 lst_entite.erase(i);
235 lst_mg_point.erase(j);
236 delete mgpt;
237 }
238 }
239
240 MG_POINT* MG_GEOMETRIE::get_premier_point(LISTE_MG_POINT::iterator &it)
241 {
242 it = lst_mg_point.begin();
243 if (it == lst_mg_point.end())
244 return NULL;
245 return it->second ;
246 }
247
248 MG_POINT* MG_GEOMETRIE::get_suivant_point(LISTE_MG_POINT::iterator &it)
249 {
250 it++;
251 if (it==lst_mg_point.end())
252 return NULL;
253 return it->second;
254 }
255
256
257 // ENTITE MG_COURBE
258
259 int MG_GEOMETRIE::ajouter_mg_courbe(MG_COURBE *mgcrb)
260 {
261 gest->recherche_bonid(*mgcrb);
262 MG_IDENTIFICATEUR *id=mgcrb;
263 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
264 if (!p.second)
265 {
266 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
267 return FAIL;
268 }
269 std::pair<const unsigned long,MG_COURBE*> tmp(mgcrb->get_id(),mgcrb);
270 lst_mg_courbe.insert(tmp);
271 return OK;
272 }
273
274
275 MG_COURBE* MG_GEOMETRIE::get_mg_courbeid(unsigned long num)
276 {
277 LISTE_MG_COURBE::iterator i=lst_mg_courbe.find(num);
278 if (i==lst_mg_courbe.end())
279 {
280 // afficheur << INEXISTE << enderr;
281 return NULL;
282 }
283 return ((*i).second);
284 }
285
286
287
288 MG_COURBE* MG_GEOMETRIE::get_mg_courbe(unsigned int num)
289 {
290 if (!(num<lst_mg_courbe.size()))
291 {
292 // afficheur << INEXISTE << enderr;
293 return NULL;
294 }
295 LISTE_MG_COURBE::iterator i=lst_mg_courbe.begin();
296
297 for (unsigned long j=0;j<num;j++) i++;
298 return ((*i).second);
299 }
300
301
302
303 unsigned int MG_GEOMETRIE::get_nb_mg_courbe(void)
304 {
305 return lst_mg_courbe.size();
306 }
307
308
309 int MG_GEOMETRIE::supprimer_mg_courbeid(unsigned long num)
310 {
311 MG_COURBE* mgcrb=get_mg_courbeid(num);
312 if (mgcrb==NULL)
313 {
314 // afficheur << INEXISTE2 << enderr;
315 return FAIL;
316 }
317 MG_IDENTIFICATEUR* id=mgcrb;
318 LISTE_ENTITE::iterator i=lst_entite.find(id);
319 lst_entite.erase(i);
320 LISTE_MG_COURBE::iterator j=lst_mg_courbe.find(num);
321 lst_mg_courbe.erase(j);
322 delete mgcrb;
323 return OK;
324 }
325
326
327 int MG_GEOMETRIE::supprimer_mg_courbe(unsigned int num)
328 {
329 MG_COURBE* mgcrb=get_mg_courbe(num);
330 if (mgcrb==NULL)
331 {
332 // afficheur << INEXISTE2 << enderr;
333 return FAIL;
334 }
335 MG_IDENTIFICATEUR* id=mgcrb;
336 LISTE_ENTITE::iterator i=lst_entite.find(id);
337 lst_entite.erase(i);
338 LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
339 for (unsigned int k=0;k<num;k++) j++;
340 lst_mg_courbe.erase(j);
341 delete mgcrb;
342 return OK;
343 }
344
345 void MG_GEOMETRIE::supprimer_tout_mg_courbe(void)
346 {
347 while (get_nb_mg_courbe()!=0)
348 {
349 LISTE_MG_COURBE::iterator j=lst_mg_courbe.begin();
350 MG_COURBE* mgcrb=(*j).second;
351 MG_IDENTIFICATEUR* id=mgcrb;
352 LISTE_ENTITE::iterator i=lst_entite.find(id);
353 lst_entite.erase(i);
354 lst_mg_courbe.erase(j);
355 delete mgcrb;
356 }
357 }
358
359 MG_COURBE* MG_GEOMETRIE::get_premier_courbe(LISTE_MG_COURBE::iterator &it)
360 {
361 it = lst_mg_courbe.begin();
362 if (it == lst_mg_courbe.end())
363 return NULL;
364 return it->second ;
365 }
366
367 MG_COURBE* MG_GEOMETRIE::get_suivant_courbe(LISTE_MG_COURBE::iterator &it)
368 {
369 it++;
370 if (it==lst_mg_courbe.end())
371 return NULL;
372 return it->second;
373 }
374
375
376
377
378 // ENTITE MG_SURFACE
379
380 int MG_GEOMETRIE::ajouter_mg_surface(MG_SURFACE *mgsrf)
381 {
382 gest->recherche_bonid(*mgsrf);
383 MG_IDENTIFICATEUR *id=mgsrf;
384 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
385 if (!p.second)
386 {
387 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
388 return FAIL;
389 }
390
391 std::pair<const unsigned long,MG_SURFACE*> tmp(mgsrf->get_id(),mgsrf);
392 lst_mg_surface.insert(tmp);
393 return OK;
394 }
395
396
397 MG_SURFACE* MG_GEOMETRIE::get_mg_surfaceid(unsigned long num)
398 {
399 LISTE_MG_SURFACE::iterator i=lst_mg_surface.find(num);
400 if (i==lst_mg_surface.end())
401 {
402 // afficheur << INEXISTE << enderr;
403 return NULL;
404 }
405 return ((*i).second);
406 }
407
408
409
410 MG_SURFACE* MG_GEOMETRIE::get_mg_surface(unsigned int num)
411 {
412 if (!(num<lst_mg_surface.size()))
413 {
414 // afficheur << INEXISTE << enderr;
415 return NULL;
416 }
417 LISTE_MG_SURFACE::iterator i=lst_mg_surface.begin();
418 for (unsigned long j=0;j<num;j++) i++;
419 return ((*i).second);
420 }
421
422
423
424 unsigned int MG_GEOMETRIE::get_nb_mg_surface(void)
425 {
426 return lst_mg_surface.size();
427 }
428
429
430 int MG_GEOMETRIE::supprimer_mg_surfaceid(unsigned long num)
431 {
432 MG_SURFACE* mgsrf=get_mg_surfaceid(num);
433 if (mgsrf==NULL)
434 {
435 // afficheur << INEXISTE2 << enderr;
436 return FAIL;
437 }
438 MG_IDENTIFICATEUR* id=mgsrf;
439 LISTE_ENTITE::iterator i=lst_entite.find(id);
440 lst_entite.erase(i);
441 LISTE_MG_SURFACE::iterator j=lst_mg_surface.find(num);
442 lst_mg_surface.erase(j);
443 delete mgsrf;
444 return OK;
445 }
446
447
448 int MG_GEOMETRIE::supprimer_mg_surface(unsigned int num)
449 {
450 MG_SURFACE* mgsrf=get_mg_surface(num);
451 if (mgsrf==NULL)
452 {
453 // afficheur << INEXISTE2 << enderr;
454 return FAIL;
455 }
456 MG_IDENTIFICATEUR* id=mgsrf;
457 LISTE_ENTITE::iterator i=lst_entite.find(id);
458 lst_entite.erase(i);
459 LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
460 for (unsigned int k=0;k<num;k++) j++;
461 lst_mg_surface.erase(j);
462 delete mgsrf;
463 return OK;
464 }
465
466
467 void MG_GEOMETRIE::supprimer_tout_mg_surface(void)
468 {
469 while (get_nb_mg_surface()!=0)
470 {
471 LISTE_MG_SURFACE::iterator j=lst_mg_surface.begin();
472 MG_SURFACE* mgsrf=(*j).second;
473 MG_IDENTIFICATEUR* id=mgsrf;
474 LISTE_ENTITE::iterator i=lst_entite.find(id);
475 lst_entite.erase(i);
476 lst_mg_surface.erase(j);
477 delete mgsrf;
478 }
479 }
480
481 MG_SURFACE* MG_GEOMETRIE::get_premier_surface(LISTE_MG_SURFACE::iterator &it)
482 {
483 it = lst_mg_surface.begin();
484 if (it == lst_mg_surface.end())
485 return NULL;
486 return it->second ;
487 }
488
489 MG_SURFACE* MG_GEOMETRIE::get_suivant_surface(LISTE_MG_SURFACE::iterator &it)
490 {
491 it++;
492 if (it==lst_mg_surface.end())
493 return NULL;
494 return it->second;
495 }
496
497
498
499
500 // ENTITE MG_SOMMET
501 MG_SOMMET_NOEUD* MG_GEOMETRIE::ajouter_mg_sommet_noeud(MG_NOEUD *noeud)
502 {
503 MG_SOMMET_NOEUD* somno=new MG_SOMMET_NOEUD(noeud);
504 gest->recherche_bonid(*somno);
505 MG_IDENTIFICATEUR *id=somno;
506 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
507 if (!p.second)
508 {
509 delete somno;
510 return NULL;
511 }
512 std::pair<const unsigned long,MG_SOMMET*> tmp(somno->get_id(),somno);
513 lst_mg_sommet.insert(tmp);
514 return somno;
515 }
516
517 int MG_GEOMETRIE::ajouter_mg_sommet(MG_SOMMET *mgsom)
518 {
519 gest->recherche_bonid(*mgsom);
520 MG_IDENTIFICATEUR *id=mgsom;
521 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
522 if (!p.second)
523 {
524 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
525 return FAIL;
526 }
527
528 std::pair<const unsigned long,MG_SOMMET*> tmp(mgsom->get_id(),mgsom);
529 lst_mg_sommet.insert(tmp);
530 return OK;
531 }
532
533
534 MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(unsigned long num)
535 {
536 LISTE_MG_SOMMET::iterator i=lst_mg_sommet.find(num);
537 if (i==lst_mg_sommet.end())
538 {
539 // afficheur << INEXISTE << enderr;
540 return NULL;
541 }
542 return ((*i).second);
543 }
544
545 MG_SOMMET* MG_GEOMETRIE::get_mg_sommetid(std::string id)
546 {
547 LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
548 int nb=lst_mg_sommet.size();
549 for (int j=0;j<nb;j++)
550 {
551 MG_SOMMET* sommet=(*i).second;
552 std::string idori=sommet->get_idoriginal();
553 if (idori==id) return sommet;
554 i++;
555 }
556 return NULL;
557 }
558
559
560
561 MG_SOMMET* MG_GEOMETRIE::get_mg_sommet(unsigned int num)
562 {
563 if (!(num<lst_mg_sommet.size()))
564 {
565 // afficheur << INEXISTE << enderr;
566 return NULL;
567 }
568 LISTE_MG_SOMMET::iterator i=lst_mg_sommet.begin();
569 for (unsigned long j=0;j<num;j++) i++;
570 return ((*i).second);
571 }
572
573
574
575 unsigned int MG_GEOMETRIE::get_nb_mg_sommet(void)
576 {
577 return lst_mg_sommet.size();
578 }
579
580
581 int MG_GEOMETRIE::supprimer_mg_sommetid(unsigned long num)
582 {
583 MG_SOMMET* mgsom=get_mg_sommetid(num);
584 if (mgsom==NULL)
585 {
586 // afficheur << INEXISTE2 << enderr;
587 return FAIL;
588 }
589 if (mgsom->get_nb_mg_cosommet()!=0)
590 {
591 // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
592 return FAIL;
593 }
594 MG_IDENTIFICATEUR* id=mgsom;
595 LISTE_ENTITE::iterator i=lst_entite.find(id);
596 lst_entite.erase(i);
597 LISTE_MG_SOMMET::iterator j=lst_mg_sommet.find(num);
598 lst_mg_sommet.erase(j);
599 #ifdef ALL_OCC
600 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
601 #endif
602 delete mgsom;
603 return OK;
604 }
605
606
607 int MG_GEOMETRIE::supprimer_mg_sommet(unsigned int num)
608 {
609 MG_SOMMET* mgsom=get_mg_sommet(num);
610 if (mgsom==NULL)
611 {
612 // afficheur << INEXISTE2 << enderr;
613 return FAIL;
614 }
615 if (mgsom->get_nb_mg_cosommet()!=0)
616 {
617 // afficheur << ERRCOSOMMET << mgsom->get_id() << enderr;
618 return FAIL;
619 }
620 MG_IDENTIFICATEUR* id=mgsom;
621 LISTE_ENTITE::iterator i=lst_entite.find(id);
622 lst_entite.erase(i);
623 LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
624 for (unsigned int k=0;k<num;k++) j++;
625 lst_mg_sommet.erase(j);
626 #ifdef ALL_OCC
627 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
628 #endif
629 delete mgsom;
630 return OK;
631 }
632
633
634 void MG_GEOMETRIE::supprimer_tout_mg_sommet(void)
635 {
636 while (get_nb_mg_sommet()!=0)
637 {
638 LISTE_MG_SOMMET::iterator j=lst_mg_sommet.begin();
639 MG_SOMMET* mgsom=(*j).second;
640 MG_IDENTIFICATEUR* id=mgsom;
641 LISTE_ENTITE::iterator i=lst_entite.find(id);
642 lst_entite.erase(i);
643 lst_mg_sommet.erase(j);
644 #ifdef ALL_OCC
645 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_SOMMET((OCC_SOMMET*)mgsom);
646 #endif
647 delete mgsom;
648 }
649 }
650
651 MG_SOMMET* MG_GEOMETRIE::get_premier_sommet(LISTE_MG_SOMMET::iterator &it)
652 {
653 it = lst_mg_sommet.begin();
654 if (it == lst_mg_sommet.end())
655 return NULL;
656 return it->second ;
657 }
658
659 MG_SOMMET* MG_GEOMETRIE::get_suivant_sommet(LISTE_MG_SOMMET::iterator &it)
660 {
661 it++;
662 if (it==lst_mg_sommet.end())
663 return NULL;
664 return it->second;
665 }
666
667
668 // ENTITE MG_COSOMMET
669
670
671 int MG_GEOMETRIE::ajouter_mg_cosommet(MG_COSOMMET* mgcosom)
672 {
673 gest->recherche_bonid(*mgcosom);
674 MG_IDENTIFICATEUR *id=mgcosom;
675 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
676 if (!p.second)
677 {
678 return FAIL;
679 }
680
681 std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
682 lst_mg_cosommet.insert(tmp);
683 return OK;
684 }
685
686 MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(MG_ARETE *mgarete,MG_SOMMET *mgsom)
687 {
688 MG_COSOMMET* mgcosom=new MG_COSOMMET(mgsom,mgarete,precision);
689 gest->recherche_bonid(*mgcosom);
690 MG_IDENTIFICATEUR *id=mgcosom;
691 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
692 if (!p.second)
693 {
694 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
695 delete mgcosom;
696 return NULL;
697 }
698
699 std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
700 lst_mg_cosommet.insert(tmp);
701 mgsom->ajouter_mg_cosommet(mgcosom);
702 return mgcosom;
703 }
704
705 MG_COSOMMET* MG_GEOMETRIE::ajouter_mg_cosommet(unsigned long num,MG_ARETE *mgarete,MG_SOMMET *mgsom)
706 {
707 MG_COSOMMET* mgcosom=new MG_COSOMMET(num,mgsom,mgarete,precision);
708 MG_IDENTIFICATEUR *id=mgcosom;
709 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
710 if (!p.second)
711 {
712 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
713 delete mgcosom;
714 return NULL;
715 }
716
717 std::pair<const unsigned long,MG_COSOMMET*> tmp(mgcosom->get_id(),mgcosom);
718 lst_mg_cosommet.insert(tmp);
719 mgsom->ajouter_mg_cosommet(mgcosom);
720 return mgcosom;
721 }
722
723 int MG_GEOMETRIE::supprimer_mg_cosommet(MG_COSOMMET* mgcosom)
724 {
725 if (mgcosom==NULL)
726 {
727 // afficheur << INEXISTE2 << enderr;
728 return FAIL;
729 }
730 MG_IDENTIFICATEUR* id=mgcosom;
731 LISTE_ENTITE::iterator i=lst_entite.find(id);
732 lst_entite.erase(i);
733 LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(mgcosom->get_id());
734 lst_mg_cosommet.erase(j);
735 mgcosom->get_sommet()->supprimer_mg_cosommet(mgcosom);
736 delete mgcosom;
737 return OK;
738 }
739
740 int MG_GEOMETRIE::supprimer_mg_cosommetid(long int num)
741 {
742 MG_COSOMMET* mgcosommet=get_mg_cosommetid(num);
743 if (mgcosommet==NULL)
744 {
745 return FAIL;
746 }
747 MG_IDENTIFICATEUR* id=mgcosommet;
748 LISTE_ENTITE::iterator i=lst_entite.find(id);
749 lst_entite.erase(i);
750 LISTE_MG_COSOMMET::iterator j=lst_mg_cosommet.find(num);
751 lst_mg_cosommet.erase(j);
752 mgcosommet->get_sommet()->supprimer_mg_cosommet(mgcosommet);
753 delete mgcosommet;
754 return OK;
755 }
756
757
758 unsigned int MG_GEOMETRIE::get_nb_cosommet(void)
759 {
760 return lst_mg_cosommet.size();
761 }
762
763 MG_COSOMMET* MG_GEOMETRIE::get_premier_cosommet(LISTE_MG_COSOMMET::iterator& it)
764 {
765 it=lst_mg_cosommet.begin();
766 if(it==lst_mg_cosommet.end()) return NULL;
767 return it->second;
768 }
769
770 MG_COSOMMET* MG_GEOMETRIE::get_suivant_cosommet(LISTE_MG_COSOMMET::iterator& it)
771 {
772 it++;
773 if(it==lst_mg_cosommet.end()) return NULL;
774 return it->second;
775 }
776
777 MG_COSOMMET* MG_GEOMETRIE::get_mg_cosommetid(long num)
778 {
779 LISTE_MG_COSOMMET::iterator i=lst_mg_cosommet.find(num);
780 if (i==lst_mg_cosommet.end())
781 {
782 return NULL;
783 }
784 return ((*i).second);
785 }
786
787
788
789 // ENTITE MG_ARETE
790
791 int MG_GEOMETRIE::ajouter_mg_arete(MG_ARETE *mgarete)
792 {
793 gest->recherche_bonid(*mgarete);
794 MG_IDENTIFICATEUR *id=mgarete;
795 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
796 if (!p.second)
797 {
798 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
799 return FAIL;
800 }
801
802 std::pair<const unsigned long,MG_ARETE*> tmp(mgarete->get_id(),mgarete);
803 lst_mg_arete.insert(tmp);
804 return OK;
805 }
806
807
808 MG_ARETE* MG_GEOMETRIE::get_mg_areteid(unsigned long num)
809 {
810 LISTE_MG_ARETE::iterator i=lst_mg_arete.find(num);
811 if (i==lst_mg_arete.end())
812 {
813 // afficheur << INEXISTE << enderr;
814 return NULL;
815 }
816 return ((*i).second);
817 }
818
819 MG_ARETE* MG_GEOMETRIE::get_mg_areteid(std::string id)
820 {
821 LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
822 int nb=lst_mg_arete.size();
823 for (int j=0;j<nb;j++)
824 {
825 MG_ARETE* arete=(*i).second;
826 std::string idori=arete->get_idoriginal();
827 if (idori==id) return arete;
828 i++;
829 }
830 return NULL;
831 }
832
833
834 MG_ARETE* MG_GEOMETRIE::get_mg_arete(unsigned int num)
835 {
836 if (!(num<lst_mg_arete.size()))
837 {
838 // afficheur << INEXISTE << enderr;
839 return NULL;
840 }
841 LISTE_MG_ARETE::iterator i=lst_mg_arete.begin();
842 for (unsigned long j=0;j<num;j++) i++;
843 return ((*i).second);
844 }
845
846
847
848 unsigned int MG_GEOMETRIE::get_nb_mg_arete(void)
849 {
850 return lst_mg_arete.size();
851 }
852
853
854 int MG_GEOMETRIE::supprimer_mg_areteid(unsigned long num)
855 {
856 MG_ARETE* mgarete=get_mg_areteid(num);
857 if (mgarete==NULL)
858 {
859 // afficheur << INEXISTE2 << enderr;
860 return FAIL;
861 }
862 if (mgarete->get_nb_mg_coarete()!=0)
863 {
864 // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
865 return FAIL;
866 }
867 MG_IDENTIFICATEUR* id=mgarete;
868 LISTE_ENTITE::iterator i=lst_entite.find(id);
869 lst_entite.erase(i);
870 LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
871 lst_mg_arete.erase(j);
872 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
873 MG_COSOMMET* cosom2=mgarete->get_cosommet2();
874 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
875 cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
876 supprimer_mg_cosommet(cosom1);
877 supprimer_mg_cosommet(cosom2);
878 #ifdef ALL_OCC
879 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
880 #endif
881 delete mgarete;
882 return OK;
883 }
884
885
886 int MG_GEOMETRIE::supprimer_mg_arete(unsigned int num)
887 {
888 MG_ARETE* mgarete=get_mg_arete(num);
889 if (mgarete==NULL)
890 {
891 // afficheur << INEXISTE2 << enderr;
892 return FAIL;
893 }
894 if (mgarete->get_nb_mg_coarete()!=0)
895 {
896 // afficheur << ERRCOARETE << mgarete->get_id() << enderr;
897 return FAIL;
898 }
899 MG_IDENTIFICATEUR* id=mgarete;
900 LISTE_ENTITE::iterator i=lst_entite.find(id);
901 lst_entite.erase(i);
902 LISTE_MG_ARETE::iterator j=lst_mg_arete.find(num);
903 lst_mg_arete.erase(j);
904 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
905 MG_COSOMMET* cosom2=mgarete->get_cosommet2();
906 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
907 cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
908 supprimer_mg_cosommet(cosom1);
909 supprimer_mg_cosommet(cosom2);
910
911 #ifdef ALL_OCC
912 if(strcmp(type_geo,"OCCV2017")) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
913 #endif
914 delete mgarete;
915 return OK;
916 }
917
918
919 void MG_GEOMETRIE::supprimer_tout_mg_arete(void)
920 {
921 while (get_nb_mg_arete()!=0)
922 {
923 LISTE_MG_ARETE::iterator j=lst_mg_arete.begin();
924 MG_ARETE* mgarete=(*j).second;
925 MG_IDENTIFICATEUR* id=mgarete;
926 LISTE_ENTITE::iterator i=lst_entite.find(id);
927 lst_entite.erase(i);
928 lst_mg_arete.erase(j);
929 if (!mgarete->est_une_arete_element())
930 {
931
932 MG_COSOMMET* cosom1=mgarete->get_cosommet1();
933 MG_COSOMMET* cosom2=mgarete->get_cosommet2();
934 cosom1->get_sommet()->supprimer_mg_cosommet(cosom1);
935 cosom2->get_sommet()->supprimer_mg_cosommet(cosom2);
936 supprimer_mg_cosommet(cosom1);
937 supprimer_mg_cosommet(cosom2);
938 #ifdef ALL_OCC
939 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_ARETE((OCC_ARETE*)mgarete);
940 #endif
941 delete mgarete;
942 }
943 }
944 }
945
946 MG_ARETE* MG_GEOMETRIE::get_premier_arete(LISTE_MG_ARETE::iterator &it)
947 {
948 it = lst_mg_arete.begin();
949 if (it == lst_mg_arete.end())
950 return NULL;
951 return it->second ;
952 }
953
954 MG_ARETE* MG_GEOMETRIE::get_suivant_arete(LISTE_MG_ARETE::iterator &it)
955 {
956 it++;
957 if (it==lst_mg_arete.end())
958 return NULL;
959 return it->second;
960 }
961
962
963 // ENTITE MG_COARETE
964
965 int MG_GEOMETRIE::ajouter_mg_coarete(MG_COARETE* mgcoarete)
966 {
967 gest->recherche_bonid(*mgcoarete);
968 MG_IDENTIFICATEUR *id=mgcoarete;
969 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
970 if (!p.second)
971 {
972 return FAIL;
973 }
974 std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
975 lst_mg_coarete.insert(tmp);
976 return OK;
977 }
978
979
980 MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
981 {
982 MG_COARETE* mgcoarete=new MG_COARETE(mgarete,mgboucle,sens);
983 gest->recherche_bonid(*mgcoarete);
984 MG_IDENTIFICATEUR *id=mgcoarete;
985 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
986 if (!p.second)
987 {
988 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
989 delete mgcoarete;
990 return NULL;
991 }
992
993 std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
994 lst_mg_coarete.insert(tmp);
995 mgarete->ajouter_mg_coarete(mgcoarete);
996 return mgcoarete;
997 }
998
999
1000 MG_COARETE* MG_GEOMETRIE::ajouter_mg_coarete(unsigned long num,MG_ARETE *mgarete,MG_BOUCLE *mgboucle,int sens)
1001 {
1002 MG_COARETE* mgcoarete=new MG_COARETE(num,mgarete,mgboucle,sens);
1003 MG_IDENTIFICATEUR *id=mgcoarete;
1004 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1005 if (!p.second)
1006 {
1007 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1008 delete mgcoarete;
1009 return NULL;
1010 }
1011
1012 std::pair<const unsigned long,MG_COARETE*> tmp(mgcoarete->get_id(),mgcoarete);
1013 lst_mg_coarete.insert(tmp);
1014 mgarete->ajouter_mg_coarete(mgcoarete);
1015 return mgcoarete;
1016 }
1017
1018 int MG_GEOMETRIE::supprimer_mg_coarete(MG_COARETE* mgcoarete)
1019 {
1020 if (mgcoarete==NULL)
1021 {
1022 // afficheur << INEXISTE2 << enderr;
1023 return FAIL;
1024 }
1025 MG_IDENTIFICATEUR* id=mgcoarete;
1026 LISTE_ENTITE::iterator i=lst_entite.find(id);
1027 lst_entite.erase(i);
1028 LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(mgcoarete->get_id());
1029 lst_mg_coarete.erase(j);
1030 mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
1031 delete mgcoarete;
1032 return OK;
1033 }
1034
1035 int MG_GEOMETRIE::supprimer_mg_coareteid(long int num)
1036 {
1037 MG_COARETE* mgcoarete=get_mg_coareteid(num);
1038 if (mgcoarete==NULL)
1039 {
1040 return FAIL;
1041 }
1042 MG_IDENTIFICATEUR* id=mgcoarete;
1043 LISTE_ENTITE::iterator i=lst_entite.find(id);
1044 lst_entite.erase(i);
1045 LISTE_MG_COARETE::iterator j=lst_mg_coarete.find(num);
1046 lst_mg_coarete.erase(j);
1047 mgcoarete->get_arete()->supprimer_mg_coarete(mgcoarete);
1048 delete mgcoarete;
1049 return OK;
1050 }
1051
1052
1053 unsigned int MG_GEOMETRIE::get_nb_coarete(void)
1054 {
1055 return lst_mg_coarete.size();
1056 }
1057
1058 MG_COARETE* MG_GEOMETRIE::get_premier_coarete(LISTE_MG_COARETE::iterator& it)
1059 {
1060 it=lst_mg_coarete.begin();
1061 if(it==lst_mg_coarete.end()) return NULL;
1062 return it->second;
1063 }
1064
1065 MG_COARETE* MG_GEOMETRIE::get_suivant_coarete(LISTE_MG_COARETE::iterator& it)
1066 {
1067 it++;
1068 if(it==lst_mg_coarete.end()) return NULL;
1069 return it->second;
1070 }
1071
1072 MG_COARETE* MG_GEOMETRIE::get_mg_coareteid(long num)
1073 {
1074 LISTE_MG_COARETE::iterator i=lst_mg_coarete.find(num);
1075 if (i==lst_mg_coarete.end())
1076 {
1077 return NULL;
1078 }
1079 return ((*i).second);
1080 }
1081
1082
1083 // ENTITE MG_BOUCLE
1084
1085 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE* mgboucle)
1086 {
1087 gest->recherche_bonid(*mgboucle);
1088 MG_IDENTIFICATEUR *id=mgboucle;
1089 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1090 if (!p.second)
1091 {
1092 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1093 return FAIL;
1094 }
1095 std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1096 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1097 return OK;
1098 }
1099
1100 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_POUTRE* mgpoutre)
1101 {
1102 gest->recherche_bonid(*mgboucle);
1103 MG_IDENTIFICATEUR *id=mgboucle;
1104 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1105 if (!p.second)
1106 {
1107 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1108 return FAIL;
1109 }
1110
1111 std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1112 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1113 if(p2.second) mgpoutre->ajouter_mg_boucle(mgboucle);
1114 return OK;
1115 }
1116
1117 int MG_GEOMETRIE::ajouter_mg_boucle(MG_BOUCLE *mgboucle,MG_FACE* mgface)
1118 {
1119 gest->recherche_bonid(*mgboucle);
1120 MG_IDENTIFICATEUR *id=mgboucle;
1121 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1122 if (!p.second)
1123 {
1124 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1125 return FAIL;
1126 }
1127
1128 std::pair<const unsigned long,MG_BOUCLE*> tmp(mgboucle->get_id(),mgboucle);
1129 std::pair<LISTE_MG_BOUCLE::iterator,bool> p2 = lst_mg_boucle.insert(tmp);
1130 if(p2.second) mgface->ajouter_mg_boucle(mgboucle);
1131 return OK;
1132 }
1133
1134
1135 MG_BOUCLE* MG_GEOMETRIE::get_mg_boucleid(unsigned long num)
1136 {
1137 LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.find(num);
1138 if (i==lst_mg_boucle.end())
1139 {
1140 // afficheur << INEXISTE << enderr;
1141 return NULL;
1142 }
1143 return ((*i).second);
1144 }
1145
1146
1147
1148 MG_BOUCLE* MG_GEOMETRIE::get_mg_boucle(unsigned int num)
1149 {
1150 if (!(num<lst_mg_boucle.size()))
1151 {
1152 // afficheur << INEXISTE << enderr;
1153 return NULL;
1154 }
1155 LISTE_MG_BOUCLE::iterator i=lst_mg_boucle.begin();
1156 for (unsigned long j=0;j<num;j++) i++;
1157 return ((*i).second);
1158 }
1159
1160
1161
1162 unsigned int MG_GEOMETRIE::get_nb_mg_boucle(void)
1163 {
1164 return lst_mg_boucle.size();
1165 }
1166
1167
1168 int MG_GEOMETRIE::supprimer_mg_boucleid(unsigned long num)
1169 {
1170 MG_BOUCLE* mgboucle=get_mg_boucleid(num);
1171 if (mgboucle==NULL)
1172 {
1173 // afficheur << INEXISTE2 << enderr;
1174 return FAIL;
1175 }
1176 MG_IDENTIFICATEUR* id=mgboucle;
1177 LISTE_ENTITE::iterator i=lst_entite.find(id);
1178 lst_entite.erase(i);
1179 LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.find(num);
1180 lst_mg_boucle.erase(j);
1181 for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1182 {
1183 MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1184 supprimer_mg_coarete(coarete);
1185 }
1186 #ifdef ALL_OCC
1187 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1188 #endif
1189 delete mgboucle;
1190 return OK;
1191 }
1192
1193
1194 int MG_GEOMETRIE::supprimer_mg_boucle(unsigned int num)
1195 {
1196 MG_BOUCLE* mgboucle=get_mg_boucle(num);
1197 if (mgboucle==NULL)
1198 {
1199 // afficheur << INEXISTE2 << enderr;
1200 return FAIL;
1201 }
1202 MG_IDENTIFICATEUR* id=mgboucle;
1203 LISTE_ENTITE::iterator i=lst_entite.find(id);
1204 lst_entite.erase(i);
1205 LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1206 for (unsigned int k=0;k<num;k++) j++;
1207 lst_mg_boucle.erase(j);
1208 for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1209 {
1210 MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1211 supprimer_mg_coarete(coarete);
1212 }
1213 #ifdef ALL_OCC
1214 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1215 #endif
1216 delete mgboucle;
1217 return OK;
1218 }
1219
1220
1221 void MG_GEOMETRIE::supprimer_tout_mg_boucle(void)
1222 {
1223 while (get_nb_mg_boucle()!=0)
1224 {
1225 LISTE_MG_BOUCLE::iterator j=lst_mg_boucle.begin();
1226 MG_BOUCLE* mgboucle=(*j).second;
1227 MG_IDENTIFICATEUR* id=mgboucle;
1228 LISTE_ENTITE::iterator i=lst_entite.find(id);
1229 lst_entite.erase(i);
1230 lst_mg_boucle.erase(j);
1231 for (int k=0;k<mgboucle->get_nb_mg_coarete();k++)
1232 {
1233 MG_COARETE* coarete=mgboucle->get_mg_coarete(k);
1234 supprimer_mg_coarete(coarete);
1235 }
1236 #ifdef ALL_OCC
1237 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_BOUCLE((OCC_BOUCLE*)mgboucle);
1238 #endif
1239 delete mgboucle;
1240 }
1241 }
1242
1243 MG_BOUCLE* MG_GEOMETRIE::get_premier_boucle(LISTE_MG_BOUCLE::iterator &it)
1244 {
1245 it = lst_mg_boucle.begin();
1246 if (it == lst_mg_boucle.end())
1247 return NULL;
1248 return it->second ;
1249 }
1250
1251 MG_BOUCLE* MG_GEOMETRIE::get_suivant_boucle(LISTE_MG_BOUCLE::iterator &it)
1252 {
1253 it++;
1254 if (it==lst_mg_boucle.end())
1255 return NULL;
1256 return it->second;
1257 }
1258
1259
1260 // ENTITE MG_FACE
1261
1262 int MG_GEOMETRIE::ajouter_mg_face(MG_FACE *mgface)
1263 {
1264 gest->recherche_bonid(*mgface);
1265 MG_IDENTIFICATEUR *id=mgface;
1266 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1267 if (!p.second)
1268 {
1269 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1270 return FAIL;
1271 }
1272
1273 std::pair<const unsigned long,MG_FACE*> tmp(mgface->get_id(),mgface);
1274 lst_mg_face.insert(tmp);
1275 return OK;
1276 }
1277
1278
1279 MG_FACE* MG_GEOMETRIE::get_mg_faceid(unsigned long num)
1280 {
1281 LISTE_MG_FACE::iterator i=lst_mg_face.find(num);
1282 if (i==lst_mg_face.end())
1283 {
1284 // afficheur << INEXISTE << enderr;
1285 return NULL;
1286 }
1287 return ((*i).second);
1288 }
1289
1290 MG_FACE* MG_GEOMETRIE::get_mg_faceid(std::string id)
1291 {
1292 LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1293 int nb=lst_mg_face.size();
1294 for (int j=0;j<nb;j++)
1295 {
1296 MG_FACE* face=(*i).second;
1297 std::string idori=face->get_idoriginal();
1298 if (idori==id) return face;
1299 i++;
1300 }
1301 return NULL;
1302 }
1303
1304
1305 MG_FACE* MG_GEOMETRIE::get_mg_face(unsigned int num)
1306 {
1307 if (!(num<lst_mg_face.size()))
1308 {
1309 // afficheur << INEXISTE << enderr;
1310 return NULL;
1311 }
1312 LISTE_MG_FACE::iterator i=lst_mg_face.begin();
1313 for (unsigned long j=0;j<num;j++) i++;
1314 return ((*i).second);
1315 }
1316
1317
1318
1319 unsigned int MG_GEOMETRIE::get_nb_mg_face(void)
1320 {
1321 return lst_mg_face.size();
1322 }
1323
1324
1325 int MG_GEOMETRIE::supprimer_mg_faceid(unsigned long num)
1326 {
1327 MG_FACE* mgface=get_mg_faceid(num);
1328 if (mgface==NULL)
1329 {
1330 // afficheur << INEXISTE2 << enderr;
1331 return FAIL;
1332 }
1333 if (mgface->get_nb_mg_coface()!=0)
1334 {
1335 // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1336 std::cerr << "ERRCOFACE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << std::endl;
1337 return FAIL;
1338 }
1339 MG_IDENTIFICATEUR* id=mgface;
1340 LISTE_ENTITE::iterator i=lst_entite.find(id);
1341 lst_entite.erase(i);
1342 LISTE_MG_FACE::iterator j=lst_mg_face.find(num);
1343 lst_mg_face.erase(j);
1344 #ifdef ALL_OCC
1345 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1346 #endif
1347 delete mgface;
1348 return OK;
1349 }
1350
1351
1352 int MG_GEOMETRIE::supprimer_mg_face(unsigned int num)
1353 {
1354 MG_FACE* mgface=get_mg_face(num);
1355 if (mgface==NULL)
1356 {
1357 // afficheur << INEXISTE2 << enderr;
1358 return FAIL;
1359 }
1360 if (mgface->get_nb_mg_coface()!=0)
1361 {
1362 // afficheur << ERRCOFACE << mgface->get_id() << enderr;
1363 return FAIL;
1364 }
1365 MG_IDENTIFICATEUR* id=mgface;
1366 LISTE_ENTITE::iterator i=lst_entite.find(id);
1367 lst_entite.erase(i);
1368 LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1369 for (unsigned int k=0;k<num;k++) j++;
1370 lst_mg_face.erase(j);
1371 #ifdef ALL_OCC
1372 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1373 #endif
1374 delete mgface;
1375 return OK;
1376 }
1377
1378
1379 void MG_GEOMETRIE::supprimer_tout_mg_face(void)
1380 {
1381
1382 while (get_nb_mg_face()!=0)
1383 {
1384 LISTE_MG_FACE::iterator j=lst_mg_face.begin();
1385 MG_FACE* mgface=(*j).second;
1386 MG_IDENTIFICATEUR* id=mgface;
1387 LISTE_ENTITE::iterator i=lst_entite.find(id);
1388 lst_entite.erase(i);
1389 lst_mg_face.erase(j);
1390 #ifdef ALL_OCC
1391 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_FACE((OCC_FACE*)mgface);
1392 #endif
1393 delete mgface;
1394 }
1395 }
1396
1397 MG_FACE* MG_GEOMETRIE::get_premier_face(LISTE_MG_FACE::iterator &it)
1398 {
1399 it = lst_mg_face.begin();
1400 if (it == lst_mg_face.end())
1401 return NULL;
1402 return it->second ;
1403 }
1404
1405 MG_FACE* MG_GEOMETRIE::get_suivant_face(LISTE_MG_FACE::iterator &it)
1406 {
1407 it++;
1408 if (it==lst_mg_face.end())
1409 return NULL;
1410 return it->second;
1411 }
1412
1413
1414 // ENTITE MG_COFACE
1415
1416 int MG_GEOMETRIE::ajouter_mg_coface(MG_COFACE* mgcoface)
1417 {
1418 gest->recherche_bonid(*mgcoface);
1419 MG_IDENTIFICATEUR *id=mgcoface;
1420 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1421 if (!p.second)
1422 {
1423 return FAIL;
1424 }
1425
1426 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1427 lst_mg_coface.insert(tmp);
1428 return OK;
1429 }
1430
1431 MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1432 {
1433 MG_COFACE* mgcoface=new MG_COFACE(mgface,mgcoq,sens);
1434 gest->recherche_bonid(*mgcoface);
1435 MG_IDENTIFICATEUR *id=mgcoface;
1436 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1437 if (!p.second)
1438 {
1439 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1440 delete mgcoface;
1441 return NULL;
1442 }
1443
1444 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1445 lst_mg_coface.insert(tmp);
1446 mgface->ajouter_mg_coface(mgcoface);
1447 return mgcoface;
1448 }
1449
1450
1451 MG_COFACE* MG_GEOMETRIE::ajouter_mg_coface(unsigned long num,MG_FACE *mgface,MG_COQUILLE *mgcoq,int sens)
1452 {
1453 MG_COFACE* mgcoface=new MG_COFACE(num,mgface,mgcoq,sens);
1454 MG_IDENTIFICATEUR *id=mgcoface;
1455 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1456 if (!p.second)
1457 {
1458 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1459 delete mgcoface;
1460 return NULL;
1461 }
1462
1463 std::pair<const unsigned long,MG_COFACE*> tmp(mgcoface->get_id(),mgcoface);
1464 lst_mg_coface.insert(tmp);
1465 mgface->ajouter_mg_coface(mgcoface);
1466 return mgcoface;
1467 }
1468
1469 int MG_GEOMETRIE::supprimer_mg_coface(MG_COFACE* mgcoface)
1470 {
1471 if (mgcoface==NULL)
1472 {
1473 // afficheur << INEXISTE2 << enderr;
1474 return FAIL;
1475 }
1476 MG_IDENTIFICATEUR* id=mgcoface;
1477 LISTE_ENTITE::iterator i=lst_entite.find(id);
1478 lst_entite.erase(i);
1479 LISTE_MG_COFACE::iterator j=lst_mg_coface.find(mgcoface->get_id());
1480 lst_mg_coface.erase(j);
1481 mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1482 delete mgcoface;
1483 return OK;
1484 }
1485
1486 int MG_GEOMETRIE::supprimer_mg_cofaceid(long int num)
1487 {
1488 MG_COFACE* mgcoface=get_mg_cofaceid(num);
1489 if (mgcoface==NULL)
1490 {
1491 return FAIL;
1492 }
1493 MG_IDENTIFICATEUR* id=mgcoface;
1494 LISTE_ENTITE::iterator i=lst_entite.find(id);
1495 lst_entite.erase(i);
1496 LISTE_MG_COFACE::iterator j=lst_mg_coface.find(num);
1497 lst_mg_coface.erase(j);
1498 mgcoface->get_face()->supprimer_mg_coface(mgcoface);
1499 delete mgcoface;
1500 return OK;
1501 }
1502
1503
1504 unsigned int MG_GEOMETRIE::get_nb_coface(void)
1505 {
1506 return lst_mg_coface.size();
1507 }
1508
1509 MG_COFACE* MG_GEOMETRIE::get_premier_coface(LISTE_MG_COFACE::iterator& it)
1510 {
1511 it=lst_mg_coface.begin();
1512 if(it==lst_mg_coface.end()) return NULL;
1513 return it->second;
1514 }
1515
1516 MG_COFACE* MG_GEOMETRIE::get_suivant_coface(LISTE_MG_COFACE::iterator& it)
1517 {
1518 it++;
1519 if(it==lst_mg_coface.end()) return NULL;
1520 return it->second;
1521 }
1522
1523 MG_COFACE* MG_GEOMETRIE::get_mg_cofaceid(long num)
1524 {
1525 LISTE_MG_COFACE::iterator i=lst_mg_coface.find(num);
1526 if (i==lst_mg_coface.end())
1527 {
1528 return NULL;
1529 }
1530 return ((*i).second);
1531 }
1532
1533
1534
1535 // ENTITE MG_COQUILLE
1536
1537 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE* mgcoq)
1538 {
1539 gest->recherche_bonid(*mgcoq);
1540 MG_IDENTIFICATEUR *id=mgcoq;
1541 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1542 if (!p.second)
1543 {
1544 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1545 return FAIL;
1546 }
1547 std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1548 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1549 return OK;
1550 }
1551
1552 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoq,MG_COQUE *mgcoque)
1553 {
1554 gest->recherche_bonid(*mgcoq);
1555 MG_IDENTIFICATEUR *id=mgcoq;
1556 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1557 if (!p.second)
1558 {
1559 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1560 return FAIL;
1561 }
1562
1563 std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoq->get_id(),mgcoq);
1564 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1565 if(p2.second) mgcoque->ajouter_mg_coquille(mgcoq);
1566 return OK;
1567 }
1568
1569
1570 int MG_GEOMETRIE::ajouter_mg_coquille(MG_COQUILLE *mgcoquille,MG_VOLUME* mgvolume)
1571 {
1572 gest->recherche_bonid(*mgcoquille);
1573 MG_IDENTIFICATEUR *id=mgcoquille;
1574 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1575 if (!p.second)
1576 {
1577 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1578 return FAIL;
1579 }
1580
1581 std::pair<const unsigned long,MG_COQUILLE*> tmp(mgcoquille->get_id(),mgcoquille);
1582 std::pair<LISTE_MG_COQUILLE::iterator,bool> p2 = lst_mg_coquille.insert(tmp);
1583 if(p2.second) mgvolume->ajouter_mg_coquille(mgcoquille);
1584 return OK;
1585 }
1586
1587
1588 MG_COQUILLE* MG_GEOMETRIE::get_mg_coquilleid(unsigned long num)
1589 {
1590 LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.find(num);
1591 if (i==lst_mg_coquille.end())
1592 {
1593 // afficheur << INEXISTE << enderr;
1594 return NULL;
1595 }
1596 return ((*i).second);
1597 }
1598
1599
1600
1601 MG_COQUILLE* MG_GEOMETRIE::get_mg_coquille(unsigned int num)
1602 {
1603 if (!(num<lst_mg_coquille.size()))
1604 {
1605 // afficheur << INEXISTE << enderr;
1606 return NULL;
1607 }
1608 LISTE_MG_COQUILLE::iterator i=lst_mg_coquille.begin();
1609 for (unsigned long j=0;j<num;j++) i++;
1610 return ((*i).second);
1611 }
1612
1613 MG_COQUILLE* MG_GEOMETRIE::get_premier_coquille(LISTE_MG_COQUILLE::iterator &it)
1614 {
1615 it = lst_mg_coquille.begin();
1616 if (it == lst_mg_coquille.end())
1617 return NULL;
1618 return it->second ;
1619 }
1620
1621 MG_COQUILLE* MG_GEOMETRIE::get_suivant_coquille(LISTE_MG_COQUILLE::iterator &it)
1622 {
1623 it++;
1624 if (it==lst_mg_coquille.end())
1625 return NULL;
1626 return it->second;
1627 }
1628
1629
1630 unsigned int MG_GEOMETRIE::get_nb_mg_coquille(void)
1631 {
1632 return lst_mg_coquille.size();
1633 }
1634
1635
1636 int MG_GEOMETRIE::supprimer_mg_coquilleid(unsigned long num)
1637 {
1638 MG_COQUILLE* mgcoquille=get_mg_coquilleid(num);
1639 if (mgcoquille==NULL)
1640 {
1641 // afficheur << INEXISTE2 << enderr;
1642 return FAIL;
1643 }
1644 MG_IDENTIFICATEUR* id=mgcoquille;
1645 LISTE_ENTITE::iterator i=lst_entite.find(id);
1646 lst_entite.erase(i);
1647 LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.find(num);
1648 lst_mg_coquille.erase(j);
1649 for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1650 {
1651 MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1652 supprimer_mg_coface(coface);
1653 }
1654 #ifdef ALL_OCC
1655 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1656 #endif
1657 delete mgcoquille;
1658 return OK;
1659 }
1660
1661
1662 int MG_GEOMETRIE::supprimer_mg_coquille(unsigned int num)
1663 {
1664 MG_COQUILLE* mgcoquille=get_mg_coquille(num);
1665 if (mgcoquille==NULL)
1666 {
1667 // afficheur << INEXISTE2 << enderr;
1668 return FAIL;
1669 }
1670 MG_IDENTIFICATEUR* id=mgcoquille;
1671 LISTE_ENTITE::iterator i=lst_entite.find(id);
1672 lst_entite.erase(i);
1673 LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1674 for (unsigned int k=0;k<num;k++) j++;
1675 lst_mg_coquille.erase(j);
1676 for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1677 {
1678 MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1679 supprimer_mg_coface(coface);
1680 }
1681 #ifdef ALL_OCC
1682 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1683 #endif
1684 delete mgcoquille;
1685 return OK;
1686 }
1687
1688
1689 void MG_GEOMETRIE::supprimer_tout_mg_coquille(void)
1690 {
1691 while (get_nb_mg_coquille()!=0)
1692 {
1693 LISTE_MG_COQUILLE::iterator j=lst_mg_coquille.begin();
1694 MG_COQUILLE* mgcoquille=(*j).second;
1695 MG_IDENTIFICATEUR* id=mgcoquille;
1696 LISTE_ENTITE::iterator i=lst_entite.find(id);
1697 lst_entite.erase(i);
1698 lst_mg_coquille.erase(j);
1699 for (int k=0;k<mgcoquille->get_nb_mg_coface();k++)
1700 {
1701 MG_COFACE* coface=mgcoquille->get_mg_coface(k);
1702 supprimer_mg_coface(coface);
1703 }
1704 #ifdef ALL_OCC
1705 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_COQUILLE((OCC_COQUILLE*)mgcoquille);
1706 #endif
1707 delete mgcoquille;
1708 }
1709 }
1710
1711
1712 // ENTITE MG_VOLUME
1713
1714 int MG_GEOMETRIE::ajouter_mg_volume(MG_VOLUME *mgvolume)
1715 {
1716 gest->recherche_bonid(*mgvolume);
1717 MG_IDENTIFICATEUR *id=mgvolume;
1718 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1719 if (!p.second)
1720 {
1721 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1722 return FAIL;
1723 }
1724
1725 std::pair<const unsigned long,MG_VOLUME*> tmp(mgvolume->get_id(),mgvolume);
1726 lst_mg_volume.insert(tmp);
1727 return OK;
1728 }
1729
1730
1731 MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(unsigned long num)
1732 {
1733 LISTE_MG_VOLUME::iterator i=lst_mg_volume.find(num);
1734 if (i==lst_mg_volume.end())
1735 {
1736 // afficheur << INEXISTE << enderr;
1737 return NULL;
1738 }
1739 return ((*i).second);
1740 }
1741
1742 MG_VOLUME* MG_GEOMETRIE::get_mg_volumeid(std::string id)
1743 {
1744 LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1745 int nb=lst_mg_volume.size();
1746 for (int j=0;j<nb;j++)
1747 {
1748 MG_VOLUME* volume=(*i).second;
1749 std::string idori=volume->get_idoriginal();
1750 if (idori==id) return volume;
1751 i++;
1752 }
1753 return NULL;
1754 }
1755
1756
1757 MG_VOLUME* MG_GEOMETRIE::get_mg_volume(unsigned int num)
1758 {
1759 if (!(num<lst_mg_volume.size()))
1760 {
1761 // afficheur << INEXISTE << enderr;
1762 return NULL;
1763 }
1764 LISTE_MG_VOLUME::iterator i=lst_mg_volume.begin();
1765 for (unsigned long j=0;j<num;j++) i++;
1766 return ((*i).second);
1767 }
1768
1769 MG_VOLUME* MG_GEOMETRIE::get_premier_volume(LISTE_MG_VOLUME::iterator &it)
1770 {
1771 it = lst_mg_volume.begin();
1772 if (it == lst_mg_volume.end())
1773 return NULL;
1774 return it->second ;
1775 }
1776
1777 MG_VOLUME* MG_GEOMETRIE::get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
1778 {
1779 it++;
1780 if (it==lst_mg_volume.end())
1781 return NULL;
1782 return it->second;
1783 }
1784
1785
1786
1787 unsigned int MG_GEOMETRIE::get_nb_mg_volume(void)
1788 {
1789 return lst_mg_volume.size();
1790 }
1791
1792
1793 int MG_GEOMETRIE::supprimer_mg_volumeid(unsigned long num)
1794 {
1795 MG_VOLUME* mgvolume=get_mg_volumeid(num);
1796 if (mgvolume==NULL)
1797 {
1798 // afficheur << INEXISTE2 << enderr;
1799 return FAIL;
1800 }
1801 MG_IDENTIFICATEUR* id=mgvolume;
1802 LISTE_ENTITE::iterator i=lst_entite.find(id);
1803 lst_entite.erase(i);
1804 LISTE_MG_VOLUME::iterator j=lst_mg_volume.find(num);
1805 lst_mg_volume.erase(j);
1806 #ifdef ALL_OCC
1807 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1808 #endif
1809 delete mgvolume;
1810 return OK;
1811 }
1812
1813
1814 int MG_GEOMETRIE::supprimer_mg_volume(unsigned int num)
1815 {
1816 MG_VOLUME* mgvolume=get_mg_volume(num);
1817 if (mgvolume==NULL)
1818 {
1819 // afficheur << INEXISTE2 << enderr;
1820 return FAIL;
1821 }
1822 MG_IDENTIFICATEUR* id=mgvolume;
1823 LISTE_ENTITE::iterator i=lst_entite.find(id);
1824 lst_entite.erase(i);
1825 LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1826 for (unsigned int k=0;k<num;k++) j++;
1827 lst_mg_volume.erase(j);
1828 #ifdef ALL_OCC
1829 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1830 #endif
1831 delete mgvolume;
1832 return OK;
1833 }
1834
1835
1836 void MG_GEOMETRIE::supprimer_tout_mg_volume(void)
1837 {
1838 while (get_nb_mg_volume()!=0)
1839 {
1840 LISTE_MG_VOLUME::iterator j=lst_mg_volume.begin();
1841 MG_VOLUME* mgvolume=(*j).second;
1842 MG_IDENTIFICATEUR* id=mgvolume;
1843 LISTE_ENTITE::iterator i=lst_entite.find(id);
1844 lst_entite.erase(i);
1845 lst_mg_volume.erase(j);
1846 #ifdef ALL_OCC
1847 if(strcmp(type_geo,"OCCV2017")==0) ((OCC_FONCTION_V2017*)fonction1)->supprimer_OCC_VOLUME((OCC_VOLUME*)mgvolume);
1848 #endif
1849 delete mgvolume;
1850 }
1851 }
1852
1853 // ENTITE MG_COQUE
1854
1855 int MG_GEOMETRIE::ajouter_mg_coque(MG_COQUE *mgcoque)
1856 {
1857 gest->recherche_bonid(*mgcoque);
1858 MG_IDENTIFICATEUR *id=mgcoque;
1859 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1860 if (!p.second)
1861 {
1862 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1863 return FAIL;
1864 }
1865
1866 std::pair<const unsigned long,MG_COQUE*> tmp(mgcoque->get_id(),mgcoque);
1867 lst_mg_coque.insert(tmp);
1868 return OK;
1869 }
1870
1871
1872 MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(unsigned long num)
1873 {
1874 LISTE_MG_COQUE::iterator i=lst_mg_coque.find(num);
1875 if (i==lst_mg_coque.end())
1876 {
1877 // afficheur << INEXISTE << enderr;
1878 return NULL;
1879 }
1880 return ((*i).second);
1881 }
1882
1883 MG_COQUE* MG_GEOMETRIE::get_mg_coqueid(std::string id)
1884 {
1885 LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1886 int nb=lst_mg_coque.size();
1887 for (int j=0;j<nb;j++)
1888 {
1889 MG_COQUE* coque=(*i).second;
1890 std::string idori=coque->get_idoriginal();
1891 if (idori==id) return coque;
1892 i++;
1893 }
1894 return NULL;
1895 }
1896
1897
1898 MG_COQUE* MG_GEOMETRIE::get_mg_coque(unsigned int num)
1899 {
1900 if (!(num<lst_mg_coque.size()))
1901 {
1902 // afficheur << INEXISTE << enderr;
1903 return NULL;
1904 }
1905 LISTE_MG_COQUE::iterator i=lst_mg_coque.begin();
1906 for (unsigned long j=0;j<num;j++) i++;
1907 return ((*i).second);
1908 }
1909
1910
1911 MG_COQUE* MG_GEOMETRIE::get_premier_coque(LISTE_MG_COQUE::iterator &it)
1912 {
1913 it = lst_mg_coque.begin();
1914 if (it == lst_mg_coque.end())
1915 return NULL;
1916 return it->second ;
1917 }
1918
1919 MG_COQUE* MG_GEOMETRIE::get_suivant_coque(LISTE_MG_COQUE::iterator &it)
1920 {
1921 it++;
1922 if (it==lst_mg_coque.end())
1923 return NULL;
1924 return it->second;
1925 }
1926
1927
1928 unsigned int MG_GEOMETRIE::get_nb_mg_coque(void)
1929 {
1930 return lst_mg_coque.size();
1931 }
1932
1933
1934 int MG_GEOMETRIE::supprimer_mg_coqueid(unsigned long num)
1935 {
1936 MG_COQUE* mgcoque=get_mg_coqueid(num);
1937 if (mgcoque==NULL)
1938 {
1939 // afficheur << INEXISTE2 << enderr;
1940 return FAIL;
1941 }
1942 MG_IDENTIFICATEUR* id=mgcoque;
1943 LISTE_ENTITE::iterator i=lst_entite.find(id);
1944 lst_entite.erase(i);
1945 LISTE_MG_COQUE::iterator j=lst_mg_coque.find(num);
1946 lst_mg_coque.erase(j);
1947 delete mgcoque;
1948 return OK;
1949 }
1950
1951
1952 int MG_GEOMETRIE::supprimer_mg_coque(unsigned int num)
1953 {
1954 MG_COQUE* mgcoque=get_mg_coque(num);
1955 if (mgcoque==NULL)
1956 {
1957 // afficheur << INEXISTE2 << enderr;
1958 return FAIL;
1959 }
1960 MG_IDENTIFICATEUR* id=mgcoque;
1961 LISTE_ENTITE::iterator i=lst_entite.find(id);
1962 lst_entite.erase(i);
1963 LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1964 for (unsigned int k=0;k<num;k++) j++;
1965 lst_mg_coque.erase(j);
1966 delete mgcoque;
1967 return OK;
1968 }
1969
1970
1971 void MG_GEOMETRIE::supprimer_tout_mg_coque(void)
1972 {
1973 while (get_nb_mg_coque()!=0)
1974 {
1975 LISTE_MG_COQUE::iterator j=lst_mg_coque.begin();
1976 MG_COQUE* mgcoque=(*j).second;
1977 MG_IDENTIFICATEUR* id=mgcoque;
1978 LISTE_ENTITE::iterator i=lst_entite.find(id);
1979 lst_entite.erase(i);
1980 lst_mg_coque.erase(j);
1981 delete mgcoque;
1982 }
1983 }
1984
1985
1986 // ENTITE MG_POUTRE
1987
1988 int MG_GEOMETRIE::ajouter_mg_poutre(MG_POUTRE *mgpoutre)
1989 {
1990 gest->recherche_bonid(*mgpoutre);
1991 MG_IDENTIFICATEUR *id=mgpoutre;
1992 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
1993 if (!p.second)
1994 {
1995 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
1996 return FAIL;
1997 }
1998
1999 std::pair<const unsigned long,MG_POUTRE*> tmp(mgpoutre->get_id(),mgpoutre);
2000 lst_mg_poutre.insert(tmp);
2001 return OK;
2002 }
2003
2004
2005 MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(unsigned long num)
2006 {
2007 LISTE_MG_POUTRE::iterator i=lst_mg_poutre.find(num);
2008 if (i==lst_mg_poutre.end())
2009 {
2010 // afficheur << INEXISTE << enderr;
2011 return NULL;
2012 }
2013 return ((*i).second);
2014 }
2015
2016 MG_POUTRE* MG_GEOMETRIE::get_mg_poutreid(std::string id)
2017 {
2018 LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
2019 int nb=lst_mg_poutre.size();
2020 for (int j=0;j<nb;j++)
2021 {
2022 MG_POUTRE* poutre=(*i).second;
2023 std::string idori=poutre->get_idoriginal();
2024 if (idori==id) return poutre;
2025 i++;
2026 }
2027 return NULL;
2028 }
2029
2030
2031 MG_POUTRE* MG_GEOMETRIE::get_mg_poutre(unsigned int num)
2032 {
2033 if (!(num<lst_mg_poutre.size()))
2034 {
2035 // afficheur << INEXISTE << enderr;
2036 return NULL;
2037 }
2038 LISTE_MG_POUTRE::iterator i=lst_mg_poutre.begin();
2039 for (unsigned long j=0;j<num;j++) i++;
2040 return ((*i).second);
2041 }
2042
2043
2044 MG_POUTRE* MG_GEOMETRIE::get_premier_poutre(LISTE_MG_POUTRE::iterator &it)
2045 {
2046 it = lst_mg_poutre.begin();
2047 if (it == lst_mg_poutre.end())
2048 return NULL;
2049 return it->second ;
2050 }
2051
2052 MG_POUTRE* MG_GEOMETRIE::get_suivant_poutre(LISTE_MG_POUTRE::iterator &it)
2053 {
2054 it++;
2055 if (it==lst_mg_poutre.end())
2056 return NULL;
2057 return it->second;
2058 }
2059
2060
2061 unsigned int MG_GEOMETRIE::get_nb_mg_poutre(void)
2062 {
2063 return lst_mg_poutre.size();
2064 }
2065
2066
2067 int MG_GEOMETRIE::supprimer_mg_poutreid(unsigned long num)
2068 {
2069 MG_POUTRE* mgpoutre=get_mg_poutreid(num);
2070 if (mgpoutre==NULL)
2071 {
2072 // afficheur << INEXISTE2 << enderr;
2073 return FAIL;
2074 }
2075 MG_IDENTIFICATEUR* id=mgpoutre;
2076 LISTE_ENTITE::iterator i=lst_entite.find(id);
2077 lst_entite.erase(i);
2078 LISTE_MG_POUTRE::iterator j=lst_mg_poutre.find(num);
2079 lst_mg_poutre.erase(j);
2080 delete mgpoutre;
2081 return OK;
2082 }
2083
2084
2085 int MG_GEOMETRIE::supprimer_mg_poutre(unsigned int num)
2086 {
2087 MG_POUTRE* mgpoutre=get_mg_poutre(num);
2088 if (mgpoutre==NULL)
2089 {
2090 // afficheur << INEXISTE2 << enderr;
2091 return FAIL;
2092 }
2093 MG_IDENTIFICATEUR* id=mgpoutre;
2094 LISTE_ENTITE::iterator i=lst_entite.find(id);
2095 lst_entite.erase(i);
2096 LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
2097 for (unsigned int k=0;k<num;k++) j++;
2098 lst_mg_poutre.erase(j);
2099 delete mgpoutre;
2100 return OK;
2101 }
2102
2103
2104 void MG_GEOMETRIE::supprimer_tout_mg_poutre(void)
2105 {
2106 while (get_nb_mg_poutre()!=0)
2107 {
2108 LISTE_MG_POUTRE::iterator j=lst_mg_poutre.begin();
2109 MG_POUTRE* mgpoutre=(*j).second;
2110 MG_IDENTIFICATEUR* id=mgpoutre;
2111 LISTE_ENTITE::iterator i=lst_entite.find(id);
2112 lst_entite.erase(i);
2113 lst_mg_poutre.erase(j);
2114 delete mgpoutre;
2115 }
2116 }
2117 // ENTITE MG_GROUPE_TOPOLOGIQUE
2118
2119 int MG_GEOMETRIE::ajouter_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE *mggroupe_topologique)
2120 {
2121 gest->recherche_bonid(*mggroupe_topologique);
2122 MG_IDENTIFICATEUR *id=mggroupe_topologique;
2123 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
2124 if (!p.second)
2125 {
2126 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
2127 return FAIL;
2128 }
2129
2130 std::pair<const unsigned long,MG_GROUPE_TOPOLOGIQUE*> tmp(mggroupe_topologique->get_id(),mggroupe_topologique);
2131 lst_mg_groupe_topologique.insert(tmp);
2132 return OK;
2133 }
2134
2135
2136 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologiqueid(unsigned long num)
2137 {
2138 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.find(num);
2139 if (i==lst_mg_groupe_topologique.end())
2140 {
2141 // afficheur << INEXISTE << enderr;
2142 return NULL;
2143 }
2144 return ((*i).second);
2145 }
2146
2147
2148
2149 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_groupe_topologique(unsigned int num)
2150 {
2151 if (!(num<lst_mg_groupe_topologique.size()))
2152 {
2153 // afficheur << INEXISTE << enderr;
2154 return NULL;
2155 }
2156 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator i=lst_mg_groupe_topologique.begin();
2157 for (unsigned long j=0;j<num;j++) i++;
2158 return ((*i).second);
2159 }
2160
2161
2162 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_premier_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
2163 {
2164 it = lst_mg_groupe_topologique.begin();
2165 if (it == lst_mg_groupe_topologique.end())
2166 return NULL;
2167 return it->second ;
2168 }
2169
2170 MG_GROUPE_TOPOLOGIQUE* MG_GEOMETRIE::get_suivant_groupe_topologique(LISTE_MG_GROUPE_TOPOLOGIQUE::iterator &it)
2171 {
2172 it++;
2173 if (it==lst_mg_groupe_topologique.end())
2174 return NULL;
2175 return it->second;
2176 }
2177
2178
2179 unsigned int MG_GEOMETRIE::get_nb_mg_groupe_topologique(void)
2180 {
2181 return lst_mg_groupe_topologique.size();
2182 }
2183
2184
2185 int MG_GEOMETRIE::supprimer_mg_groupe_topologiqueid(unsigned long num)
2186 {
2187 MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologiqueid(num);
2188 if (mggroupe_topologique==NULL)
2189 {
2190 // afficheur << INEXISTE2 << enderr;
2191 return FAIL;
2192 }
2193 MG_IDENTIFICATEUR* id=mggroupe_topologique;
2194 LISTE_ENTITE::iterator i=lst_entite.find(id);
2195 lst_entite.erase(i);
2196 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.find(num);
2197 lst_mg_groupe_topologique.erase(j);
2198 delete mggroupe_topologique;
2199 return OK;
2200 }
2201
2202
2203 int MG_GEOMETRIE::supprimer_mg_groupe_topologique(unsigned int num)
2204 {
2205 MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=get_mg_groupe_topologique(num);
2206 if (mggroupe_topologique==NULL)
2207 {
2208 // afficheur << INEXISTE2 << enderr;
2209 return FAIL;
2210 }
2211 MG_IDENTIFICATEUR* id=mggroupe_topologique;
2212 LISTE_ENTITE::iterator i=lst_entite.find(id);
2213 lst_entite.erase(i);
2214 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
2215 for (unsigned int k=0;k<num;k++) j++;
2216 lst_mg_groupe_topologique.erase(j);
2217 delete mggroupe_topologique;
2218 return OK;
2219 }
2220
2221
2222 void MG_GEOMETRIE::supprimer_tout_mg_groupe_topologique(void)
2223 {
2224 while (get_nb_mg_groupe_topologique()!=0)
2225 {
2226 LISTE_MG_GROUPE_TOPOLOGIQUE::iterator j=lst_mg_groupe_topologique.begin();
2227 MG_GROUPE_TOPOLOGIQUE* mggroupe_topologique=(*j).second;
2228 MG_IDENTIFICATEUR* id=mggroupe_topologique;
2229 LISTE_ENTITE::iterator i=lst_entite.find(id);
2230 lst_entite.erase(i);
2231 lst_mg_groupe_topologique.erase(j);
2232 delete mggroupe_topologique;
2233 }
2234 }
2235 // ENTITE MG_GEOM_FONCTION
2236
2237 int MG_GEOMETRIE::ajouter_mg_geom_fonction(MG_GEOM_FONCTION *mggeomfon)
2238 {
2239 gest->recherche_bonid(*mggeomfon);
2240 MG_IDENTIFICATEUR *id=mggeomfon;
2241 std::pair<LISTE_ENTITE::iterator,bool> p=lst_entite.insert(id);
2242 if (!p.second)
2243 {
2244 // afficheur << ENTITEID << id->get_id() << DUPLIQUE << enderr;
2245 return FAIL;
2246 }
2247
2248 std::pair<const unsigned long,MG_GEOM_FONCTION*> tmp(mggeomfon->get_id(),mggeomfon);
2249 lst_mg_geom_fonction.insert(tmp);
2250 return OK;
2251 }
2252
2253
2254 MG_GEOM_FONCTION* MG_GEOMETRIE::get_mg_geom_fonctionid(unsigned long num)
2255 {
2256 LISTE_MG_GEOM_FONCTION::iterator i=lst_mg_geom_fonction.find(num);
2257 if (i==lst_mg_geom_fonction.end())
2258 {
2259 // afficheur << INEXISTE << enderr;
2260 return NULL;
2261 }
2262 return ((*i).second);
2263 }
2264
2265
2266
2267 MG_GEOM_FONCTION* MG_GEOMETRIE::get_mg_geom_fonction(unsigned int num)
2268 {
2269 if (!(num<lst_mg_geom_fonction.size()))
2270 {
2271 // afficheur << INEXISTE << enderr;
2272 return NULL;
2273 }
2274 LISTE_MG_GEOM_FONCTION::iterator i=lst_mg_geom_fonction.begin();
2275 for (unsigned long j=0;j<num;j++) i++;
2276 return ((*i).second);
2277 }
2278
2279
2280 MG_GEOM_FONCTION* MG_GEOMETRIE::get_premier_geom_fonction(LISTE_MG_GEOM_FONCTION::iterator &it)
2281 {
2282 it = lst_mg_geom_fonction.begin();
2283 if (it == lst_mg_geom_fonction.end())
2284 return NULL;
2285 return it->second ;
2286 }
2287
2288 MG_GEOM_FONCTION* MG_GEOMETRIE::get_suivant_geom_fonction(LISTE_MG_GEOM_FONCTION::iterator &it)
2289 {
2290 it++;
2291 if (it==lst_mg_geom_fonction.end())
2292 return NULL;
2293 return it->second;
2294 }
2295
2296
2297 unsigned int MG_GEOMETRIE::get_nb_mg_geom_fonction(void)
2298 {
2299 return lst_mg_geom_fonction.size();
2300 }
2301
2302
2303 int MG_GEOMETRIE::supprimer_mg_geom_fonctionid(unsigned long num)
2304 {
2305 MG_GEOM_FONCTION* mggeomfon=get_mg_geom_fonctionid(num);
2306 if (mggeomfon==NULL)
2307 {
2308 // afficheur << INEXISTE2 << enderr;
2309 return FAIL;
2310 }
2311 MG_IDENTIFICATEUR* id=mggeomfon;
2312 LISTE_ENTITE::iterator i=lst_entite.find(id);
2313 lst_entite.erase(i);
2314 LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.find(num);
2315 lst_mg_geom_fonction.erase(j);
2316 delete mggeomfon;
2317 return OK;
2318 }
2319
2320
2321 int MG_GEOMETRIE::supprimer_mg_geom_fonction(unsigned int num)
2322 {
2323 MG_GEOM_FONCTION* mggeomfon=get_mg_geom_fonction(num);
2324 if (mggeomfon==NULL)
2325 {
2326 // afficheur << INEXISTE2 << enderr;
2327 return FAIL;
2328 }
2329 MG_IDENTIFICATEUR* id=mggeomfon;
2330 LISTE_ENTITE::iterator i=lst_entite.find(id);
2331 lst_entite.erase(i);
2332 LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.begin();
2333 for (unsigned int k=0;k<num;k++) j++;
2334 lst_mg_geom_fonction.erase(j);
2335 delete mggeomfon;
2336 return OK;
2337 }
2338
2339
2340 void MG_GEOMETRIE::supprimer_tout_mg_geom_fonction(void)
2341 {
2342 while (get_nb_mg_geom_fonction()!=0)
2343 {
2344 LISTE_MG_GEOM_FONCTION::iterator j=lst_mg_geom_fonction.begin();
2345 MG_GEOM_FONCTION* mggeomfon=(*j).second;
2346 MG_IDENTIFICATEUR* id=mggeomfon;
2347 LISTE_ENTITE::iterator i=lst_entite.find(id);
2348 lst_entite.erase(i);
2349 lst_mg_geom_fonction.erase(j);
2350 delete mggeomfon;
2351 }
2352 }
2353
2354
2355
2356 // ENTITE MG_VISU_COURBE
2357
2358 int MG_GEOMETRIE::ajouter_mg_visu_courbe(MG_VISU_COURBE *mgvcrb)
2359 {
2360 gest->recherche_bonidvisuel(*mgvcrb);
2361 std::pair<const unsigned long,MG_VISU_COURBE*> tmp(mgvcrb->get_id(),mgvcrb);
2362 lst_mg_visu_courbe.insert(tmp);
2363 return OK;
2364 }
2365
2366
2367 MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbeid(unsigned long num)
2368 {
2369 LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.find(num);
2370 if (i==lst_mg_visu_courbe.end())
2371 {
2372 return NULL;
2373 }
2374 return ((*i).second);
2375 }
2376
2377
2378
2379 MG_VISU_COURBE* MG_GEOMETRIE::get_mg_visu_courbe(unsigned int num)
2380 {
2381 if (!(num<lst_mg_visu_courbe.size()))
2382 {
2383 return NULL;
2384 }
2385 LISTE_MG_VISU_COURBE::iterator i=lst_mg_visu_courbe.begin();
2386
2387 for (unsigned long j=0;j<num;j++) i++;
2388 return ((*i).second);
2389 }
2390
2391
2392
2393 unsigned int MG_GEOMETRIE::get_nb_mg_visu_courbe(void)
2394 {
2395 return lst_mg_visu_courbe.size();
2396 }
2397
2398 MG_VISU_COURBE* MG_GEOMETRIE::get_premier_visu_courbe(LISTE_MG_VISU_COURBE::iterator& it)
2399 {
2400 it = lst_mg_visu_courbe.begin();
2401 if (it == lst_mg_visu_courbe.end())
2402 return NULL;
2403 return it->second ;
2404 }
2405
2406 MG_VISU_COURBE* MG_GEOMETRIE::get_suivant_visu_courbe(LISTE_MG_VISU_COURBE::iterator& it)
2407 {
2408 it++;
2409 if (it == lst_mg_visu_courbe.end())
2410 return NULL;
2411 return it->second ;
2412 }
2413
2414
2415
2416 int MG_GEOMETRIE::supprimer_mg_visu_courbeid(unsigned long num)
2417 {
2418 MG_VISU_COURBE* mgvcrb=get_mg_visu_courbeid(num);
2419 if (mgvcrb==NULL)
2420 {
2421 return FAIL;
2422 }
2423 LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.find(num);
2424 lst_mg_visu_courbe.erase(j);
2425 delete mgvcrb;
2426 return OK;
2427 }
2428
2429
2430 int MG_GEOMETRIE::supprimer_mg_visu_courbe(unsigned int num)
2431 {
2432 MG_VISU_COURBE* mgvcrb=get_mg_visu_courbe(num);
2433 if (mgvcrb==NULL)
2434 {
2435 return FAIL;
2436 }
2437 LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
2438 for (unsigned int k=0;k<num;k++) j++;
2439 lst_mg_visu_courbe.erase(j);
2440 delete mgvcrb;
2441 return OK;
2442 }
2443
2444 void MG_GEOMETRIE::supprimer_tout_mg_visu_courbe(void)
2445 {
2446 while (get_nb_mg_visu_courbe()!=0)
2447 {
2448 LISTE_MG_VISU_COURBE::iterator j=lst_mg_visu_courbe.begin();
2449 MG_VISU_COURBE* mgvcrb=(*j).second;
2450 lst_mg_visu_courbe.erase(j);
2451 delete mgvcrb;
2452 }
2453 }
2454
2455 int MG_GEOMETRIE::ajouter_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique)
2456 {
2457 switch(mg_element_topologique->get_type())
2458 {
2459 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
2460 ajouter_mg_sommet((MG_SOMMET*)mg_element_topologique); break;
2461 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
2462 ajouter_mg_arete((MG_ARETE*)mg_element_topologique); break;
2463 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
2464 ajouter_mg_face((MG_FACE*)mg_element_topologique); break;
2465 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
2466 ajouter_mg_coque((MG_COQUE*)mg_element_topologique); break;
2467 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
2468 ajouter_mg_poutre((MG_POUTRE*)mg_element_topologique); break;
2469 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
2470 ajouter_mg_volume((MG_VOLUME*)mg_element_topologique); break;
2471 }
2472 return 0;
2473
2474 }
2475
2476 int MG_GEOMETRIE::ajouter_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique)
2477 {
2478 switch(mg_element_cotopologique->get_type())
2479 {
2480 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
2481 ajouter_mg_cosommet((MG_COSOMMET*)mg_element_cotopologique); break;
2482 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
2483 ajouter_mg_coarete((MG_COARETE*)mg_element_cotopologique); break;
2484 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
2485 ajouter_mg_boucle((MG_BOUCLE*)mg_element_cotopologique); break;
2486 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
2487 ajouter_mg_coface((MG_COFACE*)mg_element_cotopologique); break;
2488 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
2489 ajouter_mg_coquille((MG_COQUILLE*)mg_element_cotopologique); break;
2490 }
2491 return 0;
2492
2493 }
2494
2495 int MG_GEOMETRIE::ajouter_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE* mg_element_geometrique)
2496 {
2497 switch(mg_element_geometrique->get_type())
2498 {
2499 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
2500 ajouter_mg_point((MG_POINT*)mg_element_geometrique); break;
2501 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
2502 ajouter_mg_courbe((MG_COURBE*)mg_element_geometrique); break;
2503 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
2504 ajouter_mg_surface((MG_SURFACE*)mg_element_geometrique); break;
2505 }
2506 return 0;
2507 }
2508
2509 int MG_GEOMETRIE::supprimer_mg_element_topologique(MG_ELEMENT_TOPOLOGIQUE* mg_element_topologique)
2510 {
2511 switch(mg_element_topologique->get_type())
2512 {
2513 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
2514 supprimer_mg_sommetid(mg_element_topologique->get_id()); break;
2515 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
2516 supprimer_mg_areteid(mg_element_topologique->get_id()); break;
2517 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
2518 supprimer_mg_faceid(mg_element_topologique->get_id()); break;
2519 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
2520 supprimer_mg_coqueid(mg_element_topologique->get_id()); break;
2521 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
2522 supprimer_mg_poutreid(mg_element_topologique->get_id()); break;
2523 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
2524 supprimer_mg_volumeid(mg_element_topologique->get_id()); break;
2525 }
2526 return 0;
2527 }
2528
2529 int MG_GEOMETRIE::supprimer_mg_element_cotopologique(MG_ELEMENT_COTOPOLOGIQUE* mg_element_cotopologique)
2530 {
2531 switch(mg_element_cotopologique->get_type())
2532 {
2533 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
2534 supprimer_mg_cosommetid(mg_element_cotopologique->get_id()); break;
2535 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
2536 supprimer_mg_coareteid(mg_element_cotopologique->get_id()); break;
2537 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
2538 supprimer_mg_boucleid(mg_element_cotopologique->get_id()); break;
2539 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
2540 supprimer_mg_cofaceid(mg_element_cotopologique->get_id()); break;
2541 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
2542 supprimer_mg_coquilleid(mg_element_cotopologique->get_id()); break;
2543 }
2544 return 0;
2545
2546 }
2547
2548 int MG_GEOMETRIE::supprimer_mg_element_geometrique(MG_ELEMENT_GEOMETRIQUE* mg_element_geometrique)
2549 {
2550 switch(mg_element_geometrique->get_type())
2551 {
2552 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::POINT:
2553 supprimer_mg_pointid(mg_element_geometrique->get_id()); break;
2554 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::COURBE:
2555 supprimer_mg_courbeid(mg_element_geometrique->get_id()); break;
2556 case MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::SURFACE:
2557 supprimer_mg_surfaceid(mg_element_geometrique->get_id()); break;
2558 }
2559 return 0;
2560 }
2561
2562
2563 MG_ELEMENT_TOPOLOGIQUE* MG_GEOMETRIE::get_mg_element_topologiqueid(long int num)
2564 {
2565 MG_ELEMENT_TOPOLOGIQUE* ele;
2566 if(get_mg_sommetid(num)!=NULL)
2567 {
2568 ele = get_mg_sommetid(num);
2569 return ele;
2570 }
2571 else if(get_mg_areteid(num)!=NULL)
2572 {
2573 ele = get_mg_areteid(num);
2574 return ele;
2575 }
2576 else if(get_mg_faceid(num)!=NULL)
2577 {
2578 ele = get_mg_faceid(num);
2579 return ele;
2580 }
2581 else if(get_mg_volumeid(num)!=NULL)
2582 {
2583 ele = get_mg_volumeid(num);
2584 return ele;
2585 }
2586 else if(get_mg_poutreid(num)!=NULL)
2587 {
2588 ele = get_mg_poutreid(num);
2589 return ele;
2590 }
2591 else if(get_mg_coqueid(num)!=NULL)
2592 {
2593 ele = get_mg_coqueid(num);
2594 return ele;
2595 }
2596 else return NULL;
2597 }
2598
2599 MG_ELEMENT_COTOPOLOGIQUE* MG_GEOMETRIE::get_mg_element_cotopologiqueid(long int num)
2600 {
2601 MG_ELEMENT_COTOPOLOGIQUE* ele;
2602 if(get_mg_cosommetid(num)!=NULL)
2603 {
2604 ele = get_mg_cosommetid(num);
2605 return ele;
2606 }
2607 else if(get_mg_coareteid(num)!=NULL)
2608 {
2609 ele = get_mg_coareteid(num);
2610 return ele;
2611 }
2612 else if(get_mg_boucleid(num)!=NULL)
2613 {
2614 ele = get_mg_boucleid(num);
2615 return ele;
2616 }
2617 else if(get_mg_cofaceid(num)!=NULL)
2618 {
2619 ele = get_mg_cofaceid(num);
2620 return ele;
2621 }
2622 else if(get_mg_coquilleid(num)!=NULL)
2623 {
2624 ele = get_mg_coquilleid(num);
2625 return ele;
2626 }
2627 else return NULL;
2628 }
2629
2630
2631 void MG_GEOMETRIE::remplir_mg_groupe_topologique(MG_GROUPE_TOPOLOGIQUE* mg_groupe_topologique)
2632 {
2633 LISTE_MG_SOMMET::iterator it_sommet;
2634 for(MG_SOMMET* sommet=get_premier_sommet(it_sommet);sommet!=NULL;sommet=get_suivant_sommet(it_sommet)) mg_groupe_topologique->ajouter(sommet);
2635 LISTE_MG_ARETE::iterator it_arete;
2636 for(MG_ARETE* arete=get_premier_arete(it_arete);arete!=NULL;arete=get_suivant_arete(it_arete)) mg_groupe_topologique->ajouter(arete);
2637 LISTE_MG_FACE::iterator it_face;
2638 for(MG_FACE* face=get_premier_face(it_face);face!=NULL;face=get_suivant_face(it_face)) mg_groupe_topologique->ajouter(face);
2639 LISTE_MG_VOLUME::iterator it_volume;
2640 for(MG_VOLUME* volume=get_premier_volume(it_volume);volume!=NULL;volume=get_suivant_volume(it_volume)) mg_groupe_topologique->ajouter(volume);
2641 LISTE_MG_COQUE::iterator it_coque;
2642 for(MG_COQUE* coque=get_premier_coque(it_coque);coque!=NULL;coque=get_suivant_coque(it_coque)) mg_groupe_topologique->ajouter(coque);
2643 LISTE_MG_POUTRE::iterator it_poutre;
2644 for(MG_POUTRE* poutre=get_premier_poutre(it_poutre);poutre!=NULL;poutre=get_suivant_poutre(it_poutre)) mg_groupe_topologique->ajouter(poutre);
2645 }
2646
2647
2648 // FIN DE GESTION DES ENTITES
2649
2650 void MG_GEOMETRIE::enregistrer(std::ostream& o,double version)
2651 {
2652 #ifdef ALL_OCC
2653 if(strcmp(type_geo,"OCCV2017")==0)
2654 {
2655 OCC_FONCTION_V2017* occ_fonction_v2017 = (OCC_FONCTION_V2017*)fonction1;
2656 occ_fonction_v2017->enregistrer_fichier_OCAF(nom_du_fichier,this);
2657 }
2658 #endif
2659 if(!geometrie_construction)
2660 {
2661 if (nom_du_fichier==NULL) o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo ;
2662 else o << "%" << get_id() << "=GEOMETRIE(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
2663 }
2664 else o << "%" << get_id() << "=CONSTRUCTION(" << valeur_unite << "," << type_geo << "," << nom_du_fichier;
2665 if (gest_materiau!="") o << "," << gest_materiau.c_str() ;
2666 o << ");" << std::endl;
2667 o << "%" << get_id() << "=GEOMETRIE_EPS(" << precision << ");" << std::endl;
2668 LISTE_ENTITE::const_iterator i;
2669 for (i=lst_entite.begin();i!=lst_entite.end();i++)
2670 (*i)->enregistrer(o,version);
2671 }
2672
2673 void MG_GEOMETRIE::get_fichier_dependant(std::vector<std::string> &liste_fichier)
2674 {
2675 liste_fichier.push_back(nom_du_fichier);
2676 LISTE_ENTITE::const_iterator i;
2677 for (i=lst_entite.begin();i!=lst_entite.end();i++)
2678 (*i)->get_fichier_dependant(liste_fichier);
2679 }
2680
2681 char* MG_GEOMETRIE::get_nom_du_fichier(void)
2682 {
2683 return nom_du_fichier;
2684 }
2685
2686 char* MG_GEOMETRIE::get_type_geometrie(void)
2687 {
2688 return type_geo;
2689 }
2690
2691 bool MG_GEOMETRIE::est_virtuelle(void)
2692 {
2693 bool res=false;
2694 std::string type=get_type_geometrie();
2695 OT_CHAINE ot;
2696 type=ot.upcase(type);
2697 if (type=="VIRTUEL") res=true;
2698 return res;
2699 }
2700
2701 void MG_GEOMETRIE::cree_entite_visuel(double facteur)
2702 {
2703 supprimer_tout_mg_visu_courbe();
2704 int nbarete=get_nb_mg_arete();
2705 for (int i=0;i<nbarete;i++)
2706 {
2707 MG_ARETE* mgarete=get_mg_arete(i);
2708 double xyz1[3];
2709 double tmin=mgarete->get_tmin();
2710 double tmax=mgarete->get_tmax();
2711 mgarete->evaluer(tmin,xyz1);
2712 int nb_pas=(int)(20.*facteur);
2713 for (int j=1;j<nb_pas+1;j++)
2714 {
2715 double t=tmin+j*(tmax-tmin)/nb_pas;
2716 double xyz2[3];
2717 mgarete->evaluer(t,xyz2);
2718 MG_VISU_COURBE* mgvisucourbe=new MG_VISU_COURBE(xyz1,xyz2);
2719 ajouter_mg_visu_courbe(mgvisucourbe);
2720 xyz1[0]=xyz2[0];
2721 xyz1[1]=xyz2[1];
2722 xyz1[2]=xyz2[2];
2723 }
2724 }
2725 }
2726
2727 std::ostream& operator << (std::ostream& o,MG_GEOMETRIE& geo)
2728 {
2729 geo.enregistrer(o,VERSIONFICHIER);
2730 return o;
2731 }
2732
2733
2734
2735 void MG_GEOMETRIE::change_gest_materiau(char* nom)
2736 {
2737 gest_materiau=nom;
2738 }
2739
2740 char* MG_GEOMETRIE::get_gest_materiau(void)
2741 {
2742 return (char*)gest_materiau.c_str();
2743 }
2744
2745 double MG_GEOMETRIE::get_valeur_precision(void)
2746 {
2747 return precision;
2748 }
2749
2750 void MG_GEOMETRIE::change_valeur_precision(double val)
2751 {
2752 precision=val;
2753 }
2754
2755 double MG_GEOMETRIE::get_valeur_unite(void)
2756 {
2757 return valeur_unite;
2758 }
2759
2760 void MG_GEOMETRIE::change_valeur_unite(double val)
2761 {
2762 valeur_unite=val;
2763 }
2764
2765
2766
2767 void MG_GEOMETRIE::construit_vectorisation(void)
2768 {
2769 LISTE_MG_FACE::iterator itface;
2770 for (MG_FACE* face=get_premier_face(itface);face!=NULL;face=get_suivant_face(itface))
2771 face->get_vectorisation();
2772 LISTE_MG_ARETE::iterator itarete;
2773 for (MG_ARETE* arete=get_premier_arete(itarete);arete!=NULL;arete=get_suivant_arete(itarete))
2774 arete->get_vectorisation();
2775 LISTE_MG_SOMMET::iterator itsommet;
2776 for (MG_SOMMET* som=get_premier_sommet(itsommet);som!=NULL;som=get_suivant_sommet(itsommet))
2777 som->get_vectorisation();
2778 LISTE_MG_SURFACE::iterator itsurface;
2779 for (MG_SURFACE* surface=get_premier_surface(itsurface);surface!=NULL;surface=get_suivant_surface(itsurface))
2780 surface->get_vectorisation();
2781 LISTE_MG_COURBE::iterator itcourbe;
2782 for (MG_COURBE* courb=get_premier_courbe(itcourbe);courb!=NULL;courb=get_suivant_courbe(itcourbe))
2783 courb->get_vectorisation();
2784 LISTE_MG_POINT::iterator itpoint;
2785 for (MG_POINT* point=get_premier_point(itpoint);point!=NULL;point=get_suivant_point(itpoint))
2786 point->get_vectorisation();
2787 }
2788
2789
2790 #ifdef BREP_SAT
2791 SAT_GESTIONNAIRE& MG_GEOMETRIE::get_gest_sat(void)
2792 {
2793 return fichsat;
2794 }
2795 #endif
2796 #ifdef BREP_STEP
2797 ST_GESTIONNAIRE& MG_GEOMETRIE::get_gest_step(void)
2798 {
2799 return fichstep;
2800 }
2801 #endif
2802
2803 #ifdef BREP_OCC
2804 OCC_FONCTION& MG_GEOMETRIE::get_occ_fonction(void)
2805 {
2806 return *fonction1;
2807 }
2808 #endif
2809
2810 bool MG_GEOMETRIE::est_construction(void)
2811 {
2812 return geometrie_construction;
2813 }
2814
2815 void MG_GEOMETRIE::change_est_construction(bool val)
2816 {
2817 geometrie_construction=val;
2818 }
2819
2820 void MG_GEOMETRIE::efface_ccf(bool volume, bool face, bool arete, bool sommet)
2821 {
2822 if (volume)
2823 {
2824 LISTE_MG_VOLUME::iterator it;
2825 for (MG_VOLUME* vol=get_premier_volume(it);vol!=NULL;vol=get_suivant_volume(it))
2826 {
2827 while (vol->get_nb_ccf()>0)
2828 vol->supprimer_ccf(0);
2829 }
2830 }
2831 if (face)
2832 {
2833 LISTE_MG_FACE::iterator it;
2834 for (MG_FACE* fac=get_premier_face(it);fac!=NULL;fac=get_suivant_face(it))
2835 {
2836 while (fac->get_nb_ccf()>0)
2837 fac->supprimer_ccf(0);
2838 }
2839 }
2840 if (arete)
2841 {
2842 LISTE_MG_ARETE::iterator it;
2843 for (MG_ARETE* are=get_premier_arete(it);are!=NULL;are=get_suivant_arete(it))
2844 {
2845 while (are->get_nb_ccf()>0)
2846 are->supprimer_ccf(0);
2847 }
2848 }
2849 if (sommet)
2850 {
2851 LISTE_MG_SOMMET::iterator it;
2852 for (MG_SOMMET* som=get_premier_sommet(it);som!=NULL;som=get_suivant_sommet(it))
2853 {
2854 while (som->get_nb_ccf()>0)
2855 som->supprimer_ccf(0);
2856 }
2857 }
2858 }