25 #include <BRepExtrema_DistShapeShape.hxx>
26 #include <BRepExtrema_DistanceSS.hxx>
27 #include <GeomAPI_ProjectPointOnCurve.hxx>
28 #include <GeomAPI_ProjectPointOnSurf.hxx>
29 #include <ShapeAnalysis.hxx>
30 #include <BRepBuilderAPI_MakeVertex.hxx>
31 #include <BRepAlgoAPI_Common.hxx>
32 #include <BRepGProp.hxx>
33 #include <GProp_GProps.hxx>
34 #include <BRepExtrema_ShapeProximity.hxx>
35 #include <BRepClass3d_SolidClassifier.hxx>
54 shape1=
dynamic_cast<OCC_VOLUME*
>(mgvolume)->get_TopoDS_Solid();
56 BRepBndLib::AddOptimal(shape1,box_shape1);
57 return BOITE_3D(box_shape1.CornerMin().X(),box_shape1.CornerMin().Y(),box_shape1.CornerMin().Z(),box_shape1.CornerMax().X(),box_shape1.CornerMax().Y(),box_shape1.CornerMax().Z());
72 if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE) tpl_map_face1.
ajouter(
dynamic_cast<MG_FACE*
>(mgeletopo1));
73 else if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE) tpl_map_arete1.
ajouter(
dynamic_cast<MG_ARETE*
>(mgeletopo1));
74 else if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET) tpl_map_sommet1.
ajouter(
dynamic_cast<MG_SOMMET*
>(mgeletopo1));
75 if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE) tpl_map_face2.
ajouter(
dynamic_cast<MG_FACE*
>(mgeletopo2));
76 else if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE) tpl_map_arete2.
ajouter(
dynamic_cast<MG_ARETE*
>(mgeletopo2));
77 else if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET) tpl_map_sommet2.
ajouter(
dynamic_cast<MG_SOMMET*
>(mgeletopo2));
81 while(trouve==
false && face1!=NULL)
83 if(tpl_map_face2.
existe(face1))
86 return TYPE_LIEN_TOPOLOGIQUE::FACE;
92 while(trouve==
false && arete1!=NULL)
94 if(tpl_map_arete2.
existe(arete1))
97 return TYPE_LIEN_TOPOLOGIQUE::ARETE;
103 while(trouve==
false && sommet1!=NULL)
105 if(tpl_map_sommet2.
existe(sommet1))
108 return TYPE_LIEN_TOPOLOGIQUE::SOMMET;
110 else sommet1=tpl_map_sommet1.
get_suivant(it_sommet1);
112 return TYPE_LIEN_TOPOLOGIQUE::AUCUN;
119 ecart_type_distance=0;
120 std::vector<double> vector_distance;
121 double umin1,umax1,vmin1,vmax1;
123 double pas_u = (umax1-umin1)/nb_pas;
124 double pas_v = (vmax1-vmin1)/nb_pas;
126 for(
int i=0;i<nb_pas;i++)
129 for(
int j=0;j<nb_pas;j++)
138 double distance =
sqrt((xyz2[0]-xyz1[0])*(xyz2[0]-xyz1[0])+(xyz2[1]-xyz1[1])*(xyz2[1]-xyz1[1])+(xyz2[2]-xyz1[2])*(xyz2[2]-xyz1[2]));
139 vector_distance.push_back(distance);
140 moyenne_distance+=distance;
144 if(vector_distance.size()==0)
return FAIL;
145 moyenne_distance=moyenne_distance/vector_distance.size();
146 std::vector<double>::iterator it;
147 for(it=vector_distance.begin();it!=vector_distance.end();it++)
149 ecart_type_distance+=(*it-moyenne_distance)*(*it-moyenne_distance);
151 ecart_type_distance=
sqrt(ecart_type_distance*(1.0/(vector_distance.size()-1.0)));
159 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
160 TopoDS_Edge edge = ((
OCC_ARETE*)mgarete)->get_TopoDS_Edge();
161 GeomAPI_ProjectPointOnCurve projecteur;
163 Handle(Geom_Curve) courbe_edge = BRep_Tool::Curve(edge,t0,t1);
164 projecteur.Init(point,courbe_edge,t0,t1);
165 if(projecteur.NbPoints()==0)
return FAIL;
166 t = projecteur.LowerDistanceParameter();
174 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
175 TopoDS_Face face = ((
OCC_FACE*)mgface)->get_TopoDS_Face();
176 GeomAPI_ProjectPointOnSurf projecteur;
178 ShapeAnalysis::GetFaceUVBounds(face,u0,u1,v0,v1);
179 Handle(Geom_Surface) surface = BRep_Tool::Surface(face);
180 projecteur.Init(point,surface);
181 if(!projecteur.IsDone())
return FAIL;
182 if(projecteur.NbPoints()==0)
return FAIL;
183 gp_Pnt point2 = projecteur.NearestPoint();
194 gp_Pnt point(xyz1[0],xyz1[1],xyz1[2]);
195 BRepBuilderAPI_MakeVertex makevertex(point);
196 TopoDS_Vertex vertex=makevertex.Vertex();
197 TopoDS_Face face1 = ((
OCC_FACE*)mgface1)->get_TopoDS_Face();
198 TopoDS_Face face2 = ((
OCC_FACE*)mgface2)->get_TopoDS_Face();
199 BRepClass_FaceClassifier face1_classifier(face1,point,Precision::Confusion());
200 if(face1_classifier.State()==TopAbs_OUT)
return FAIL;
201 BRepExtrema_DistShapeShape distshapeshape(vertex,face2);
202 distshapeshape.Perform();
203 if(!distshapeshape.IsDone())
return FAIL;
204 double distance_min=std::numeric_limits< double >::max();
206 for(
int i=1;i==distshapeshape.NbSolution();i++)
208 gp_Pnt point2= distshapeshape.PointOnShape2(i);
212 double distance=
sqrt((tmp[0]-xyz1[0])*(tmp[0]-xyz1[0])+(tmp[1]-xyz1[1])*(tmp[1]-xyz1[1])+(tmp[2]-xyz1[2])*(tmp[2]-xyz1[2]));
213 if(distance<distance_min)
215 distance_min=distance;
228 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
229 BRepBuilderAPI_MakeVertex makevertex(point);
230 TopoDS_Vertex vertex=makevertex.Vertex();
231 TopoDS_Edge edge = ((
OCC_ARETE*)mgarete)->get_TopoDS_Edge();
232 BRepExtrema_DistShapeShape distshapeshape(vertex,edge);
233 distshapeshape.Perform();
234 if(!distshapeshape.IsDone())
return FAIL;
235 double distance_min=std::numeric_limits< double >::max();
237 for(
int i=1;i==distshapeshape.NbSolution();i++)
239 gp_Pnt point2= distshapeshape.PointOnShape2(i);
245 if ((t<mgarete->get_tmin()) || (t>mgarete->
get_tmax()))
continue;
246 double distance=
sqrt((tmp[0]-xyz[0])*(tmp[0]-xyz[0])+(tmp[1]-xyz[1])*(tmp[1]-xyz[1])+(tmp[2]-xyz[2])*(tmp[2]-xyz[2]));
247 if(distance<distance_min)
249 distance_min=distance;
264 TopoDS_Face face = ((
OCC_FACE*)mgface)->get_TopoDS_Face();
265 ShapeAnalysis::GetFaceUVBounds(face,umin,umax,vmin,vmax);
275 if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
277 shape1=
dynamic_cast<OCC_SOMMET*
>(mgeletopo1)->get_TopoDS_Vertex();
279 else if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE)
281 shape1=
dynamic_cast<OCC_ARETE*
>(mgeletopo1)->get_TopoDS_Edge();
283 else if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
285 shape1=
dynamic_cast<OCC_FACE*
>(mgeletopo1)->get_TopoDS_Face();
287 else if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME)
289 shape1=
dynamic_cast<OCC_VOLUME*
>(mgeletopo1)->get_TopoDS_Solid();
292 if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
294 shape2=
dynamic_cast<OCC_SOMMET*
>(mgeletopo2)->get_TopoDS_Vertex();
296 else if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE)
298 shape2=
dynamic_cast<OCC_ARETE*
>(mgeletopo2)->get_TopoDS_Edge();
300 else if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
302 shape2=
dynamic_cast<OCC_FACE*
>(mgeletopo2)->get_TopoDS_Face();
304 else if(mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME)
306 shape2=
dynamic_cast<OCC_VOLUME*
>(mgeletopo2)->get_TopoDS_Solid();
310 if(mgeletopo1->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE && mgeletopo2->
get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
318 BRepExtrema_DistShapeShape distshapeshape(shape2,shape1,Extrema_ExtFlag_MINMAX);
319 distshapeshape.SetDeflection(Precision::Angular());
320 distshapeshape.Perform();
321 if(!distshapeshape.IsDone())
return FAIL;
322 distance=std::numeric_limits< double >::max();
323 for(
int i=1;i<distshapeshape.NbSolution()+1;i++)
325 gp_Pnt p1=distshapeshape.PointOnShape1(i);
326 gp_Pnt p2=distshapeshape.PointOnShape2(i);
327 double dist=
sqrt((p2.X()-p1.X())*(p2.X()-p1.X())+(p2.Y()-p1.Y())*(p2.Y()-p1.Y())+(p2.Z()-p1.Z())*(p2.Z()-p1.Z()));
328 if(dist<distance)distance=dist;
330 distance=distshapeshape.Value();
343 TopoDS_Solid solid1 = ((
OCC_VOLUME*)mgvolume1)->get_TopoDS_Solid();
344 TopoDS_Solid solid2 = ((
OCC_VOLUME*)mgvolume2)->get_TopoDS_Solid();
345 BRepExtrema_DistShapeShape distshapeshape(solid1,solid2,Extrema_ExtFlag_MIN);
346 distshapeshape.Perform();
347 if(!distshapeshape.IsDone())
return FAIL;
348 distance=distshapeshape.Value();
356 TopoDS_Face face = ((
OCC_FACE*)mgface)->get_TopoDS_Face();
357 TopoDS_Solid solid = ((
OCC_VOLUME*)mgvolume)->get_TopoDS_Solid();
358 BRepExtrema_DistShapeShape distshapeshape(face,solid);
359 distshapeshape.Perform();
360 if(!distshapeshape.IsDone())
return FAIL;
361 distance=distshapeshape.Value();
369 TopoDS_Face face1 = ((
OCC_FACE*)mgface1)->get_TopoDS_Face();
370 TopoDS_Face face2 = ((
OCC_FACE*)mgface2)->get_TopoDS_Face();
371 BRepExtrema_DistShapeShape distshapeshape(face1,face2);
372 distshapeshape.Perform();
373 if(!distshapeshape.IsDone())
return FAIL;
374 distance=distshapeshape.Value();
382 distance=std::numeric_limits<double>::max();
383 double umin,umax,vmin,vmax;
395 double pas_u = (umax-umin)/nb_pas;
396 double pas_v = (vmax-vmin)/nb_pas;
398 for(
long i=0;i<nb_pas;i++)
401 for(
long j=0;j<nb_pas;j++)
403 uv1[1] = vmin+j*pas_v;
410 double dist =
sqrt((xyz2[0]-xyz1[0])*(xyz2[0]-xyz1[0])+(xyz2[1]-xyz1[1])*(xyz2[1]-xyz1[1])+(xyz2[2]-xyz1[2])*(xyz2[2]-xyz1[2]));
411 if(dist<distance) distance=dist;
423 distance=std::numeric_limits<double>::max();
429 if(distance_i<distance) distance=distance_i;
437 TopoDS_Edge edge1 = ((
OCC_ARETE*)mgarete1)->get_TopoDS_Edge();
438 TopoDS_Edge edge2 = ((
OCC_ARETE*)mgarete2)->get_TopoDS_Edge();
439 BRepExtrema_DistShapeShape distshapeshape(edge1,edge2);
440 distshapeshape.Perform();
441 if(!distshapeshape.IsDone())
return FAIL;
442 distance=distshapeshape.Value();
451 TopoDS_Solid solid1 = ((
OCC_VOLUME*)mgvolume1)->get_TopoDS_Solid();
452 TopoDS_Solid solid2 = ((
OCC_VOLUME*)mgvolume2)->get_TopoDS_Solid();
453 BRepAlgoAPI_Common brep_common(solid1,solid2);
454 if(!brep_common.IsDone())
return 0.0;
455 if(brep_common.Shape().IsNull()) std::cerr <<
"NULL SHAPE !!!!!!!!!!!" << std::endl;
457 BRepGProp::VolumeProperties(brep_common.Shape(),props,eps);
465 TopoDS_Solid solid = ((
OCC_VOLUME*)mgvolume)->get_TopoDS_Solid();
467 BRepGProp::VolumeProperties(solid,props,eps);
475 TopoDS_Edge edge = ((
OCC_ARETE*)mgarete)->get_TopoDS_Edge();
477 BRepGProp::LinearProperties(edge,props);
485 TopoDS_Face face = ((
OCC_FACE*)mgface)->get_TopoDS_Face();
487 BRepGProp::SurfaceProperties(face,props,eps);
495 std::vector<MG_VOLUME *>::iterator it_volume;
496 BRep_Builder brep_builder;
497 TopoDS_Compound Compound;
498 brep_builder.MakeCompound(Compound);
499 for(it_volume=vector_volume.begin();it_volume!=vector_volume.end();it_volume++)
501 TopoDS_Solid solid = ((
OCC_VOLUME*)*it_volume)->get_TopoDS_Solid();
502 brep_builder.Add(Compound,solid);
506 brepgprop.VolumeProperties(Compound,props,eps);
507 gp_Pnt centerofmass = props.CentreOfMass();
508 centre_masse[0] = centerofmass.X();
509 centre_masse[1] = centerofmass.Y();
510 centre_masse[2] = centerofmass.Z();
511 props.StaticMoments(Ixyz[0],Ixyz[1],Ixyz[2]);
512 gp_Mat momentofinertia = props.MatrixOfInertia();
513 I[0] = momentofinertia.Value(1,1);
514 I[1] = momentofinertia.Value(2,2);
515 I[2] = momentofinertia.Value(3,3);
516 I[3] = momentofinertia.Value(1,2);
517 I[4] = momentofinertia.Value(2,3);
518 I[5] = momentofinertia.Value(1,3);
526 TopoDS_Face face = ((
OCC_FACE*)mgface)->get_TopoDS_Face();
527 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
528 BRepClass_FaceClassifier face1_classifier(face,point,Precision::Confusion());
529 if(face1_classifier.State()==TopAbs_OUT)
return FAIL;
537 TopoDS_Solid solid = ((
OCC_VOLUME*)mgvolume)->get_TopoDS_Solid();
538 gp_Pnt point(xyz[0],xyz[1],xyz[2]);
539 BRepClass3d_SolidClassifier classifier(solid,point,Precision::Confusion());
540 if(classifier.State()==TopAbs_OUT)
return FAIL;
556 if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
560 else if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE)
564 else if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
579 if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET)
593 if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE)
607 if(ele->get_type()==MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE)
620 map_point.
ajouter(sommet->get_point());
629 map_courbe.
ajouter(arete->get_courbe());
638 map_surface.
ajouter(face->get_surface());
646 if(map_mg_element_geometrique!=NULL) map_mg_element_geometrique->
ajouter(sommet->
get_point());
654 if(map_mg_element_topologique!=NULL) map_mg_element_topologique->
ajouter(cosommet->
get_sommet());
656 map_mg_element_topologique,
657 map_mg_element_cotopologique,
658 map_mg_element_geometrique);
666 if(map_mg_element_cotopologique!=NULL)
671 if(map_mg_element_geometrique!=NULL) map_mg_element_geometrique->
ajouter(arete->
get_courbe());
673 map_mg_element_topologique,
674 map_mg_element_cotopologique,
675 map_mg_element_geometrique);
677 map_mg_element_topologique,
678 map_mg_element_cotopologique,
679 map_mg_element_geometrique);
687 if(map_mg_element_topologique!=NULL) map_mg_element_topologique->
ajouter(coarete->
get_arete());
689 map_mg_element_topologique,
690 map_mg_element_cotopologique,
691 map_mg_element_geometrique);
701 if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->
ajouter(boucle->
get_mg_coarete(i));
703 map_mg_element_topologique,
704 map_mg_element_cotopologique,
705 map_mg_element_geometrique);
716 if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->
ajouter(poutre->
get_mg_boucle(i));
718 map_mg_element_topologique,
719 map_mg_element_cotopologique,
720 map_mg_element_geometrique);
731 if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->
ajouter(face->
get_mg_boucle(i));
733 map_mg_element_topologique,
734 map_mg_element_cotopologique,
735 map_mg_element_geometrique);
737 if(map_mg_element_geometrique!=NULL) map_mg_element_geometrique->
ajouter(face->
get_surface());
745 if(map_mg_element_topologique!=NULL) map_mg_element_topologique->
ajouter(coface->
get_face());
747 map_mg_element_topologique,
748 map_mg_element_cotopologique,
749 map_mg_element_geometrique);
759 if(map_mg_element_cotopologique!=NULL) map_mg_element_cotopologique->
ajouter(coquille->
get_mg_coface(i));
761 map_mg_element_topologique,
762 map_mg_element_cotopologique,
763 map_mg_element_geometrique);
776 map_mg_element_topologique,
777 map_mg_element_cotopologique,
778 map_mg_element_geometrique);
791 map_mg_element_topologique,
792 map_mg_element_cotopologique,
793 map_mg_element_geometrique);
802 switch(mg_element_topologique->
get_type())
804 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::SOMMET:
808 map_mg_element_topologique,
809 map_mg_element_cotopologique,
810 map_mg_element_geometrique);
813 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::ARETE:
817 map_mg_element_topologique,
818 map_mg_element_cotopologique,
819 map_mg_element_geometrique);
822 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::FACE:
826 map_mg_element_topologique,
827 map_mg_element_cotopologique,
828 map_mg_element_geometrique);
831 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::VOLUME:
835 map_mg_element_topologique,
836 map_mg_element_cotopologique,
837 map_mg_element_geometrique);
840 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::COQUE:
844 map_mg_element_topologique,
845 map_mg_element_cotopologique,
846 map_mg_element_geometrique);
849 case MG_ELEMENT_TOPOLOGIQUE::TYPE_ELEMENT_TOPOLOGIQUE::POUTRE:
853 map_mg_element_topologique,
854 map_mg_element_cotopologique,
855 map_mg_element_geometrique);
866 switch(mg_element_cotopologique->
get_type())
868 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COSOMMET:
872 map_mg_element_topologique,
873 map_mg_element_cotopologique,
874 map_mg_element_geometrique);
877 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COARETE:
881 map_mg_element_topologique,
882 map_mg_element_cotopologique,
883 map_mg_element_geometrique);
886 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::BOUCLE:
890 map_mg_element_topologique,
891 map_mg_element_cotopologique,
892 map_mg_element_geometrique);
895 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COFACE:
899 map_mg_element_topologique,
900 map_mg_element_cotopologique,
901 map_mg_element_geometrique);
904 case MG_ELEMENT_COTOPOLOGIQUE::TYPE_ELEMENT_COTOPOLOGIQUE::COQUILLE:
908 map_mg_element_topologique,
909 map_mg_element_cotopologique,
910 map_mg_element_geometrique);
virtual double get_tmax(void)
virtual class MG_COURBE * get_courbe(void)
virtual class MG_COSOMMET * get_cosommet2(void)
virtual class MG_COSOMMET * get_cosommet1(void)
virtual void inverser(double &t, double *xyz, double precision=1e-6)
virtual MG_COARETE * get_mg_coarete(int num)
virtual int get_nb_mg_coarete(void)
virtual MG_ARETE * get_arete(void)
virtual MG_FACE * get_face(void)
virtual int get_nb_mg_coquille(void)
virtual MG_COQUILLE * get_mg_coquille(int num)
virtual MG_COFACE * get_mg_coface(int num)
virtual int get_nb_mg_coface(void)
virtual MG_SOMMET * get_sommet(void)
virtual int get_type(void)=0
virtual int get_type(void)=0
virtual void get_topologie_sousjacente(TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *lst)=0
virtual void evaluer(double *uv, double *xyz)
virtual MG_SURFACE * get_surface(void)
virtual MG_BOUCLE * get_mg_boucle(int num)
virtual int get_nb_mg_boucle(void)
virtual MG_BOUCLE * get_mg_boucle(int num)
virtual int get_nb_mg_boucle(void)
virtual MG_POINT * get_point(void)
virtual int est_periodique_u(void)=0
virtual double get_periode_u(void)=0
virtual int est_periodique_v(void)=0
virtual double get_periode_v(void)=0
virtual MG_COQUILLE * get_mg_coquille(int num)
virtual int get_nb_mg_coquille(void)
static int get_distance_min_mg_arete_mg_arete(MG_ARETE *mgarete1, MG_ARETE *mgarete2, double &distance)
static int get_distance_min_liste_mg_face_mg_volume(TPL_MAP_ENTITE< MG_FACE * > &map_face, MG_VOLUME *mgvolume, double &distance)
static void get_param_face(MG_FACE *mgface, double &umin, double &umax, double &vmin, double &vmax)
static int get_distance_min_mg_eletopo_mg_eletopo(MG_ELEMENT_TOPOLOGIQUE *mgeletopo1, MG_ELEMENT_TOPOLOGIQUE *mgeletopo2, double &distance)
static void get_map_mg_surface_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_SURFACE * > &map_surface)
static double get_aire(MG_FACE *mgface, double eps=0.001)
static int get_lien_topologique(MG_ELEMENT_TOPOLOGIQUE *mgeletopo1, MG_ELEMENT_TOPOLOGIQUE *mgeletopo2)
static int est_dans_mg_face(double *xyz, MG_FACE *mgface)
static void get_map_mg_face_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_FACE * > &map_face)
static void get_map_mg_arete_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_ARETE * > &map_arete)
static int projection_au_plus_pres_sur_mg_face(double *xyz1, MG_FACE *mgface1, MG_FACE *mgface2, double *xyz2)
static void get_map_mg_point_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_POINT * > &map_point)
static int get_distance_min_mg_face_mg_face(MG_FACE *mgface1, MG_FACE *mgface2, double &distance)
static void get_map_mg_courbe_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_COURBE * > &map_courbe)
static int get_distance_min_mg_volume_mg_volume(MG_VOLUME *mgvolume1, MG_VOLUME *mgvolume2, double &distance)
static void get_map_mg_ele_topo_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_SOMMET * > &map_sommet, TPL_MAP_ENTITE< MG_ARETE * > &map_arete, TPL_MAP_ENTITE< MG_FACE * > &map_face)
static int projection_orthogonale_sur_mg_face(double *xyz, MG_FACE *mgface, double *xyz2)
static void get_map_mg_sommet_sous_jacent(MG_ELEMENT_TOPOLOGIQUE *mgeletopo, TPL_MAP_ENTITE< MG_SOMMET * > &map_sommet)
static void get_map_mg_element_sous_jacent(MG_SOMMET *sommet, TPL_MAP_ENTITE< MG_ELEMENT_TOPOLOGIQUE * > *map_mg_element_topologique, TPL_MAP_ENTITE< MG_ELEMENT_COTOPOLOGIQUE * > *map_mg_element_cotopologique, TPL_MAP_ENTITE< MG_ELEMENT_GEOMETRIQUE * > *map_mg_element_geometrique)
static int get_distance_min_mg_face_mg_face_echantillonnage(MG_FACE *mgface1, MG_FACE *mgface2, double &distance, int nb_pas=32)
static void get_propriete_massique(std::vector< MG_VOLUME * > &vector_volume, double *centre_masse, double *Ixyz, double *I, double eps=0.00001)
static double get_volume(MG_VOLUME *mgvolume, double eps=0.001)
static int est_dans_mg_volume(double *xyz, MG_VOLUME *mgvolume)
static BOITE_3D get_boite_3D(MG_VOLUME *mgvolume)
static int projection_au_plus_pres_sur_mg_arete(double *xyz, MG_ARETE *mgarete, double *xyz2)
static int projection_orthogonale_sur_mg_arete(double *xyz, MG_ARETE *mgarete, double &t)
static int get_distance_min_mg_face_mg_volume(MG_FACE *mgface, MG_VOLUME *mgvolume, double &distance)
static double get_volume_intersection(MG_VOLUME *mgvolume1, MG_VOLUME *mgvolume2, double eps=0.001)
static int declage_mg_face_mg_face(MG_FACE *mgface1, MG_FACE *mgface2, double &moyenne_distance, double &ecart_type_distance, int nb_pas=32, double eps=0.000001)
static double get_longueur(MG_ARETE *mgarete)
virtual X get_premier(ITERATEUR &it)
virtual X get_suivant(ITERATEUR &it)
virtual void ajouter(X x)
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
double2 sqrt(double2 &val)