ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/criaqoperation/src/criaqoperators.cpp
Revision: 609
Committed: Thu Nov 27 15:34:00 2014 UTC (10 years, 8 months ago) by sattarpa
File size: 74556 byte(s)
Log Message:
the curvature criterion for emoving the sample points on defect area is added.

File Contents

# User Rev Content
1 sattarpa 554 #include <stdio.h>
2     #include "mg_file.h"
3     #include "criaqoperators.h"
4 sattarpa 596 #include "tpl_grille.h"
5     #include "ot_mathematique.h"
6     #include <math.h>
7     #include "tpl_octree.h"
8 sattarpa 609 #include "fem_maillage_outils.h"
9     #include "mg_maillage_outils.h"
10 sattarpa 554
11 sattarpa 596 CRIAQOPERATORS::CRIAQOPERATORS():MAILLEUR(false)
12 sattarpa 554 {
13     }
14 sattarpa 596
15     CRIAQOPERATORS::~CRIAQOPERATORS()
16 sattarpa 554 {
17     }
18 sattarpa 596 void CRIAQOPERATORS::meshdistance_compare(char* referencemagicfilename,int refmeshno,char* comparemagicfilename,int compmeshno,char* outputcomparefile)
19 sattarpa 554 {
20 sattarpa 596 MG_FILE refgest(referencemagicfilename);
21     MG_MAILLAGE* refmgmai;
22 sattarpa 600 if (refmeshno==0) refmgmai=refgest.get_mg_maillage(refmeshno); else refmgmai=refgest.get_mg_maillageid(refmeshno);
23 sattarpa 596 MG_FILE compgest(comparemagicfilename);
24     MG_MAILLAGE* compmgmai;
25 sattarpa 600 if (compmeshno==0) compmgmai=compgest.get_mg_maillage(compmeshno); else compmgmai=compgest.get_mg_maillageid(compmeshno);
26 sattarpa 596 /*MG_FILE refgest((char*)"cad_caseA_1mmesh_winspbc.magic");
27     MG_FILE compgest((char*)"deformedgnifcad_caseA_1mmesh_winspbc_removedmodified.magic");
28     MG_MAILLAGE* refmgmai=refgest.get_mg_maillageid(319270);
29     MG_MAILLAGE* compmgmai=compgest.get_mg_maillageid(1);*/
30     //octree initialization
31     double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
32     TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
33     LISTE_MG_NOEUD::iterator it;
34     for (MG_NOEUD* no=refmgmai->get_premier_noeud(it);no!=NULL;no=refmgmai->get_suivant_noeud(it))
35     {
36     if (no->get_x()<xmin) xmin=no->get_x();
37     if (no->get_y()<ymin) ymin=no->get_y();
38     if (no->get_z()<zmin) zmin=no->get_z();
39     if (no->get_x()>xmax) xmax=no->get_x();
40     if (no->get_y()>ymax) ymax=no->get_y();
41     if (no->get_z()>zmax) zmax=no->get_z();
42     }
43     for (MG_NOEUD* no=compmgmai->get_premier_noeud(it);no!=NULL;no=compmgmai->get_suivant_noeud(it))
44     {
45     if (no->get_x()<xmin) xmin=no->get_x();
46     if (no->get_y()<ymin) ymin=no->get_y();
47     if (no->get_z()<zmin) zmin=no->get_z();
48     if (no->get_x()>xmax) xmax=no->get_x();
49     if (no->get_y()>ymax) ymax=no->get_y();
50     if (no->get_z()>zmax) zmax=no->get_z();
51     lstnoeud.ajouter(no);
52     }
53     OT_VECTEUR_3D vecmin(xmin,ymin,zmin);OT_VECTEUR_3D vecmmax(xmax,ymax,zmax);
54     OT_VECTEUR_3D vec(vecmmax,vecmin);
55    
56     //double search_radius=0.001*(vec.get_longueur());
57     double search_radius=3.;
58     OT_VECTEUR_3D min(xmin,ymin,zmin); OT_VECTEUR_3D max(xmax,ymax,zmax); OT_VECTEUR_3D average=(min+max)/2.; OT_VECTEUR_3D lengthvec(min,max);
59     double length=sqrt(lengthvec*lengthvec); double bxr=1.1;
60     xmin=average.get_x()-(length*bxr);ymin=average.get_y()-(length*bxr);zmin=average.get_z()-(length*bxr);
61     xmax=average.get_x()+(length*bxr);ymax=average.get_y()+(length*bxr);zmax=average.get_z()+(length*bxr);
62    
63     TPL_OCTREE<MG_NOEUD*,MG_NOEUD*> octree;
64     octree.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
65     for (MG_NOEUD* no=compmgmai->get_premier_noeud(it);no!=NULL;no=compmgmai->get_suivant_noeud(it))
66     octree.inserer(no);
67    
68     MG_SOLUTION* mgsol=new MG_SOLUTION(refmgmai,1,"distance.sol",1,"Normaldistance",MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD,MAGIC::TYPE_SOLUTION::SCALAIRE);
69     refgest.ajouter_mg_solution(mgsol);
70     mgsol->change_legende(0,"Normaldistance");
71     int i=0;
72     for (MG_NOEUD* nop=refmgmai->get_premier_noeud(it);nop!=NULL;nop=refmgmai->get_suivant_noeud(it))
73     {
74     TPL_MAP_ENTITE<MG_NOEUD*> lstneiclose;
75     int neindnb=lstneiclose.get_nb();
76     while(neindnb==0)
77     {
78     octree.rechercher(nop->get_x(),nop->get_y(),nop->get_z(),search_radius,lstneiclose);
79     neindnb=lstneiclose.get_nb();
80     }
81     map<double,MG_NOEUD*,std::less<double> > lstdist;
82     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itnop;
83     for(MG_NOEUD* no=lstneiclose.get_premier(itnop);no!=NULL;no=lstneiclose.get_suivant(itnop))
84     {
85     double distns=sqrt(pow(nop->get_x()-no->get_x(),2)+pow(nop->get_y()-no->get_y(),2)+pow(nop->get_z()-no->get_z(),2));
86    
87     OT_VECTEUR_3D w_n_tot(0.,0.,0.);
88     double norme_w_n_tot=0.;
89     OT_VECTEUR_3D w2_n_tot(0.,0.,0.);
90     double norme_w2_n_tot=0.;
91     int nbtri=nop->get_lien_triangle()->get_nb();
92     for (int i=0;i<nbtri;i++)
93     {
94     MG_TRIANGLE* tri=(MG_TRIANGLE*)nop->get_lien_triangle()->get(i);
95    
96     double *xyzn1=tri->get_noeud1()->get_coord();
97     double *xyzn2=tri->get_noeud2()->get_coord();
98     double *xyzn3=tri->get_noeud3()->get_coord();
99    
100     OT_VECTEUR_3D vec1(xyzn1,xyzn3);
101     OT_VECTEUR_3D vec2(xyzn1,xyzn2);
102     OT_VECTEUR_3D n_tri=vec1&vec2; // Normale au triangle
103    
104     double w=n_tri.get_longueur(); // 2 fois l'aire du triangle (pour éviter une division par 2)
105     n_tri.norme();
106     OT_VECTEUR_3D w_n=w*n_tri;
107     double norme_w_n=w_n.get_longueur();
108     w_n_tot=w_n_tot+w_n;
109     norme_w_n_tot=norme_w_n_tot+norme_w_n;
110     }
111    
112     OT_VECTEUR_3D n=w_n_tot/norme_w_n_tot; // Normale à la surface au noeud
113     n.norme();
114     OT_VECTEUR_3D distvec(nop->get_coord(),no->get_coord());
115     double normaldistance=distvec*n;
116     double normaldistanceabs=fabs(normaldistance);
117     //cout<<"normaldistanceabs= "<<normaldistanceabs<<endl;
118     lstdist.insert(pair<double,MG_NOEUD*>(normaldistanceabs,nop));
119     }
120     map<double,MG_NOEUD*,std::less<double> >::iterator itlstdist=lstdist.begin();
121     double distnsclos=(*itlstdist).first;
122     MG_NOEUD* nodcls=(*itlstdist).second;
123     //cout<<"distnsclos= "<<distnsclos<<endl;
124     mgsol->ecrire(distnsclos,i,0,0);
125     //mgsol->ecrire(distnsclos,1,0,0);
126     i++;
127 sattarpa 554 }
128 sattarpa 596 refgest.enregistrer(outputcomparefile);
129     }
130 sattarpa 609 void CRIAQOPERATORS::deformed_correspond_mgmaiadd(char* magicfilename,int meshno,int numsol1,int numsol2,int numsol3,int numchamp1,int numchamp2,int numchamp3,double coef)
131     {
132     MG_FILE gest(magicfilename);
133     FEM_MAILLAGE* femmai;
134     if (meshno==0) femmai=gest.get_fem_maillage(meshno); else femmai=gest.get_fem_maillageid(meshno);
135     FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
136     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
137     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
138     femmai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
139     if (coef>1e-16)
140     {
141     cout<<" Création du maillage deforme avec correspondence text file"<<endl;
142     MG_MAILLAGE* defmgmai=new MG_MAILLAGE(gest.get_mg_geometrie(0));
143     gest.ajouter_mg_maillage(defmgmai);
144     {
145     if (femmai->get_degre()==1)
146     {
147     //gest=femmai->get_mg_maillage()->get_gestionnaire();
148     //gest->ajouter_mg_maillage(this);
149     std::vector<unsigned long*> lstcores;//sasan
150     LISTE_FEM_NOEUD::iterator it;
151     for (FEM_NOEUD* no=femmai->get_premier_noeud(it);no!=NULL;no=femmai->get_suivant_noeud(it))
152     {
153     double x=no->get_x(coef);
154     double y=no->get_y(coef);
155     double z=no->get_z(coef);
156     MG_NOEUD *newno=new MG_NOEUD(no->get_lien_topologie(),x,y,z,DEFORME);
157     defmgmai->ajouter_mg_noeud(newno);
158     no->change_numero(newno->get_id());
159     unsigned long* correscad_defcad=new unsigned long[2];//sasan
160     correscad_defcad[0]=no->get_mg_element_maillage()->get_id();//sasan
161     correscad_defcad[1]=newno->get_id();//sasan
162     lstcores.push_back(correscad_defcad);//sasan
163     }
164     //sasan
165     FILE* in1=fopen("correspond_deform_mgmaill.txt","wt");
166     fprintf(in1,"MG_MAILLAGE No. : deformed_MAILLAGE No.\n",femmai->get_mg_maillage()->get_id(),defmgmai->get_id());
167     fprintf(in1,"%lu %lu\n",femmai->get_mg_maillage()->get_id(),defmgmai->get_id());
168     for(std::vector<unsigned long*>::iterator itlstpinsert=lstcores.begin();itlstpinsert!=lstcores.end();itlstpinsert++)
169     {
170     unsigned long* xyzpins1;
171     xyzpins1=(*itlstpinsert);
172     //cout<<" xyzpins1[0]= "<<xyzpins1[0]<<" xyzpins1[1]= "<<xyzpins1[1]<<endl;
173     fprintf(in1,"%lu %lu\n",xyzpins1[0],xyzpins1[1]);
174     }
175     fclose(in1);
176     //sasan till
177     LISTE_FEM_ELEMENT1::iterator it1;
178     for (FEM_ELEMENT1 *ele=femmai->get_premier_element1(it1);ele!=NULL;ele=femmai->get_suivant_element1(it1))
179     {
180     MG_NOEUD* no1=defmgmai->get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
181     MG_NOEUD* no2=defmgmai->get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
182     MG_SEGMENT *seg=new MG_SEGMENT(ele->get_lien_topologie(),no1,no2,DEFORME);
183     defmgmai->ajouter_mg_segment(seg);
184     }
185     LISTE_FEM_ELEMENT2::iterator it2;
186     for (FEM_ELEMENT2 *ele=femmai->get_premier_element2(it2);ele!=NULL;ele=femmai->get_suivant_element2(it2))
187     {
188     if (ele->get_nb_fem_noeud()==3)
189     {
190     MG_NOEUD* no1=defmgmai->get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
191     MG_NOEUD* no2=defmgmai->get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
192     MG_NOEUD* no3=defmgmai->get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
193     defmgmai->ajouter_mg_triangle(ele->get_lien_topologie(),no1,no2,no3,DEFORME);
194     }
195     if (ele->get_nb_fem_noeud()==4)
196     {
197     MG_NOEUD* no1=defmgmai->get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
198     MG_NOEUD* no2=defmgmai->get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
199     MG_NOEUD* no3=defmgmai->get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
200     MG_NOEUD* no4=defmgmai->get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
201     defmgmai->ajouter_mg_quadrangle(ele->get_lien_topologie(),no1,no2,no3,no4,DEFORME);
202     }
203     }
204     LISTE_FEM_ELEMENT3::iterator it3;
205     for (FEM_ELEMENT3 *ele=femmai->get_premier_element3(it3);ele!=NULL;ele=femmai->get_suivant_element3(it3))
206     {
207     if (ele->get_nb_fem_noeud()==4)
208     {
209     MG_NOEUD* no1=defmgmai->get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
210     MG_NOEUD* no2=defmgmai->get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
211     MG_NOEUD* no3=defmgmai->get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
212     MG_NOEUD* no4=defmgmai->get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
213     defmgmai->ajouter_mg_tetra(ele->get_lien_topologie(),no1,no2,no3,no4,DEFORME);
214     }
215     if (ele->get_nb_fem_noeud()==8)
216     {
217     MG_NOEUD* no1=defmgmai->get_mg_noeudid(ele->get_fem_noeud(0)->get_numero());
218     MG_NOEUD* no2=defmgmai->get_mg_noeudid(ele->get_fem_noeud(1)->get_numero());
219     MG_NOEUD* no3=defmgmai->get_mg_noeudid(ele->get_fem_noeud(2)->get_numero());
220     MG_NOEUD* no4=defmgmai->get_mg_noeudid(ele->get_fem_noeud(3)->get_numero());
221     MG_NOEUD* no5=defmgmai->get_mg_noeudid(ele->get_fem_noeud(4)->get_numero());
222     MG_NOEUD* no6=defmgmai->get_mg_noeudid(ele->get_fem_noeud(5)->get_numero());
223     MG_NOEUD* no7=defmgmai->get_mg_noeudid(ele->get_fem_noeud(6)->get_numero());
224     MG_NOEUD* no8=defmgmai->get_mg_noeudid(ele->get_fem_noeud(7)->get_numero());
225     defmgmai->ajouter_mg_hexa(ele->get_lien_topologie(),no1,no2,no3,no4,no5,no6,no7,no8,DEFORME);
226     }
227     }
228    
229     }
230     }
231     }
232     cout<<" Enregistrement"<<endl;
233     gest.enregistrer(magicfilename);
234     }
235     void CRIAQOPERATORS::curvtur_crit_remvsmp(char* magicfilename,char* correspondfilename,char* gnifinspointfile,char* out_gnifinspointfile_removondefect,double search_radius,double curvdif_coef)
236     {
237     MG_FILE gest(magicfilename);
238     map<unsigned long, unsigned long> coresspondndidlst;
239     FILE* in1=fopen(correspondfilename,"rt");
240     if (in1==NULL) cout<<"correspondfile is not available"<<endl;
241     char mess[500];
242     char *res=fgets(mess,500,in1);
243     res=fgets(mess,500,in1);
244     int cadmeshno;
245     int defcadmeshno;
246     int nb1=sscanf(mess,"%ld %ld",&cadmeshno,&defcadmeshno);
247     while (!feof(in1))
248     {
249     char chaine[500];
250     fgets(chaine,500,in1);
251     unsigned long cadndid;
252     unsigned long defcadndid;
253     int nb=sscanf(chaine,"%lu %lu",&cadndid,&defcadndid);
254     //cout<<"nb= "<<nb<<endl;
255     if (nb!=-1 && nb!=2) cout<<"Wrong file format"<<endl;
256     else if (nb==2)
257     {
258     //cout<<"defcadndid= "<<defcadndid<<" cadndid= "<<cadndid<<endl;
259     coresspondndidlst.insert(pair<unsigned long, unsigned long> (defcadndid,cadndid) );
260     }
261     }
262     fclose(in1);
263     cout<<"cadmeshno= "<<cadmeshno<<" defcadmeshno= "<<defcadmeshno<<endl;
264     MG_MAILLAGE* cadmgmai;
265     if (cadmeshno==0) cadmgmai=gest.get_mg_maillage(cadmeshno); else cadmgmai=gest.get_mg_maillageid(cadmeshno);
266     MG_MAILLAGE* defcadmgmai;
267     if (defcadmeshno==0) defcadmgmai=gest.get_mg_maillage(defcadmeshno); else defcadmgmai=gest.get_mg_maillageid(defcadmeshno);
268     LISTE_MG_NOEUD::iterator itdefcadndcurv;
269     //FEM_MAILLAGE_OUTILS fmu;
270     //fmu.calcul_courbure();
271     //MG_MAILLAGE_OUTILS mu;
272     //mu.calcul_courbure_discrete(gest,(char*)"discrt_cad_curvsol_casA.sol",cadmeshno,(char*)"discrt_cad_curvsol_casA",1);
273     //mu.calcul_courbure_discrete(gest,(char*)"discrt_defcad_curvsol_casA.sol",defcadmeshno,(char*)"discrt_defcad_curvsol_casA",1);
274     //gest.enregistrer(magicfilename);
275     multimap<double,MG_NOEUD*,std::greater<double> > lstkmin_cadmgmai;
276     multimap<double,MG_NOEUD*,std::greater<double> > lstkmax_cadmgmai;
277     multimap<double,MG_NOEUD*,std::greater<double> > lstkmin_defcadmgmai;
278     multimap<double,MG_NOEUD*,std::greater<double> > lstkmax_defcadmgmai;
279     std::map<std::string,double> liste_kmin;
280     std::map<std::string,double> liste_kmax;
281     std::map<std::string,double> liste_gau;
282     std::map<std::string,double> liste_courburemax1;
283     std::map<std::string,double> liste_courburemax2;
284     std::map<std::string,double> liste_courburemax3;
285     std::map<std::string,double> liste_courburemax4;
286     std::map<std::string,double> liste_courburemax5;
287     int opensurafece=1;
288     LISTE_MG_NOEUD::iterator itcadndcurv;
289     cout<<"calcul courbure cadmgmai"<<endl;
290     // calcul courbure cadmgmai ********************************
291     for (MG_NOEUD* cadmgnd=cadmgmai->get_premier_noeud(itcadndcurv);cadmgnd!=NULL;cadmgnd=cadmgmai->get_suivant_noeud(itcadndcurv))
292     {
293     double kmin1=0.;
294     double kmax1=0.;
295     double kmin2=0.;
296     double kmax2=0.;
297     MG_MAILLAGE_OUTILS *cou;
298     cou->calcul_courbure_face_arete_sommet(cadmgnd,kmin1,kmax1,kmin2,kmax2,liste_kmin,liste_kmax,liste_gau,liste_courburemax1,liste_courburemax2,liste_courburemax3,liste_courburemax4,liste_courburemax5,opensurafece);
299     }
300     for (MG_NOEUD* cadmgnd=cadmgmai->get_premier_noeud(itcadndcurv);cadmgnd!=NULL;cadmgnd=cadmgmai->get_suivant_noeud(itcadndcurv))
301     {
302     unsigned long idface=cadmgnd->get_lien_topologie()->get_id();
303     unsigned long idnoeud=cadmgnd->get_id();
304     char mess[500];
305     sprintf(mess,"%lu_%lu",idnoeud,idface);
306     for(std::map<std::string,double>::iterator itkmin=liste_kmin.begin();itkmin!=liste_kmin.end();itkmin++)
307     {
308     if(mess==(*itkmin).first)
309     {
310     lstkmin_cadmgmai.insert(pair<double,MG_NOEUD*>((*itkmin).second,cadmgnd) );
311     //cout<<"for cadmgnd->get_id(): "<<cadmgnd->get_id()<<" kmin is:"<<(*itkmin).second<<endl;
312     }
313     }
314     for(std::map<std::string,double>::iterator itkmax=liste_kmax.begin();itkmax!=liste_kmax.end();itkmax++)
315     {
316     if(mess==(*itkmax).first)
317     {
318     lstkmax_cadmgmai.insert(pair<double,MG_NOEUD*>((*itkmax).second,cadmgnd) );
319     //cout<<"for cadmgnd->get_id(): "<<cadmgnd->get_id()<<" kmin is:"<<(*itkmin).second<<endl;
320     }
321     }
322     }
323     liste_kmin.clear();liste_kmax.clear();liste_gau.clear();liste_courburemax1.clear();liste_courburemax2.clear();liste_courburemax3.clear();liste_courburemax4.clear();liste_courburemax5.clear();
324     cout<<"calcul courbure defcadmgmai"<<endl;
325     // calcul courbure defcadmgmai ********************************
326 sattarpa 554
327 sattarpa 609 for (MG_NOEUD* defcadmgnd=defcadmgmai->get_premier_noeud(itdefcadndcurv);defcadmgnd!=NULL;defcadmgnd=defcadmgmai->get_suivant_noeud(itdefcadndcurv))
328     {
329     double kmin1=0.;
330     double kmax1=0.;
331     double kmin2=0.;
332     double kmax2=0.;
333     MG_MAILLAGE_OUTILS *cou;
334     cou->calcul_courbure_face_arete_sommet(defcadmgnd,kmin1,kmax1,kmin2,kmax2,liste_kmin,liste_kmax,liste_gau,liste_courburemax1,liste_courburemax2,liste_courburemax3,liste_courburemax4,liste_courburemax5,opensurafece);
335     }
336     for (MG_NOEUD* defcadmgnd=defcadmgmai->get_premier_noeud(itdefcadndcurv);defcadmgnd!=NULL;defcadmgnd=defcadmgmai->get_suivant_noeud(itdefcadndcurv))
337     {
338     unsigned long idface=defcadmgnd->get_lien_topologie()->get_id();
339     unsigned long idnoeud=defcadmgnd->get_id();
340     char mess[500];
341     sprintf(mess,"%lu_%lu",idnoeud,idface);
342     for(std::map<std::string,double>::iterator itkmin=liste_kmin.begin();itkmin!=liste_kmin.end();itkmin++)
343     {
344     if(mess==(*itkmin).first)
345     {
346     lstkmin_defcadmgmai.insert(pair<double,MG_NOEUD*>((*itkmin).second,defcadmgnd) );
347     //cout<<"for defcadmgnd->get_id(): "<<defcadmgnd->get_id()<<" kmin is:"<<(*itkmin).second<<endl;
348     }
349     }
350     for(std::map<std::string,double>::iterator itkmax=liste_kmax.begin();itkmax!=liste_kmax.end();itkmax++)
351     {
352     if(mess==(*itkmax).first)
353     {
354     lstkmax_defcadmgmai.insert(pair<double,MG_NOEUD*>((*itkmax).second,defcadmgnd) );
355     //cout<<"for defcadmgnd->get_id(): "<<defcadmgnd->get_id()<<" kmin is:"<<(*itkmin).second<<endl;
356     }
357     }
358     }
359     ///make correspondence between cadmgmai and defcadmgmai nodes
360     map<unsigned long, unsigned long>::iterator itcoresspondndidlst;
361     for(MG_NOEUD* defcadndcurv=defcadmgmai->get_premier_noeud(itdefcadndcurv);defcadndcurv!=NULL;defcadndcurv=defcadmgmai->get_suivant_noeud(itdefcadndcurv))
362     {
363     itcoresspondndidlst=coresspondndidlst.find(defcadndcurv->get_id());
364     //cout<<"defcadndcurv->get_nouveau_numero() before= "<<defcadndcurv->get_nouveau_numero()<<endl;
365     //cout<<"defcadndcurv->get_id() before= "<<defcadndcurv->get_id()<<endl;
366     //cout<<"(*itcoresspondndidlst).second= "<<(*itcoresspondndidlst).second<<endl;
367     defcadndcurv->change_nouveau_numero((*itcoresspondndidlst).second);
368     }
369     //for(MG_NOEUD* defcadndcurv=defcadmgmai->get_premier_noeud(itdefcadndcurv);defcadndcurv!=NULL;defcadndcurv=defcadmgmai->get_suivant_noeud(itdefcadndcurv))
370     //cout<<"defcadndcurv->get_nouveau_numero() = "<<defcadndcurv->get_nouveau_numero()<<endl;
371    
372     cout<<"solution calculation"<<endl;
373     multimap<double,MG_NOEUD*,std::greater<double> > lstkmin_diff;
374     multimap<double,MG_NOEUD*,std::greater<double> > lstkmax_diff;
375     multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstkmin_cadmgmai;
376     multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstkmax_cadmgmai;
377     multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstkmin_defcadmgmai;
378     multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstkmax_defcadmgmai;
379     cout<<"lstkmin_cadmgmai.size()= "<<lstkmin_cadmgmai.size()<<endl;
380     cout<<"lstkmin_defcadmgmai.size()= "<<lstkmin_defcadmgmai.size()<<endl;
381 sattarpa 596
382 sattarpa 609 for(itlstkmin_cadmgmai=lstkmin_cadmgmai.begin();itlstkmin_cadmgmai!=lstkmin_cadmgmai.end();itlstkmin_cadmgmai++)
383 sattarpa 554 {
384 sattarpa 609 MG_NOEUD* cadndcurv=(*itlstkmin_cadmgmai).second;
385     double kmindcad;
386     double kmindcad_def;
387     kmindcad=(*itlstkmin_cadmgmai).first;
388     //cout<<"(*itlstkmin_cadmgmai).first= "<<(*itlstkmin_cadmgmai).first<<endl;
389     for(itlstkmin_defcadmgmai=lstkmin_defcadmgmai.begin();itlstkmin_defcadmgmai!=lstkmin_defcadmgmai.end();itlstkmin_defcadmgmai++)
390     {
391     MG_NOEUD* defcadndcurv=(*itlstkmin_defcadmgmai).second;
392     //cout<<"defcadndcurv->get_nouveau_numero()= "<<defcadndcurv->get_nouveau_numero()<<endl;
393     //cout<<"cadndcurv->get_id()= "<<cadndcurv->get_id()<<endl;
394     if(defcadndcurv->get_nouveau_numero()==cadndcurv->get_id())
395     {
396     kmindcad_def=(*itlstkmin_defcadmgmai).first;
397     //cout<<"(*itlstkmin_defcadmgmai).first= "<<(*itlstkmin_defcadmgmai).first<<endl;
398     }
399     }
400    
401     double kmin_diff=kmindcad_def-kmindcad;
402     lstkmin_diff.insert(pair<double,MG_NOEUD*>(kmin_diff,cadndcurv) );
403     }
404     cout<<"kmax started"<<endl;
405     for(itlstkmax_cadmgmai=lstkmax_cadmgmai.begin();itlstkmax_cadmgmai!=lstkmax_cadmgmai.end();itlstkmax_cadmgmai++)
406     {
407     MG_NOEUD* cadndcurv=(*itlstkmax_cadmgmai).second;
408     double kmaxndcad;
409     double kmaxndcad_def;
410     kmaxndcad=(*itlstkmax_cadmgmai).first;
411     for(itlstkmax_defcadmgmai=lstkmax_defcadmgmai.begin();itlstkmax_defcadmgmai!=lstkmax_defcadmgmai.end();itlstkmax_defcadmgmai++)
412     {
413     MG_NOEUD* defcadndcurv=(*itlstkmax_defcadmgmai).second;
414     if(defcadndcurv->get_nouveau_numero()==cadndcurv->get_id())
415     {
416     kmaxndcad_def=(*itlstkmax_defcadmgmai).first;
417     }
418     }
419     double kmax_diff=kmaxndcad_def-kmaxndcad;
420     lstkmax_diff.insert(pair<double,MG_NOEUD*>(kmax_diff,cadndcurv) );
421     }
422    
423     cout<<"read insert points in lstpinsert"<<endl;
424     //read insert points in lstpinsert
425     std::vector<double*> lstpinsert;
426     double prop=0.001;
427     FILE *in=fopen(gnifinspointfile,"rt");
428     if (in==NULL) cout<<"file is not available"<<endl;
429     while (!feof(in))
430     {
431     char chaine[500];
432     fgets(chaine,500,in);
433     double x,y,z;
434     double q1,q2,q3;
435     int nb=sscanf(chaine,"%le %le %le %le %le %le",&x,&y,&z,&q1,&q2,&q3);
436     q1=prop*q1;
437     q2=prop*q2;
438     q3=prop*q3;
439     if (nb!=-1 && nb!=6) cout<<"Wrong file format"<<endl;
440     else if (nb==6)
441     {
442     double* pcoordbc=new double[6];
443     pcoordbc[0]=x; pcoordbc[1]=y; pcoordbc[2]=z; pcoordbc[3]=q1; pcoordbc[4]=q2; pcoordbc[5]=q3;
444     lstpinsert.push_back(pcoordbc);
445     }
446     }
447     fclose(in);
448     cout<<"octree initialization "<<endl;
449     //octree initialization
450     double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
451     TPL_MAP_ENTITE<MG_NOEUD*> lstnoeud;
452     //LISTE_MG_NOEUD::iterator it;
453     for(MG_NOEUD* cadndcurv=cadmgmai->get_premier_noeud(itcadndcurv);cadndcurv!=NULL;cadndcurv=cadmgmai->get_suivant_noeud(itcadndcurv))
454     {
455     if (cadndcurv->get_x()<xmin) xmin=cadndcurv->get_x();
456     if (cadndcurv->get_y()<ymin) ymin=cadndcurv->get_y();
457     if (cadndcurv->get_z()<zmin) zmin=cadndcurv->get_z();
458     if (cadndcurv->get_x()>xmax) xmax=cadndcurv->get_x();
459     if (cadndcurv->get_y()>ymax) ymax=cadndcurv->get_y();
460     if (cadndcurv->get_z()>zmax) zmax=cadndcurv->get_z();
461     lstnoeud.ajouter(cadndcurv);
462     }
463     OT_VECTEUR_3D vecmin(xmin,ymin,zmin);OT_VECTEUR_3D vecmmax(xmax,ymax,zmax);
464     OT_VECTEUR_3D vec(vecmmax,vecmin);
465    
466     //double search_radius=0.001*(vec.get_longueur());
467     // double search_radius=2.;///sasan this should be as a parameter
468     OT_VECTEUR_3D min(xmin,ymin,zmin); OT_VECTEUR_3D max(xmax,ymax,zmax); OT_VECTEUR_3D average=(min+max)/2.; OT_VECTEUR_3D lengthvec(min,max);
469     double length=sqrt(lengthvec*lengthvec); double bxr=1.1;
470     xmin=average.get_x()-(length*bxr);ymin=average.get_y()-(length*bxr);zmin=average.get_z()-(length*bxr);
471     xmax=average.get_x()+(length*bxr);ymax=average.get_y()+(length*bxr);zmax=average.get_z()+(length*bxr);
472    
473     TPL_OCTREE<MG_NOEUD*,MG_NOEUD*> octree;
474     octree.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
475     for(MG_NOEUD* cadndcurv=cadmgmai->get_premier_noeud(itcadndcurv);cadndcurv!=NULL;cadndcurv=cadmgmai->get_suivant_noeud(itcadndcurv))
476     octree.inserer(cadndcurv);
477     //criterion
478     multimap<double,MG_NOEUD*,std::greater<double> >::reverse_iterator ritlstkmin_cadmgmai;
479     multimap<double,MG_NOEUD*,std::greater<double> >::reverse_iterator ritlstkmax_cadmgmai;
480     multimap<double,MG_NOEUD*,std::greater<double> >::reverse_iterator ritlstkmin_defcadmgmai;
481     multimap<double,MG_NOEUD*,std::greater<double> >::reverse_iterator ritlstkmax_defcadmgmai;
482     ritlstkmin_cadmgmai=lstkmin_cadmgmai.rbegin(); double kmin_cad_min=(*ritlstkmin_cadmgmai).first;
483     itlstkmin_cadmgmai=lstkmin_cadmgmai.begin(); double kmin_cad_max=(*itlstkmin_cadmgmai).first;
484     ritlstkmax_cadmgmai=lstkmax_cadmgmai.rbegin(); double kmax_cad_min=(*ritlstkmax_cadmgmai).first;
485     itlstkmax_cadmgmai=lstkmax_cadmgmai.begin(); double kmax_cad_max=(*itlstkmax_cadmgmai).first;
486     ritlstkmin_defcadmgmai=lstkmin_defcadmgmai.rbegin(); double kmin_defcad_min=(*ritlstkmin_defcadmgmai).first;
487     itlstkmin_defcadmgmai=lstkmin_defcadmgmai.begin(); double kmin_defcad_max=(*itlstkmin_defcadmgmai).first;
488     ritlstkmax_defcadmgmai=lstkmax_defcadmgmai.rbegin(); double kmax_defcad_min=(*ritlstkmax_defcadmgmai).first;
489     itlstkmax_defcadmgmai=lstkmax_defcadmgmai.begin(); double kmax_defcad_max=(*itlstkmax_defcadmgmai).first;
490     cout<<"kmin_cad_min= "<<kmin_cad_min<<" kmin_cad_max= "<<kmin_cad_max<<endl;
491     cout<<"kmin_defcad_min= "<<kmin_defcad_min<<" kmin_defcad_max= "<<kmin_defcad_max<<endl;
492     //cout<<" kmin_defcad_min= "<<kmin_defcad_min<<" kmin_cad_min= "<<kmin_cad_min<<" kmin_defcad_max= "<<kmin_defcad_max<<" kmin_cad_max= "<<kmin_cad_max
493     double crikmin_min=curvdif_coef*(kmin_defcad_min-kmin_cad_min)+kmin_cad_min;///the coefficient should be a parameter
494     double crikmin_max=curvdif_coef*(kmin_defcad_max-kmin_cad_max)+kmin_cad_max;///the coefficient should be a parameter
495     double crikmax_min=curvdif_coef*(kmax_defcad_min-kmax_cad_min)+kmax_cad_min;///the coefficient should be a parameter
496     double crikmax_max=curvdif_coef*(kmax_defcad_max-kmax_cad_max)+kmax_cad_max;///the coefficient should be a parameter
497     cout<<"crikmin_min= "<<crikmin_min<<" crikmin_max= "<<crikmin_max<<" crikmax_min= "<<crikmax_min<<" crikmax_max= "<<crikmax_max<<endl;
498     cout<<"for Kmin"<<endl;
499     //for kmin
500     //int l=0;
501     //int ll=0;
502     cout<<"lstkmin_diff.size()= "<<lstkmin_diff.size()<<endl;
503     cout<<"lstkmax_diff.size()= "<<lstkmax_diff.size()<<endl;
504     TPL_MAP_ENTITE<MG_NOEUD*> lstneipdefect;
505     multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstkmin_diff;
506     for (itlstkmin_diff=lstkmin_diff.begin();itlstkmin_diff!=lstkmin_diff.end();itlstkmin_diff++)
507     {
508     //l++; cout<<"l"<<l<<endl;
509     //if(l>7430)
510     {
511     if((crikmin_max<(*itlstkmin_diff).first) || (crikmin_min>(*itlstkmin_diff).first))
512     {
513     //ll++; cout<<"ll"<<ll<<endl;
514     MG_NOEUD* piefect=(*itlstkmin_diff).second;
515     int neindnb=lstneipdefect.get_nb();
516     double search_radius1=search_radius;
517     while(neindnb==0)
518     {
519     octree.rechercher(piefect->get_x(),piefect->get_y(),piefect->get_z(),search_radius1,lstneipdefect);
520     neindnb=lstneipdefect.get_nb();
521     search_radius1=search_radius1+0.1*search_radius;
522     //cout<<"search_radius= "<<search_radius<<endl;
523     }
524     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itndnei;
525     for(MG_NOEUD* ndnei=lstneipdefect.get_premier(itndnei);ndnei!=NULL;ndnei=lstneipdefect.get_suivant(itndnei))
526     {
527     for(std::vector<double*>::iterator itlstpinsert=lstpinsert.begin();itlstpinsert!=lstpinsert.end();itlstpinsert++)
528     {
529     double* xyzpins;
530     xyzpins=(*itlstpinsert);
531     if(ndnei->get_x()==xyzpins[0] && ndnei->get_y()==xyzpins[1] && ndnei->get_z()==xyzpins[2])
532     {
533     //cout<<"fendnei->get_x()==xyzpins[0] && fendnei->get_y()==xyzpins[1] && fendnei->get_z()==xyzpins[2]"<<endl;
534     lstpinsert.erase(itlstpinsert);
535     }
536     }
537     }
538     lstneipdefect.vide();
539     }
540     }
541     }
542     cout<<"for Kmax"<<endl;
543     //for kmax
544     multimap<double,MG_NOEUD*,std::greater<double> >::iterator itlstkmax_diff;
545     for (itlstkmax_diff=lstkmax_diff.begin();itlstkmax_diff!=lstkmax_diff.end();itlstkmax_diff++)
546     {
547     if((crikmax_max<(*itlstkmax_diff).first) || (crikmax_min>(*itlstkmax_diff).first))
548     {
549     MG_NOEUD* piefect=(*itlstkmax_diff).second;
550     TPL_MAP_ENTITE<MG_NOEUD*> lstneipdefect;
551     int neindnb=lstneipdefect.get_nb();
552     double search_radius1=search_radius;
553     while(neindnb==0)
554     {
555     octree.rechercher(piefect->get_x(),piefect->get_y(),piefect->get_z(),search_radius1,lstneipdefect);
556     neindnb=lstneipdefect.get_nb();
557     search_radius1=search_radius1+0.1*search_radius;
558     }
559     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itndnei;
560     for(MG_NOEUD* ndnei=lstneipdefect.get_premier(itndnei);ndnei!=NULL;ndnei=lstneipdefect.get_suivant(itndnei))
561     {
562     for(std::vector<double*>::iterator itlstpinsert=lstpinsert.begin();itlstpinsert!=lstpinsert.end();itlstpinsert++)
563     {
564     double* xyzpins;
565     xyzpins=(*itlstpinsert);
566     if(ndnei->get_x()==xyzpins[0] && ndnei->get_y()==xyzpins[1] && ndnei->get_z()==xyzpins[2])
567     {
568     //cout<<"fendnei->get_x()==xyzpins[0] && fendnei->get_y()==xyzpins[1] && fendnei->get_z()==xyzpins[2]"<<endl;
569     lstpinsert.erase(itlstpinsert);
570     }
571     }
572     }
573    
574     }
575     }
576     FILE* in2=fopen(out_gnifinspointfile_removondefect,"wt");
577     for(std::vector<double*>::iterator itlstpinsert=lstpinsert.begin();itlstpinsert!=lstpinsert.end();itlstpinsert++)
578     {
579     double* xyzpins1;
580     xyzpins1=(*itlstpinsert);
581     fprintf(in2,"%lf %lf %lf %lf %lf %lf\n",xyzpins1[0],xyzpins1[1],xyzpins1[2],xyzpins1[3]*1000.,xyzpins1[4]*1000.,xyzpins1[5]*1000.);
582     }
583     fclose(in2);
584    
585     }
586     void CRIAQOPERATORS::vm_crit_remvsmp(int femmeshno,char* magicfilename,int femsolid,int femsubsolno,char* gnifinspointfile,char* out_gnifinspointfile_removondefect,double search_radius,double vm_coef)
587     {
588 sattarpa 554 MG_FILE gest(magicfilename);
589 sattarpa 596 FEM_MAILLAGE* femmai;
590     if (femmeshno==0) femmai=gest.get_fem_maillage(femmeshno); else femmai=gest.get_fem_maillageid(femmeshno);
591     FEM_SOLUTION* femsol=gest.get_fem_solutionid(femsolid);
592     femsol->active_solution(femsubsolno);
593    
594     std::map<double,FEM_NOEUD*,std::greater<double> > mpsol;
595     LISTE_FEM_NOEUD::iterator itfemnds;
596     for(FEM_NOEUD* nod=femmai->get_premier_noeud(itfemnds);nod!=NULL;nod=femmai->get_suivant_noeud(itfemnds))
597     {
598 sattarpa 609 nod->get_mg_element_maillage()->get_id();
599 sattarpa 596 mpsol.insert(pair<double,FEM_NOEUD*> (nod->get_solution(),nod));
600     //cout<<"nod->get_solution()= "<<nod->get_solution()<<endl;
601     //if(nod->get_solution()<=1.e-20 && nod->get_solution()!=0.)
602     //cout<<nod->get_id()<<" : "<<nod->get_solution()<<endl;
603     }
604     std::map<double,FEM_NOEUD*,std::greater<double> >::iterator itmpsol=mpsol.begin();
605    
606     double maxi=(*itmpsol).first;
607     itmpsol=mpsol.end();
608     double mini=(*itmpsol).first;
609 sattarpa 609 double crit=vm_coef*(maxi+mini)/2.;
610 sattarpa 596 //cout<<"critreion value= "<<crit<<endl;
611     std::vector<double*> lstpinsert;
612     double prop=0.001;
613     FILE *in=fopen(gnifinspointfile,"rt");
614     if (in==NULL) cout<<"file is not available"<<endl;
615     while (!feof(in))
616     {
617     char chaine[500];
618     fgets(chaine,500,in);
619     double x,y,z;
620     double q1,q2,q3;
621     int nb=sscanf(chaine,"%le %le %le %le %le %le",&x,&y,&z,&q1,&q2,&q3);
622     q1=prop*q1;
623     q2=prop*q2;
624     q3=prop*q3;
625     if (nb!=-1 && nb!=6) cout<<"Wrong file format"<<endl;
626     else if (nb==6)
627     {
628     double* pcoordbc=new double[6];
629     pcoordbc[0]=x; pcoordbc[1]=y; pcoordbc[2]=z; pcoordbc[3]=q1; pcoordbc[4]=q2; pcoordbc[5]=q3;
630     lstpinsert.push_back(pcoordbc);
631     }
632     }
633     fclose(in);
634    
635    
636     //octree initialization
637     double xmin=1e308,ymin=1e308,zmin=1e308,xmax=-1e308,ymax=-1e308,zmax=-1e308;
638     TPL_MAP_ENTITE<FEM_NOEUD*> lstnoeud;
639     LISTE_FEM_NOEUD::iterator it;
640     for (FEM_NOEUD* no=femmai->get_premier_noeud(it);no!=NULL;no=femmai->get_suivant_noeud(it))
641     {
642     if (no->get_x()<xmin) xmin=no->get_x();
643     if (no->get_y()<ymin) ymin=no->get_y();
644     if (no->get_z()<zmin) zmin=no->get_z();
645     if (no->get_x()>xmax) xmax=no->get_x();
646     if (no->get_y()>ymax) ymax=no->get_y();
647     if (no->get_z()>zmax) zmax=no->get_z();
648     lstnoeud.ajouter(no);
649     }
650     OT_VECTEUR_3D vecmin(xmin,ymin,zmin);OT_VECTEUR_3D vecmmax(xmax,ymax,zmax);
651     OT_VECTEUR_3D vec(vecmmax,vecmin);
652    
653     //double search_radius=0.001*(vec.get_longueur());
654 sattarpa 609 //double search_radius=2.; //sasan this should be as a parameter
655 sattarpa 596 OT_VECTEUR_3D min(xmin,ymin,zmin); OT_VECTEUR_3D max(xmax,ymax,zmax); OT_VECTEUR_3D average=(min+max)/2.; OT_VECTEUR_3D lengthvec(min,max);
656     double length=sqrt(lengthvec*lengthvec); double bxr=1.1;
657     xmin=average.get_x()-(length*bxr);ymin=average.get_y()-(length*bxr);zmin=average.get_z()-(length*bxr);
658     xmax=average.get_x()+(length*bxr);ymax=average.get_y()+(length*bxr);zmax=average.get_z()+(length*bxr);
659    
660     TPL_OCTREE<FEM_NOEUD*,FEM_NOEUD*> octree;
661     octree.initialiser(&lstnoeud,1,xmin,ymin,zmin,xmax,ymax,zmax);
662     for (FEM_NOEUD* no=femmai->get_premier_noeud(it);no!=NULL;no=femmai->get_suivant_noeud(it))
663     octree.inserer(no);
664    
665     for (itmpsol=mpsol.begin();itmpsol!=mpsol.end();itmpsol++)
666     {
667     if(crit<(*itmpsol).first)
668     {
669     FEM_NOEUD* pdefect=(*itmpsol).second;
670     TPL_MAP_ENTITE<FEM_NOEUD*> lstneipdefect;
671     int neindnb=lstneipdefect.get_nb();
672 sattarpa 609 double search_radius1=search_radius;
673 sattarpa 596 while(neindnb==0)
674     {
675 sattarpa 609 octree.rechercher(pdefect->get_x(),pdefect->get_y(),pdefect->get_z(),search_radius1,lstneipdefect);
676 sattarpa 596 neindnb=lstneipdefect.get_nb();
677 sattarpa 609 search_radius1=search_radius1+0.1*search_radius;
678 sattarpa 596 }
679     TPL_MAP_ENTITE<FEM_NOEUD*>::ITERATEUR itfendnei;
680     for(FEM_NOEUD* fendnei=lstneipdefect.get_premier(itfendnei);fendnei!=NULL;fendnei=lstneipdefect.get_suivant(itfendnei))
681     {
682     // std::map<double*,double*,std::less<double*> >::iterator itlstpinsert=lstpinsert.begin();//itlstpinsert!=lstpinsert.end();itlstpinsert++
683     for(std::vector<double*>::iterator itlstpinsert=lstpinsert.begin();itlstpinsert!=lstpinsert.end();itlstpinsert++)
684     {
685     double* xyzpins;
686     xyzpins=(*itlstpinsert);
687     if(fendnei->get_x()==xyzpins[0] && fendnei->get_y()==xyzpins[1] && fendnei->get_z()==xyzpins[2])
688     {
689     //cout<<"fendnei->get_x()==xyzpins[0] && fendnei->get_y()==xyzpins[1] && fendnei->get_z()==xyzpins[2]"<<endl;
690     lstpinsert.erase(itlstpinsert);
691     }
692     }
693     }
694    
695     }
696    
697     }
698    
699     FILE* in1=fopen(out_gnifinspointfile_removondefect,"wt");
700     for(std::vector<double*>::iterator itlstpinsert=lstpinsert.begin();itlstpinsert!=lstpinsert.end();itlstpinsert++)
701     {
702     double* xyzpins1;
703     xyzpins1=(*itlstpinsert);
704     fprintf(in1,"%lf %lf %lf %lf %lf %lf\n",xyzpins1[0],xyzpins1[1],xyzpins1[2],xyzpins1[3]*1000.,xyzpins1[4]*1000.,xyzpins1[5]*1000.);
705     }
706     fclose(in1);
707     }
708     void CRIAQOPERATORS::surfmaker_e1(char* outputfilename,int meshno,char* magicfilename)
709     {
710     MG_FILE gest(magicfilename);
711 sattarpa 554 MG_GEOMETRIE* geo=gest.get_mg_geometrie(0);
712     MG_MAILLAGE* mai;
713     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
714     //MG_FILE gest((char*)"longflxprtwithpockets_3d_3mm.magic");
715     //MG_GEOMETRIE* geo=gest.get_mg_geometrieid(1);
716     //MG_MAILLAGE* mai=gest.get_mg_maillageid(5674824);
717     MG_GESTIONNAIRE* gestnew=new MG_GESTIONNAIRE();
718     MG_GEOMETRIE* geonew=mai->get_mg_geometrie();
719     gestnew->ajouter_mg_geometrie(geonew);
720     MG_MAILLAGE* mainew=new MG_MAILLAGE(geonew);
721     gestnew->ajouter_mg_maillage(mainew);
722    
723     LISTE_MG_NOEUD::iterator itnod;
724     for (MG_NOEUD* vertices=mai->get_premier_noeud(itnod);vertices!=NULL;vertices=mai->get_suivant_noeud(itnod))
725     {
726     MG_ELEMENT_TOPOLOGIQUE *topnd=vertices->get_lien_topologie();
727     MG_FACE* facevert=(MG_FACE*) (vertices->get_lien_topologie());
728     MG_ARETE* aretver=(MG_ARETE*) (vertices->get_lien_topologie());
729     MG_SOMMET* sometver=(MG_SOMMET*) (vertices->get_lien_topologie());
730 sattarpa 596
731     if(facevert->get_id()==76
732     || aretver->get_id()==84 || aretver->get_id()==103|| aretver->get_id()==91|| aretver->get_id()==13 || aretver->get_id()==110||aretver->get_id()==98
733     || aretver->get_id()==81 || aretver->get_id()==83 || aretver->get_id()==10|| aretver->get_id()==12|| aretver->get_id()==90|| aretver->get_id()==97
734     /* facevert->get_id()==133
735 sattarpa 554 || aretver->get_id()==355 || aretver->get_id()==362|| aretver->get_id()==374|| aretver->get_id()==298 || aretver->get_id()==291||aretver->get_id()==338
736     || aretver->get_id()==326 || aretver->get_id()==333|| aretver->get_id()==319|| aretver->get_id()==312 || aretver->get_id()==305||aretver->get_id()==169
737     || aretver->get_id()==162 || aretver->get_id()==141|| aretver->get_id()==174|| aretver->get_id()==148 || aretver->get_id()==155||aretver->get_id()==217
738     || aretver->get_id()==212 || aretver->get_id()==191|| aretver->get_id()==184|| aretver->get_id()==64 || aretver->get_id()==280||aretver->get_id()==32
739     || aretver->get_id()==387 || aretver->get_id()==198|| aretver->get_id()==205|| aretver->get_id()==269 || aretver->get_id()==262||aretver->get_id()==234
740     || aretver->get_id()==227 || aretver->get_id()==255|| aretver->get_id()==248|| aretver->get_id()==241 || aretver->get_id()==380||aretver->get_id()==96
741     || aretver->get_id()==369 || aretver->get_id()==344|| aretver->get_id()==128|| aretver->get_id()==274
742     || sometver->get_id()==368|| sometver->get_id()==361|| sometver->get_id()==106|| sometver->get_id()==122|| sometver->get_id()==74|| sometver->get_id()==90
743     || sometver->get_id()==233|| sometver->get_id()==240|| sometver->get_id()==247|| sometver->get_id()==254|| sometver->get_id()==261|| sometver->get_id()==268
744     || sometver->get_id()==226|| sometver->get_id()==224|| sometver->get_id()==190|| sometver->get_id()==197|| sometver->get_id()==204|| sometver->get_id()==211
745     || sometver->get_id()==183|| sometver->get_id()==181|| sometver->get_id()==154|| sometver->get_id()==147|| sometver->get_id()==140|| sometver->get_id()==161
746     || sometver->get_id()==168|| sometver->get_id()==138|| sometver->get_id()==318|| sometver->get_id()==311|| sometver->get_id()==304|| sometver->get_id()==297
747     || sometver->get_id()==325|| sometver->get_id()==332|| sometver->get_id()==290|| sometver->get_id()==288|| sometver->get_id()==42|| sometver->get_id()==58
748 sattarpa 596 || sometver->get_id()==352|| sometver->get_id()==354|| sometver->get_id()==10|| sometver->get_id()==26*/
749    
750     )
751 sattarpa 554 {
752     double x=vertices->get_x();
753     double y=vertices->get_y();
754     double z=vertices->get_z();
755     //MG_NOEUD *newno=new MG_NOEUD(NULL,x,y,z,vertices->get_origine());
756     MG_NOEUD *newno=new MG_NOEUD(vertices->get_lien_topologie(),x,y,z,vertices->get_origine());
757     mainew->ajouter_mg_noeud(newno);
758     vertices->change_nouveau_numero(newno->get_id()); // what does this do?
759     }
760     }
761    
762     LISTE_MG_SEGMENT::iterator itSeg;
763     for (MG_SEGMENT * segment =mai->get_premier_segment(itSeg); segment; segment=mai->get_suivant_segment(itSeg))
764     {
765     //%275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010);
766     //NOEUD linked with a topology (get_lien_topologie => $10 ) -> and %10=SOMMET(1,$9,0); %9=POINT_OCC(1);
767     //%390=SEGMENT($13,$275,$277,1010); => %13=ARETE(3,$8,$14,$15,1,0); %275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010); %277=NOEUD($13,89.09047601136933,-249.4243468871926,0.000000000000000,1010);
768     MG_FACE* faceseg=(MG_FACE*) (segment->get_lien_topologie());
769     MG_ARETE* aretver=(MG_ARETE*) (segment->get_lien_topologie());
770 sattarpa 596 if (faceseg->get_id()==76
771     || aretver->get_id()==84 || aretver->get_id()==103|| aretver->get_id()==91|| aretver->get_id()==13 || aretver->get_id()==110||aretver->get_id()==98
772     //faceseg->get_id()==133
773     //|| aretver->get_id()==355 || aretver->get_id()==362|| aretver->get_id()==374|| aretver->get_id()==298 || aretver->get_id()==291||aretver->get_id()==338
774     //|| aretver->get_id()==326 || aretver->get_id()==333|| aretver->get_id()==319|| aretver->get_id()==312 || aretver->get_id()==305||aretver->get_id()==169
775     //|| aretver->get_id()==162 || aretver->get_id()==141|| aretver->get_id()==174|| aretver->get_id()==148 || aretver->get_id()==155||aretver->get_id()==217
776     //|| aretver->get_id()==212 || aretver->get_id()==191|| aretver->get_id()==184|| aretver->get_id()==64 || aretver->get_id()==280||aretver->get_id()==32
777     //|| aretver->get_id()==387 || aretver->get_id()==198|| aretver->get_id()==205|| aretver->get_id()==269 || aretver->get_id()==262||aretver->get_id()==234
778     // || aretver->get_id()==227 || aretver->get_id()==255|| aretver->get_id()==248|| aretver->get_id()==241 || aretver->get_id()==380||aretver->get_id()==96
779     // || aretver->get_id()==369 || aretver->get_id()==344|| aretver->get_id()==128|| aretver->get_id()==274
780    
781     )
782 sattarpa 554 {
783     MG_NOEUD* no1=mainew->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
784     MG_NOEUD* no2=mainew->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
785     MG_SEGMENT *seg=new MG_SEGMENT(segment->get_lien_topologie(),no1,no2,segment->get_origine());
786     //MG_SEGMENT *seg=new MG_SEGMENT(NULL,no1,no2,segment->get_origine());
787     mainew->ajouter_mg_segment(seg);
788     }
789     }
790    
791     LISTE_MG_TRIANGLE::iterator itTri;
792     for (MG_TRIANGLE * triangle =mai->get_premier_triangle(itTri); triangle; triangle=mai->get_suivant_triangle(itTri))
793     {
794     MG_FACE* facetri=(MG_FACE*) (triangle->get_lien_topologie());
795 sattarpa 596 if (facetri->get_id()==76)
796 sattarpa 554 {
797     MG_NOEUD* no1=mainew->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
798     MG_NOEUD* no2=mainew->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
799     MG_NOEUD* no3=mainew->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
800     mainew->ajouter_mg_triangle(triangle->get_lien_topologie(),no1,no2,no3,triangle->get_origine());
801     }
802     }
803    
804     //gestnew->enregistrer("scnsurf_longflxprtwithpockets_3d_3mm_8mmdef_0bump.magic");
805     gestnew->enregistrer(outputfilename);
806     //////////////////
807    
808     ////////////////////////
809    
810    
811     /*
812     mainew->supprimer_mg_triangleid(106625);
813     mainew->supprimer_mg_triangleid(106662);
814     mainew->supprimer_mg_triangleid(106626);
815     mainew->supprimer_mg_triangleid(106701);
816     mainew->supprimer_mg_triangleid(106702);
817     mainew->supprimer_mg_triangleid(106639);*/
818     //cout<<"output mesh no.= 495557 "<<endl;
819     //gest.enregistrer("2dsurfmesh_cad.magic"); //CAD model output
820     //scanned part output
821    
822    
823     }
824     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
825 sattarpa 596 void CRIAQOPERATORS::surfmaker_e2(char* outputfilename,int meshno,char* magicfilename)
826 sattarpa 554 {
827     // surfmeshgenerator a partially scanned (deformed CAD model) for GNIF examples for simple exam with hole (badisplacenmentvector + smplwithpocket)
828     MG_FILE gest(magicfilename);
829     MG_GEOMETRIE* geo=gest.get_mg_geometrie(0);
830     MG_MAILLAGE* mai;
831     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
832     //MG_FILE gest((char*)"2d_smplwithole_23mm.magic");
833     //MG_GEOMETRIE* geo=gest.get_mg_geometrieid(1);
834     //MG_MAILLAGE* mai=gest.get_mg_maillageid(1197);
835     MG_GESTIONNAIRE* gestnew=new MG_GESTIONNAIRE();
836     MG_GEOMETRIE* geonew=mai->get_mg_geometrie();
837     gestnew->ajouter_mg_geometrie(geonew);
838     MG_MAILLAGE* mainew=new MG_MAILLAGE(geonew);
839     gestnew->ajouter_mg_maillage(mainew);
840    
841     LISTE_MG_NOEUD::iterator itnod;
842     for (MG_NOEUD* vertices=mai->get_premier_noeud(itnod);vertices!=NULL;vertices=mai->get_suivant_noeud(itnod))
843     {
844     MG_ELEMENT_TOPOLOGIQUE *topnd=vertices->get_lien_topologie();
845     MG_FACE* facevert=(MG_FACE*) (vertices->get_lien_topologie());
846     MG_ARETE* aretver=(MG_ARETE*) (vertices->get_lien_topologie());
847     MG_SOMMET* sometver=(MG_SOMMET*) (vertices->get_lien_topologie());
848     if(facevert->get_id()==76
849     || aretver->get_id()==84 || aretver->get_id()==103|| aretver->get_id()==91|| aretver->get_id()==98 || aretver->get_id()==13||aretver->get_id()==110
850     || sometver->get_id()==10|| sometver->get_id()==12|| sometver->get_id()==81|| sometver->get_id()==83|| sometver->get_id()==90|| sometver->get_id()==97)
851     {
852     double x=vertices->get_x();
853     double y=vertices->get_y();
854     double z=vertices->get_z();
855     //MG_NOEUD *newno=new MG_NOEUD(NULL,x,y,z,vertices->get_origine());
856     MG_NOEUD *newno=new MG_NOEUD(vertices->get_lien_topologie(),x,y,z,vertices->get_origine());
857     mainew->ajouter_mg_noeud(newno);
858     vertices->change_nouveau_numero(newno->get_id()); // what does this do?
859     }
860     }
861    
862     LISTE_MG_SEGMENT::iterator itSeg;
863     for (MG_SEGMENT * segment =mai->get_premier_segment(itSeg); segment; segment=mai->get_suivant_segment(itSeg))
864     {
865     //%275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010);
866     //NOEUD linked with a topology (get_lien_topologie => $10 ) -> and %10=SOMMET(1,$9,0); %9=POINT_OCC(1);
867     //%390=SEGMENT($13,$275,$277,1010); => %13=ARETE(3,$8,$14,$15,1,0); %275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010); %277=NOEUD($13,89.09047601136933,-249.4243468871926,0.000000000000000,1010);
868     MG_FACE* faceseg=(MG_FACE*) (segment->get_lien_topologie());
869     //cout<<"faceseg->get_id()= "<<faceseg->get_id()<<endl;
870     MG_ARETE* aretver=(MG_ARETE*) (segment->get_lien_topologie());
871     //cout<<"aretver->get_id()= "<<aretver->get_id()<<endl;
872     if (faceseg->get_id()==76 ||
873     aretver->get_id()==84 || aretver->get_id()==103|| aretver->get_id()==91|| aretver->get_id()==98 || aretver->get_id()==13|| aretver->get_id()==110)
874     {
875     MG_NOEUD* no1=mainew->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
876     MG_NOEUD* no2=mainew->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
877     MG_SEGMENT *seg=new MG_SEGMENT(segment->get_lien_topologie(),no1,no2,segment->get_origine());
878     //MG_SEGMENT *seg=new MG_SEGMENT(NULL,no1,no2,segment->get_origine());
879     mainew->ajouter_mg_segment(seg);
880     }
881     }
882    
883     LISTE_MG_TRIANGLE::iterator itTri;
884     for (MG_TRIANGLE * triangle =mai->get_premier_triangle(itTri); triangle; triangle=mai->get_suivant_triangle(itTri))
885     {
886     MG_FACE* facetri=(MG_FACE*) (triangle->get_lien_topologie());
887     if (facetri->get_id()==76)
888     {
889     MG_NOEUD* no1=mainew->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
890     MG_NOEUD* no2=mainew->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
891     MG_NOEUD* no3=mainew->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
892     mainew->ajouter_mg_triangle(triangle->get_lien_topologie(),no1,no2,no3,triangle->get_origine());
893     }
894     }
895    
896     //gestnew->enregistrer("cadsurfmsh_smplwithole_23mm.magic");
897     gestnew->enregistrer(outputfilename);
898     }
899 sattarpa 596 void CRIAQOPERATORS::surfmaker_e2t(char* outputfilename,int meshno,char* magicfilename)
900 sattarpa 554 {
901     // surfmeshgenerator a partially scanned (deformed CAD model) for GNIF examples for simple exam with hole (badisplacenmentvector + smplwithpocket)
902     MG_FILE gest(magicfilename);
903     MG_GEOMETRIE* geo=gest.get_mg_geometrie(0);
904     MG_MAILLAGE* mai;
905     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
906     //MG_FILE gest((char*)"2d_smplwithole_23mm.magic");
907     //MG_GEOMETRIE* geo=gest.get_mg_geometrieid(1);
908     //MG_MAILLAGE* mai=gest.get_mg_maillageid(1197);
909     MG_GESTIONNAIRE* gestnew=new MG_GESTIONNAIRE();
910     MG_GEOMETRIE* geonew=mai->get_mg_geometrie();
911     gestnew->ajouter_mg_geometrie(geonew);
912     MG_MAILLAGE* mainew=new MG_MAILLAGE(geonew);
913     gestnew->ajouter_mg_maillage(mainew);
914    
915     LISTE_MG_NOEUD::iterator itnod;
916     for (MG_NOEUD* vertices=mai->get_premier_noeud(itnod);vertices!=NULL;vertices=mai->get_suivant_noeud(itnod))
917     {
918     MG_ELEMENT_TOPOLOGIQUE *topnd=vertices->get_lien_topologie();
919     MG_FACE* facevert=(MG_FACE*) (vertices->get_lien_topologie());
920     MG_ARETE* aretver=(MG_ARETE*) (vertices->get_lien_topologie());
921     MG_SOMMET* sometver=(MG_SOMMET*) (vertices->get_lien_topologie());
922     if(facevert->get_id()==37
923     || aretver->get_id()==20 || aretver->get_id()==108|| aretver->get_id()==113|| aretver->get_id()==101 || aretver->get_id()==59||aretver->get_id()==64
924     || aretver->get_id()==45 || aretver->get_id()==52|| aretver->get_id()==93|| aretver->get_id()==74 || aretver->get_id()==81||aretver->get_id()==88
925     || sometver->get_id()==10|| sometver->get_id()==19|| sometver->get_id()==51|| sometver->get_id()==58|| sometver->get_id()==42|| sometver->get_id()==44
926     || sometver->get_id()==87|| sometver->get_id()==73|| sometver->get_id()==80|| sometver->get_id()==71|| sometver->get_id()==100|| sometver->get_id()==107
927     //for e2t
928     //|| aretver->get_id()==20 || aretver->get_id()==141|| aretver->get_id()==129|| aretver->get_id()==136 || aretver->get_id()==66||aretver->get_id()==59
929     //|| aretver->get_id()==73 || aretver->get_id()==78|| aretver->get_id()==45|| aretver->get_id()==52 || aretver->get_id()==95||aretver->get_id()==102
930     //|| aretver->get_id()==88 || aretver->get_id()==121|| aretver->get_id()==116|| aretver->get_id()==109
931     //|| sometver->get_id()==10|| sometver->get_id()==19|| sometver->get_id()==65|| sometver->get_id()==58|| sometver->get_id()==51|| sometver->get_id()==42
932     //|| sometver->get_id()==44|| sometver->get_id()==72|| sometver->get_id()==115|| sometver->get_id()==87|| sometver->get_id()==108|| sometver->get_id()==101
933     //|| sometver->get_id()==94|| sometver->get_id()==85|| sometver->get_id()==128|| sometver->get_id()==135
934     )
935     {
936     double x=vertices->get_x();
937     double y=vertices->get_y();
938     double z=vertices->get_z();
939     //MG_NOEUD *newno=new MG_NOEUD(NULL,x,y,z,vertices->get_origine());
940     MG_NOEUD *newno=new MG_NOEUD(vertices->get_lien_topologie(),x,y,z,vertices->get_origine());
941     mainew->ajouter_mg_noeud(newno);
942     vertices->change_nouveau_numero(newno->get_id()); // what does this do?
943     }
944     }
945    
946     LISTE_MG_SEGMENT::iterator itSeg;
947     for (MG_SEGMENT * segment =mai->get_premier_segment(itSeg); segment; segment=mai->get_suivant_segment(itSeg))
948     {
949     //%275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010);
950     //NOEUD linked with a topology (get_lien_topologie => $10 ) -> and %10=SOMMET(1,$9,0); %9=POINT_OCC(1);
951     //%390=SEGMENT($13,$275,$277,1010); => %13=ARETE(3,$8,$14,$15,1,0); %275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010); %277=NOEUD($13,89.09047601136933,-249.4243468871926,0.000000000000000,1010);
952     MG_FACE* faceseg=(MG_FACE*) (segment->get_lien_topologie());
953     //cout<<"faceseg->get_id()= "<<faceseg->get_id()<<endl;
954     MG_ARETE* aretver=(MG_ARETE*) (segment->get_lien_topologie());
955     //cout<<"aretver->get_id()= "<<aretver->get_id()<<endl;
956     if (faceseg->get_id()==37
957     || aretver->get_id()==20 || aretver->get_id()==108|| aretver->get_id()==113|| aretver->get_id()==101 || aretver->get_id()==59||aretver->get_id()==64
958     || aretver->get_id()==45 || aretver->get_id()==52|| aretver->get_id()==93|| aretver->get_id()==74 || aretver->get_id()==81||aretver->get_id()==88
959     //|| aretver->get_id()==20 || aretver->get_id()==141|| aretver->get_id()==129|| aretver->get_id()==136 || aretver->get_id()==66||aretver->get_id()==59
960     //|| aretver->get_id()==73 || aretver->get_id()==78|| aretver->get_id()==45|| aretver->get_id()==52 || aretver->get_id()==95||aretver->get_id()==102
961     //|| aretver->get_id()==88 || aretver->get_id()==121|| aretver->get_id()==116|| aretver->get_id()==109
962    
963     )
964     {
965     MG_NOEUD* no1=mainew->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
966     MG_NOEUD* no2=mainew->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
967     MG_SEGMENT *seg=new MG_SEGMENT(segment->get_lien_topologie(),no1,no2,segment->get_origine());
968     //MG_SEGMENT *seg=new MG_SEGMENT(NULL,no1,no2,segment->get_origine());
969     mainew->ajouter_mg_segment(seg);
970     }
971     }
972    
973     LISTE_MG_TRIANGLE::iterator itTri;
974     for (MG_TRIANGLE * triangle =mai->get_premier_triangle(itTri); triangle; triangle=mai->get_suivant_triangle(itTri))
975     {
976     MG_FACE* facetri=(MG_FACE*) (triangle->get_lien_topologie());
977     if (facetri->get_id()==37)
978     {
979     MG_NOEUD* no1=mainew->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
980     MG_NOEUD* no2=mainew->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
981     MG_NOEUD* no3=mainew->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
982     mainew->ajouter_mg_triangle(triangle->get_lien_topologie(),no1,no2,no3,triangle->get_origine());
983     }
984     }
985    
986     //gestnew->enregistrer("cadsurfmsh_smplwithole_23mm.magic");
987     gestnew->enregistrer(outputfilename);
988     }
989     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
990 sattarpa 596 void CRIAQOPERATORS::surfmaker_e3(char* outputfilename,int meshno,char* magicfilename)
991 sattarpa 554 {
992     //surfmesh maker (smplwithpocket+smpl withpocket)
993     MG_FILE gest(magicfilename);
994     MG_GEOMETRIE* geo=gest.get_mg_geometrie(0);
995     MG_MAILLAGE* mai;
996     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
997     //MG_FILE gest((char*)"smplwithpocket_3d_13mm.magic");
998     //MG_GEOMETRIE* geo=gest.get_mg_geometrieid(1);
999     //MG_MAILLAGE* mai=gest.get_mg_maillageid(2982821);
1000     MG_GESTIONNAIRE* gestnew=new MG_GESTIONNAIRE();
1001     MG_GEOMETRIE* geonew=mai->get_mg_geometrie();
1002     gestnew->ajouter_mg_geometrie(geonew);
1003     MG_MAILLAGE* mainew=new MG_MAILLAGE(geonew);
1004     gestnew->ajouter_mg_maillage(mainew);
1005    
1006     LISTE_MG_NOEUD::iterator itnod;
1007     for (MG_NOEUD* vertices=mai->get_premier_noeud(itnod);vertices!=NULL;vertices=mai->get_suivant_noeud(itnod))
1008     {
1009     MG_ELEMENT_TOPOLOGIQUE *topnd=vertices->get_lien_topologie();
1010     MG_FACE* facevert=(MG_FACE*) (vertices->get_lien_topologie());
1011     MG_ARETE* aretver=(MG_ARETE*) (vertices->get_lien_topologie());
1012     MG_SOMMET* sometver=(MG_SOMMET*) (vertices->get_lien_topologie());
1013     if(facevert->get_id()==5
1014     || aretver->get_id()==32 || aretver->get_id()==61|| aretver->get_id()==42|| aretver->get_id()==56 || aretver->get_id()==49||aretver->get_id()==27
1015     || aretver->get_id()==85 || aretver->get_id()==90|| aretver->get_id()==78|| aretver->get_id()==71 || aretver->get_id()==20||aretver->get_id()==13
1016     || sometver->get_id()==10|| sometver->get_id()==26|| sometver->get_id()==41|| sometver->get_id()==55|| sometver->get_id()==39|| sometver->get_id()==48
1017     || sometver->get_id()==84|| sometver->get_id()==77|| sometver->get_id()==70|| sometver->get_id()==68|| sometver->get_id()==12|| sometver->get_id()==19)
1018     {
1019     double x=vertices->get_x();
1020     double y=vertices->get_y();
1021     double z=vertices->get_z();
1022     //MG_NOEUD *newno=new MG_NOEUD(NULL,x,y,z,vertices->get_origine());
1023     MG_NOEUD *newno=new MG_NOEUD(vertices->get_lien_topologie(),x,y,z,vertices->get_origine());
1024     mainew->ajouter_mg_noeud(newno);
1025     vertices->change_nouveau_numero(newno->get_id()); // what does this do?
1026     }
1027     }
1028    
1029     LISTE_MG_SEGMENT::iterator itSeg;
1030     for (MG_SEGMENT * segment =mai->get_premier_segment(itSeg); segment; segment=mai->get_suivant_segment(itSeg))
1031     {
1032     //%275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010);
1033     //NOEUD linked with a topology (get_lien_topologie => $10 ) -> and %10=SOMMET(1,$9,0); %9=POINT_OCC(1);
1034     //%390=SEGMENT($13,$275,$277,1010); => %13=ARETE(3,$8,$14,$15,1,0); %275=NOEUD($10,93.94800850483597,-250.0000000000000,0.000000000000000,1010); %277=NOEUD($13,89.09047601136933,-249.4243468871926,0.000000000000000,1010);
1035     MG_FACE* faceseg=(MG_FACE*) (segment->get_lien_topologie());
1036     //cout<<"faceseg->get_id()= "<<faceseg->get_id()<<endl;
1037     MG_ARETE* aretver=(MG_ARETE*) (segment->get_lien_topologie());
1038     //cout<<"aretver->get_id()= "<<aretver->get_id()<<endl;
1039     if (faceseg->get_id()==5
1040     || aretver->get_id()==32 || aretver->get_id()==61|| aretver->get_id()==42|| aretver->get_id()==56 || aretver->get_id()==49||aretver->get_id()==27
1041     || aretver->get_id()==85 || aretver->get_id()==90|| aretver->get_id()==78|| aretver->get_id()==71 || aretver->get_id()==20||aretver->get_id()==13)
1042     {
1043     MG_NOEUD* no1=mainew->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
1044     MG_NOEUD* no2=mainew->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
1045     MG_SEGMENT *seg=new MG_SEGMENT(segment->get_lien_topologie(),no1,no2,segment->get_origine());
1046     //MG_SEGMENT *seg=new MG_SEGMENT(NULL,no1,no2,segment->get_origine());
1047     mainew->ajouter_mg_segment(seg);
1048     }
1049     }
1050    
1051     LISTE_MG_TRIANGLE::iterator itTri;
1052     for (MG_TRIANGLE * triangle =mai->get_premier_triangle(itTri); triangle; triangle=mai->get_suivant_triangle(itTri))
1053     {
1054     MG_FACE* facetri=(MG_FACE*) (triangle->get_lien_topologie());
1055     if (facetri->get_id()==5)
1056     {
1057     MG_NOEUD* no1=mainew->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
1058     MG_NOEUD* no2=mainew->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
1059     MG_NOEUD* no3=mainew->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
1060     mainew->ajouter_mg_triangle(triangle->get_lien_topologie(),no1,no2,no3,triangle->get_origine());
1061     }
1062     }
1063    
1064     //gestnew->enregistrer("scnsurf_smplwithpocket_3d_13mm_232mmdeform.magic");
1065     gestnew->enregistrer(outputfilename);
1066     }
1067     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1068 sattarpa 596 void CRIAQOPERATORS::gnifformatmaker(char* elementxtoutfile,char* nodtxtoutfile,int meshno,char* magicfilename)
1069 sattarpa 554 {
1070     // gnifformatmaker
1071     MG_FILE gest(magicfilename);
1072     MG_MAILLAGE* mai;
1073     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
1074     //MG_FILE gest((char*)"scnsurf_longflxprtwithpockets_3d_3mm_8mmdef_0bump.magic");
1075     // MG_MAILLAGE* mai=gest.get_mg_maillageid(2);
1076     //std::string fichiermaillage="CAD_output_elements.txt";
1077     //FILE* in=fopen(fichiermaillage.c_str(),"wt");
1078     //FILE* in1=fopen("scnsurf_longflxprtwithpockets_3d_3mm_8mmdef_0bump_nodes.txt","wt");
1079     FILE* in1=fopen(nodtxtoutfile,"wt");
1080     //FILE* in1=fopen("scannedsurface_nodes.txt","wt");
1081     LISTE_MG_NOEUD::iterator itnod;
1082     unsigned long firstno=mai->get_premier_noeud(itnod)->get_id();
1083     firstno=firstno-1;
1084     cout<<firstno<<endl;
1085     int counter1=1;
1086     cout<<"mai->get_nb_mg_noeud()="<<mai->get_nb_mg_noeud()<<endl;
1087     for (MG_NOEUD* nod=mai->get_premier_noeud(itnod);nod!=NULL;nod=mai->get_suivant_noeud(itnod))
1088     {
1089     nod->change_nouveau_numero(counter1);
1090     //nod->change_id(counter1);
1091     //fprintf(in1,"%d node coordinate %le %le %le\n",nod->get_id(), nod->get_x(),nod->get_y(), nod->get_z() );
1092     //fprintf(in,"%d node coordinate %lf %lf %le\n",nod->get_id(), nod->get_x(),nod->get_y(), nod->get_z() );
1093     fprintf(in1,"%19d%32.9lf%16.9lf%8d\n",nod->get_nouveau_numero(), nod->get_x(),nod->get_y(),nod->get_nouveau_numero());
1094     fprintf(in1,"%7d%16.9lf\n",nod->get_nouveau_numero(), nod->get_z());
1095     counter1++;
1096     }
1097     //FILE* in2=fopen("scnsurf_longflxprtwithpockets_3d_3mm_8mmdef_0bump_elements.txt","wt"); // CAD text output elements
1098     FILE* in2=fopen(elementxtoutfile,"wt");
1099     //FILE* in2=fopen("scannedsurface_elements.txt","wt"); //scanned text output elements
1100     int counter=1;
1101     LISTE_MG_TRIANGLE::iterator ittri;
1102     for (MG_TRIANGLE* tri=mai->get_premier_triangle(ittri);tri!=NULL;tri=mai->get_suivant_triangle(ittri))
1103     {
1104     fprintf(in2,"%10d 1%8d%8d%8d\n",counter,tri->get_noeud1()->get_nouveau_numero(),tri->get_noeud2()->get_nouveau_numero(),tri->get_noeud3()->get_nouveau_numero() );
1105     counter++;
1106     }
1107     fclose(in1);
1108     fclose(in2);
1109     }
1110     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1111 sattarpa 596 void CRIAQOPERATORS::rmovscnprtfromdefrmdcad(char* outputfilename,int meshno,char* magicfilename)
1112 sattarpa 554 {
1113     MG_FILE gest(magicfilename);
1114     MG_MAILLAGE* mai;
1115     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
1116 sattarpa 596 MG_GESTIONNAIRE* newgest=new MG_GESTIONNAIRE();
1117 sattarpa 554 MG_GEOMETRIE* geonew=mai->get_mg_geometrie();
1118 sattarpa 596 newgest->ajouter_mg_geometrie(geonew);
1119 sattarpa 554 MG_MAILLAGE* mainew=new MG_MAILLAGE(geonew);
1120 sattarpa 596 newgest->ajouter_mg_maillage(mainew);
1121    
1122 sattarpa 554 LISTE_MG_NOEUD::iterator itnod;
1123     for (MG_NOEUD* vertices=mai->get_premier_noeud(itnod);vertices!=NULL;vertices=mai->get_suivant_noeud(itnod))
1124     {
1125     MG_ELEMENT_TOPOLOGIQUE *topnd=vertices->get_lien_topologie();
1126     MG_FACE* facevert=(MG_FACE*) (vertices->get_lien_topologie());
1127 sattarpa 596 //if(facevert->get_id()!=76 && topnd->get_dimension()!=3) //e1
1128     //if(facevert->get_id()!=5 && topnd->get_dimension()!=3) //e2
1129 sattarpa 554 {
1130     double x=vertices->get_x();
1131     double y=vertices->get_y();
1132     double z=vertices->get_z();
1133     MG_NOEUD *newno=new MG_NOEUD(vertices->get_lien_topologie(),x,y,z,vertices->get_origine());
1134     mainew->ajouter_mg_noeud(newno);
1135     vertices->change_nouveau_numero(newno->get_id()); // what does this do?
1136     }
1137     }
1138 sattarpa 596
1139 sattarpa 554 LISTE_MG_SEGMENT::iterator itSeg;
1140     for (MG_SEGMENT * segment =mai->get_premier_segment(itSeg); segment; segment=mai->get_suivant_segment(itSeg))
1141     {
1142     MG_ELEMENT_TOPOLOGIQUE *topseg=segment->get_lien_topologie();
1143     MG_FACE* faceseg=(MG_FACE*) (segment->get_lien_topologie());
1144 sattarpa 596 //if (faceseg->get_id()!=76 && topseg->get_dimension()!=3)
1145     if(faceseg->get_id()!=5 && topseg->get_dimension()!=3) //e2
1146 sattarpa 554 {
1147     MG_NOEUD* no1=mainew->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
1148     MG_NOEUD* no2=mainew->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
1149     MG_SEGMENT *seg=new MG_SEGMENT(segment->get_lien_topologie(),no1,no2,segment->get_origine());
1150     mainew->ajouter_mg_segment(seg);
1151     }
1152     }
1153 sattarpa 596
1154 sattarpa 554 LISTE_MG_TRIANGLE::iterator itTri;
1155     for (MG_TRIANGLE * triangle =mai->get_premier_triangle(itTri); triangle; triangle=mai->get_suivant_triangle(itTri))
1156     {
1157     MG_ELEMENT_TOPOLOGIQUE *toptri=triangle->get_lien_topologie();
1158     MG_FACE* facetri=(MG_FACE*) (triangle->get_lien_topologie());
1159 sattarpa 596 // if (facetri->get_id()!=76 && toptri->get_dimension()!=3)
1160     if (facetri->get_id()!=5 && toptri->get_dimension()!=3) //e2
1161 sattarpa 554 {
1162     MG_NOEUD* no1=mainew->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
1163     MG_NOEUD* no2=mainew->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
1164     MG_NOEUD* no3=mainew->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
1165     mainew->ajouter_mg_triangle(triangle->get_lien_topologie(),no1,no2,no3,triangle->get_origine());
1166     }
1167     }
1168 sattarpa 596 newgest->enregistrer(outputfilename);
1169 sattarpa 554 //gest.enregistrer("deformedcad_sansscannedpart.magic");
1170    
1171     }
1172     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1173    
1174 sattarpa 596 void CRIAQOPERATORS::msh2dmakerfrommsh3d(char* outputfilename,int meshno,char* magicfilename)
1175 sattarpa 554 {
1176     //to make a 2D mesh out of 3D mesh :)
1177     /*
1178     MG_MAILLAGE* mainew=mai->dupliquer(&gest);
1179     LISTE_MG_TETRA::iterator ittet;
1180     for(MG_TETRA* )
1181     {
1182    
1183     }
1184    
1185     cout<<"mainew->get_nb_mg_noeud()= "<<mainew->get_nb_mg_noeud()<<endl;
1186     cout<<"mainew->get_nb_mg_segment()= "<<mainew->get_nb_mg_segment()<<endl;
1187     cout<<"mainew->get_nb_mg_triangle()= "<<mainew->get_nb_mg_triangle()<<endl;
1188     cout<<"mainew->get_nb_mg_tetra()= "<<mainew->get_nb_mg_tetra()<<endl;
1189    
1190     LISTE_MG_TRIANGLE::iterator ittri;
1191     for (MG_TRIANGLE* triangle=mainew->get_premier_triangle(ittri);triangle!=NULL;triangle=mainew->get_suivant_triangle(ittri))
1192     {
1193     MG_ELEMENT_TOPOLOGIQUE *top=triangle->get_lien_topologie();
1194     int topdimension=top->get_dimension();
1195     if (topdimension==3)
1196     mainew->supprimer_mg_triangleid(triangle->get_id());
1197     }
1198    
1199     LISTE_MG_TETRA::iterator ittet;
1200     for (MG_TETRA* tetra=mainew->get_premier_tetra(ittet);tetra!=NULL;tetra=mainew->get_suivant_tetra(ittet))
1201     mainew->supprimer_mg_tetraid(tetra->get_id());
1202     //MG_FACE* face=geo->get_mg_faceid(5);
1203    
1204    
1205     LISTE_MG_SEGMENT::iterator itseg;
1206     for (MG_SEGMENT* segment=mainew->get_premier_segment(itseg);segment!=NULL;segment=mainew->get_suivant_segment(itseg))
1207     {
1208     MG_FACE* faceseg=(MG_FACE*) (segment->get_lien_topologie());
1209     if (faceseg->get_id()!=181)
1210     mainew->supprimer_mg_segmentid(segment->get_id());
1211    
1212     MG_ELEMENT_TOPOLOGIQUE *topseg=segment->get_lien_topologie();
1213     if(topseg->get_dimension()==3)
1214     cout<<"topseg->get_dimension()==3"<<endl;
1215     }
1216    
1217     LISTE_MG_NOEUD::iterator itnod;
1218     for (MG_NOEUD* vertices=mainew->get_premier_noeud(itnod);vertices!=NULL;vertices=mainew->get_suivant_noeud(itnod))
1219     {
1220     MG_ELEMENT_TOPOLOGIQUE *topnd=vertices->get_lien_topologie();
1221     MG_FACE* facevert=(MG_FACE*) (vertices->get_lien_topologie());
1222     //if (facevert->get_id()!=181)
1223     if (topnd->get_dimension()==0)
1224     mainew->supprimer_mg_segmentid(vertices->get_id());
1225     }
1226    
1227     for (MG_TRIANGLE* triangle=mainew->get_premier_triangle(ittri);triangle!=NULL;triangle=mainew->get_suivant_triangle(ittri))
1228     {
1229     MG_FACE* facetri=(MG_FACE*) (triangle->get_lien_topologie());
1230     if (facetri->get_id()!=181)
1231     mainew->supprimer_mg_triangleid(triangle->get_id());
1232     }
1233     */
1234 sattarpa 596
1235     MG_FILE gest(magicfilename);
1236     MG_MAILLAGE* mai;
1237     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
1238 sattarpa 554 MG_GESTIONNAIRE* newgest=new MG_GESTIONNAIRE();
1239     MG_GEOMETRIE* geonew=mai->get_mg_geometrie();
1240     newgest->ajouter_mg_geometrie(geonew);
1241     MG_MAILLAGE* mainew=new MG_MAILLAGE(geonew);
1242     newgest->ajouter_mg_maillage(mainew);
1243    
1244     LISTE_MG_NOEUD::iterator itNod;
1245     for (MG_NOEUD* nd=mai->get_premier_noeud(itNod);nd!=NULL;nd=mai->get_suivant_noeud(itNod))
1246     {
1247     MG_ELEMENT_TOPOLOGIQUE *topnd=nd->get_lien_topologie();
1248     if(topnd->get_dimension()<3)
1249     {
1250     double x=nd->get_x();
1251     double y=nd->get_y();
1252     double z=nd->get_z();
1253     MG_NOEUD *newno=new MG_NOEUD(nd->get_lien_topologie(),x,y,z,nd->get_origine());
1254     mainew->ajouter_mg_noeud(newno);
1255     nd->change_nouveau_numero(newno->get_id());
1256     }
1257     }
1258     LISTE_MG_SEGMENT::iterator itSeg;
1259     for (MG_SEGMENT* segment =mai->get_premier_segment(itSeg); segment; segment=mai->get_suivant_segment(itSeg))
1260     {
1261     MG_ELEMENT_TOPOLOGIQUE *topseg=segment->get_lien_topologie();
1262     if(topseg->get_dimension()<3)
1263     {
1264     MG_NOEUD* no1=mainew->get_mg_noeudid(segment->get_noeud1()->get_nouveau_numero());
1265     MG_NOEUD* no2=mainew->get_mg_noeudid(segment->get_noeud2()->get_nouveau_numero());
1266     MG_SEGMENT *seg=new MG_SEGMENT(segment->get_lien_topologie(),no1,no2,segment->get_origine());
1267     mainew->ajouter_mg_segment(seg);
1268     }
1269     }
1270     LISTE_MG_TRIANGLE::iterator itTri;
1271     for (MG_TRIANGLE * triangle =mai->get_premier_triangle(itTri); triangle; triangle=mai->get_suivant_triangle(itTri))
1272     {
1273     MG_ELEMENT_TOPOLOGIQUE *toptri=triangle->get_lien_topologie();
1274     if(toptri->get_dimension()<3)
1275     {
1276     MG_NOEUD* no1=mainew->get_mg_noeudid(triangle->get_noeud1()->get_nouveau_numero());
1277     MG_NOEUD* no2=mainew->get_mg_noeudid(triangle->get_noeud2()->get_nouveau_numero());
1278     MG_NOEUD* no3=mainew->get_mg_noeudid(triangle->get_noeud3()->get_nouveau_numero());
1279     mainew->ajouter_mg_triangle(triangle->get_lien_topologie(),no1,no2,no3,triangle->get_origine());
1280     }
1281     }
1282 sattarpa 596 newgest->enregistrer(outputfilename);
1283 sattarpa 554 }
1284     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1285 sattarpa 596 void CRIAQOPERATORS::bumpmaker(char* outputfilename,int bumpndid, double bumptip,int meshno,char* magicfilename)
1286 sattarpa 554 {
1287     MG_FILE gest(magicfilename);
1288     //MG_GEOMETRIE* geo=gest.get_mg_geometrie(0);
1289     MG_MAILLAGE* mai;
1290     if (meshno==0) mai=gest.get_mg_maillage(meshno); else mai=gest.get_mg_maillageid(meshno);
1291     //MG_FILE gest((char*)"scnsurf_smplwithpocket_3d_13mm_64mmdeform.magic");
1292     //MG_GEOMETRIE* geo=gest.get_mg_geometrieid(1);
1293     //MG_MAILLAGE* mai=gest.get_mg_maillageid(2);
1294     MG_NOEUD* bptipnd;
1295     TPL_MAP_ENTITE<MG_NOEUD*> usednd;
1296     LISTE_MG_NOEUD::iterator itnod;
1297     for (MG_NOEUD* nd=mai->get_premier_noeud(itnod);nd!=NULL;nd=mai->get_suivant_noeud(itnod))
1298     {
1299     MG_ELEMENT_TOPOLOGIQUE *topnd=nd->get_lien_topologie();
1300     if (topnd->get_dimension() <3 && nd->get_id()==bumpndid)
1301     {
1302     bptipnd=nd;
1303     double new_xyz[3];
1304     new_xyz[0]=nd->get_x(); new_xyz[1]=nd->get_y(); new_xyz[2]=nd->get_z()+bumptip;
1305     nd->change_coord(new_xyz);
1306     usednd.ajouter(nd);
1307     }
1308     }
1309     TPL_MAP_ENTITE<MG_NOEUD*> usedndnd;
1310     TPL_MAP_ENTITE<MG_NOEUD*> neignd;
1311     for(int ineignd=0;ineignd<bptipnd->get_lien_segment()->get_nb();ineignd++)
1312     {
1313     MG_SEGMENT* segnei=bptipnd->get_lien_segment()->get(ineignd);
1314     if(segnei->get_noeud1()!=bptipnd) neignd.ajouter(segnei->get_noeud1());
1315     else if(segnei->get_noeud2()!=bptipnd) neignd.ajouter(segnei->get_noeud2());
1316     }
1317     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itneignd;
1318     for (MG_NOEUD* nd=neignd.get_premier(itneignd);nd!=NULL;nd=neignd.get_suivant(itneignd))
1319     {
1320     double new_xyz[3];
1321     new_xyz[0]=nd->get_x(); new_xyz[1]=nd->get_y(); new_xyz[2]=nd->get_z()+(bumptip*3./4.);
1322     nd->change_coord(new_xyz);
1323     usednd.ajouter(nd);
1324     usedndnd.ajouter(nd);
1325     }
1326    
1327     TPL_MAP_ENTITE<MG_NOEUD*> neignd1;
1328     TPL_MAP_ENTITE<MG_NOEUD*> usedndnd1;
1329     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itusednd;
1330     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itusedndnd;
1331     for(MG_NOEUD* nd=usedndnd.get_premier(itusedndnd);nd!=NULL;nd=usedndnd.get_suivant(itusedndnd))
1332     {
1333     for(int ineignd=0;ineignd<nd->get_lien_segment()->get_nb();ineignd++)
1334     {
1335     MG_SEGMENT* segnei=nd->get_lien_segment()->get(ineignd);
1336     int sgnd1=0;
1337     int sgnd2=0;
1338     for(MG_NOEUD* nd1=usednd.get_premier(itusednd);nd1!=NULL;nd1=usednd.get_suivant(itusednd))
1339     {
1340     if(segnei->get_noeud1()==nd1) sgnd1++;
1341     }
1342     for(MG_NOEUD* nd1=usednd.get_premier(itusednd);nd1!=NULL;nd1=usednd.get_suivant(itusednd))
1343     {
1344     if(segnei->get_noeud2()==nd1) sgnd2++;
1345     }
1346     if(sgnd1==0) neignd1.ajouter(segnei->get_noeud1());
1347     else if(sgnd2==0) neignd1.ajouter(segnei->get_noeud2());
1348     }
1349     }
1350     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itneignd1;
1351     for (MG_NOEUD* nd=neignd1.get_premier(itneignd1);nd!=NULL;nd=neignd1.get_suivant(itneignd1))
1352     {
1353     double new_xyz[3];
1354     new_xyz[0]=nd->get_x(); new_xyz[1]=nd->get_y(); new_xyz[2]=nd->get_z()+(bumptip*2./4.);
1355     nd->change_coord(new_xyz);
1356     usednd.ajouter(nd);
1357     usedndnd1.ajouter(nd);
1358     }
1359    
1360     TPL_MAP_ENTITE<MG_NOEUD*> neignd2;
1361     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itusedndnd1;
1362     for(MG_NOEUD* nd=usedndnd1.get_premier(itusedndnd1);nd!=NULL;nd=usedndnd1.get_suivant(itusedndnd1))
1363     {
1364     for(int ineignd=0;ineignd<nd->get_lien_segment()->get_nb();ineignd++)
1365     {
1366     MG_SEGMENT* segnei=nd->get_lien_segment()->get(ineignd);
1367     int sgnd1=0;
1368     int sgnd2=0;
1369     for(MG_NOEUD* nd1=usednd.get_premier(itusednd);nd1!=NULL;nd1=usednd.get_suivant(itusednd))
1370     {
1371     if(segnei->get_noeud1()==nd1) sgnd1++;
1372     }
1373     for(MG_NOEUD* nd1=usednd.get_premier(itusednd);nd1!=NULL;nd1=usednd.get_suivant(itusednd))
1374     {
1375     if(segnei->get_noeud2()==nd1) sgnd2++;
1376     }
1377     if(sgnd1==0) neignd2.ajouter(segnei->get_noeud1());
1378     else if(sgnd2==0) neignd2.ajouter(segnei->get_noeud2());
1379     }
1380     }
1381     TPL_MAP_ENTITE<MG_NOEUD*>::ITERATEUR itneignd2;
1382     for (MG_NOEUD* nd=neignd2.get_premier(itneignd2);nd!=NULL;nd=neignd2.get_suivant(itneignd2))
1383     {
1384     double new_xyz[3];
1385     new_xyz[0]=nd->get_x(); new_xyz[1]=nd->get_y(); new_xyz[2]=nd->get_z()+(bumptip*1./4.);
1386     nd->change_coord(new_xyz);
1387     }
1388    
1389    
1390     //gest.enregistrer("scnsurf_smplwithpocket_3d_13mm_64mmdeform_withbump5mm.magic");
1391     gest.enregistrer(outputfilename);
1392     }
1393 sattarpa 596 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1394     int CRIAQOPERATORS::import_triangulation_gnif(char* outputfilename,char* triangulationfile)
1395     {
1396     FILE* in=fopen(triangulationfile,"rt");
1397     if (in==NULL) return 0;
1398 sattarpa 554
1399    
1400 sattarpa 596 MG_GESTIONNAIRE gesttmp;
1401     MG_MAILLAGE* mai=new MG_MAILLAGE(NULL);
1402     gesttmp.ajouter_mg_maillage(mai);
1403     char mess[500];
1404 sattarpa 554
1405 sattarpa 596 double xmax=-1e308;
1406     double xmin=1e308;
1407     double ymax=-1e308;
1408     double ymin=1e308;
1409     double zmax=-1e308;
1410     double zmin=1e308;
1411     while (!feof(in))
1412     {
1413     double x,y,z;
1414     char nom[20];
1415     char *res=fgets(mess,500,in);
1416     if (feof(in)) break;
1417     //cout<<"mes1= "<<mess<<endl;
1418     sscanf(mess,"%lf %lf %lf",&x,&y,&z);
1419     if (x<xmin) xmin=x;
1420     if (x>xmax) xmax=x;
1421     if (y<ymin) ymin=y;
1422     if (y>ymax) ymax=y;
1423     if (z<zmin) zmin=z;
1424     if (z>zmax) zmax=z;
1425     if (feof(in)) return 1;
1426     MG_NOEUD* noeud1=mai->ajouter_mg_noeud(NULL,x,y,z,TRIANGULATION);
1427     noeud1->change_nouveau_numero(-1);
1428     res=fgets(mess,500,in);
1429     if (feof(in)) break;
1430     //cout<<"mes2= "<<mess<<endl;
1431     sscanf(mess,"%lf %lf %lf",&x,&y,&z);
1432     if (x<xmin) xmin=x;
1433     if (x>xmax) xmax=x;
1434     if (y<ymin) ymin=y;
1435     if (y>ymax) ymax=y;
1436     if (z<zmin) zmin=z;
1437     if (z>zmax) zmax=z;
1438     if (feof(in)) return 1;
1439     res=fgets(mess,500,in);
1440     if (feof(in)) break;
1441     //cout<<"mes3= "<<mess<<endl;
1442     MG_NOEUD* noeud2=mai->ajouter_mg_noeud(NULL,x,y,z,TRIANGULATION);
1443     noeud2->change_nouveau_numero(-1);
1444     sscanf(mess,"%lf %lf %lf",&x,&y,&z);
1445     if (x<xmin) xmin=x;
1446     if (x>xmax) xmax=x;
1447     if (y<ymin) ymin=y;
1448     if (y>ymax) ymax=y;
1449     if (z<zmin) zmin=z;
1450     if (z>zmax) zmax=z;
1451     if (feof(in)) return 1;
1452     MG_NOEUD* noeud3=mai->ajouter_mg_noeud(NULL,x,y,z,TRIANGULATION);
1453     noeud3->change_nouveau_numero(-1);
1454     mai->ajouter_mg_triangle(NULL,noeud1,noeud2,noeud3,TRIANGULATION);
1455     //cout<<"feof(in)= "<<feof(in)<<endl;
1456     }
1457     fclose(in);
1458     //to merge the nodes of each triangulation which are close (the same)
1459     double eps=1e-4;
1460     BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
1461     double rayon=boite.get_rayon()*1.1;
1462     double x=boite.get_xcentre();
1463     double y=boite.get_ycentre();
1464     double z=boite.get_zcentre();
1465     boite.reinit(x-rayon,y-rayon,z-rayon,x+rayon,y+rayon,z+rayon);
1466     TPL_GRILLE<MG_NOEUD*> grille;
1467     int nb_noeud=mai->get_nb_mg_noeud();
1468     int pas=(int)(pow(nb_noeud,0.33333333333333333))+1;
1469     grille.initialiser(boite.get_xmin(),boite.get_ymin(),boite.get_zmin(),boite.get_xmax(),boite.get_ymax(),boite.get_zmax(),pas,pas,pas);
1470     std::vector<MG_NOEUD*> lst_noeud;
1471     LISTE_MG_NOEUD::iterator it;
1472     int i=0;
1473     for (MG_NOEUD* noeud=mai->get_premier_noeud(it);noeud!=NULL;noeud=mai->get_suivant_noeud(it))
1474     {
1475     //MG_NOEUD* noeud=mai->get_mg_noeud(i);
1476     grille.inserer(noeud);
1477     noeud->change_nouveau_numero(i);
1478     lst_noeud.insert(lst_noeud.end(),noeud);
1479     i++;
1480     }
1481 sattarpa 554
1482 sattarpa 596 int nb_cell=grille.get_nb_cellule();
1483     for (int i=0;i<nb_cell;i++)
1484     {
1485     TPL_CELLULE_GRILLE<MG_NOEUD*> *cell=grille.get_cellule(i);
1486     int nb_noeud_cell=cell->get_nb_entite();
1487     for (int j=0;j<nb_noeud_cell;j++)
1488     {
1489     MG_NOEUD* noeud1=cell->get_entite(j);
1490     // if (noeud1->get_nouveau_numero()!=(-1)) continue;
1491     // noeud1->change_nouveau_numero(noeud1->get_id());
1492     double *xyz1=noeud1->get_coord();
1493     int nb=noeud1->get_lien_segment()->get_nb();
1494     double longref=0.;
1495     for (int jj=0;jj<nb;jj++)
1496     longref=longref+noeud1->get_lien_segment()->get(jj)->get_longueur();
1497     longref=longref/nb;
1498     for (int k=j+1;k<nb_noeud_cell;k++)
1499     {
1500     MG_NOEUD* noeud2=cell->get_entite(k);
1501     double *xyz2=noeud2->get_coord();
1502     OT_VECTEUR_3D vec(xyz1,xyz2);
1503     double longueur=vec.get_longueur();
1504     if (longueur<eps*longref)
1505     {
1506     lst_noeud[noeud2->get_nouveau_numero()]=noeud1;
1507     }
1508     }
1509     }
1510     }
1511     MG_GESTIONNAIRE gest;
1512     MG_MAILLAGE* mai2=new MG_MAILLAGE(NULL);
1513     gest.ajouter_mg_maillage(mai2);
1514     for (int i=0;i<nb_noeud;i++)
1515     {
1516     MG_NOEUD* noeud=lst_noeud[i];
1517     MG_NOEUD* nvnoeud;
1518     if (noeud->get_nouveau_numero()==i) nvnoeud=mai2->ajouter_mg_noeud(NULL,noeud->get_x(),noeud->get_y(),noeud->get_z(),TRIANGULATION);
1519     else nvnoeud=lst_noeud[noeud->get_nouveau_numero()];
1520     lst_noeud[i]=nvnoeud;
1521     }
1522     int nb_tri=mai->get_nb_mg_triangle();
1523     for (int i=0;i<nb_tri;i++)
1524     {
1525     MG_TRIANGLE* tri=mai->get_mg_triangle(i);
1526     MG_NOEUD* noeud1=tri->get_noeud1();
1527     MG_NOEUD* noeud2=tri->get_noeud2();
1528     MG_NOEUD* noeud3=tri->get_noeud3();
1529     mai2->ajouter_mg_triangle(NULL,lst_noeud[noeud1->get_nouveau_numero()],lst_noeud[noeud2->get_nouveau_numero()],lst_noeud[noeud3->get_nouveau_numero()],TRIANGULATION);
1530     }
1531     gest.enregistrer(outputfilename);
1532     return 1;
1533     }
1534 sattarpa 554
1535    
1536    
1537    
1538    
1539    
1540    
1541    
1542    
1543    
1544    
1545    
1546    
1547    
1548    
1549    
1550    
1551    
1552    
1553    
1554    
1555    
1556    
1557 sattarpa 596
1558    
1559    
1560