23 #ifndef OCC_Fonction_v2017
24 #define OCC_Fonction_v2017
29 #include <Standard_Handle.hxx>
30 #include <TDocStd_Document.hxx>
31 #include <XCAFApp_Application.hxx>
32 #include <XCAFDoc_ShapeTool.hxx>
33 #include <XCAFDoc_DocumentTool.hxx>
34 #include <TDataStd_Name.hxx>
35 #include <TDataStd_Integer.hxx>
36 #include <TDataStd_AsciiString.hxx>
39 #include <PCDM_RetrievalDriver.hxx>
40 #include <PCDM_StorageDriver.hxx>
41 #include <XmlXCAFDrivers_DocumentRetrievalDriver.hxx>
42 #include <XmlXCAFDrivers_DocumentStorageDriver.hxx>
45 #include <TopTools_DataMapOfShapeInteger.hxx>
46 #include <TopTools_DataMapOfShapeShape.hxx>
47 #include <ShapeExtend_Explorer.hxx>
48 #include <TopTools_DataMapOfIntegerShape.hxx>
49 #include <TopTools_MapOfShape.hxx>
51 #include <Precision.hxx>
52 #include <Bnd_Box.hxx>
53 #include <BRepBndLib.hxx>
54 #include <GeomAPI_ProjectPointOnCurve.hxx>
55 #include <GeomAPI_ProjectPointOnSurf.hxx>
56 #include <BRepClass_FaceClassifier.hxx>
57 #include <Geom_Curve.hxx>
58 #include <ShapeAnalysis.hxx>
60 #include <BRepTools.hxx>
61 #include <BRepTools_WireExplorer.hxx>
62 #include <BRepMesh_IncrementalMesh.hxx>
64 #include <TopoDS_Shape.hxx>
65 #include <TopoDS_Compound.hxx>
66 #include <TopoDS_CompSolid.hxx>
67 #include <TopoDS_Solid.hxx>
68 #include <TopoDS_Shell.hxx>
69 #include <TopoDS_Face.hxx>
70 #include <TopoDS_Wire.hxx>
71 #include <TopoDS_Edge.hxx>
72 #include <TopoDS_Vertex.hxx>
112 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
113 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
114 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
116 bool fusionner_entite_similaire=
false,
123 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
124 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
125 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
127 bool fusionner_entite_similaire=
false,
139 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
140 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
141 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
143 bool fusionner_entite_similaire=
false,
147 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
148 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
149 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
151 bool fusionner_entite_similaire=
false,
155 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
156 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
157 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
159 bool fusionner_entite_similaire=
false,
163 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
164 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
165 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
167 bool fusionner_entite_similaire=
false,
171 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
172 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
173 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
176 bool fusionner_entite_similaire=
false,
180 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
181 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
182 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
185 bool fusionner_entite_similaire=
false,
189 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
190 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
191 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
194 bool fusionner_entite_similaire=
false,
198 TopoDS_Wire *topods_wire,
199 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
200 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
201 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
204 bool fusionner_entite_similaire=
false,
208 std::map<MG_ELEMENT_TOPOLOGIQUE*,MG_ELEMENT_TOPOLOGIQUE*> *map_nouveau_mg_element_topologique,
209 std::map<MG_ELEMENT_COTOPOLOGIQUE*,MG_ELEMENT_COTOPOLOGIQUE*> *map_nouveau_mg_element_cotopologique,
210 std::map<MG_ELEMENT_GEOMETRIQUE*,MG_ELEMENT_GEOMETRIQUE*> *map_nouveau_mg_element_geometrique,
214 bool fusionner_entite_similaire=
false,
258 virtual const TopoDS_Shape&
GetShape(
const int id_shape);
263 TopTools_DataMapOfShapeShape &map_TopoDS_Solid,
264 TopTools_DataMapOfShapeShape &map_TopoDS_Shell,
265 TopTools_DataMapOfShapeShape &map_TopoDS_Face,
266 TopTools_DataMapOfShapeShape &map_TopoDS_Wire,
267 TopTools_DataMapOfShapeShape &map_TopoDS_Edge,
268 TopTools_DataMapOfShapeShape &map_TopoDS_Vertex);
272 void identifier_TopoDS_Solid(
OCC_VOLUME* occ_volume,std::map<long,MG_IDENTIFICATEUR*> &map_element_identifie,XCAFDoc_ShapeTool &shape_tool,TDF_Label &top_label_shape,
bool top_shape=
false);
273 void identifier_TopoDS_Shell(
OCC_COQUILLE* occ_coquille,std::map<long,MG_IDENTIFICATEUR*> &map_element_identifie,XCAFDoc_ShapeTool &shape_tool,TDF_Label &top_label_shape,
bool top_shape=
false);
274 void identifier_TopoDS_Face(
OCC_FACE* occ_face,std::map<long,MG_IDENTIFICATEUR*> &map_element_identifie,XCAFDoc_ShapeTool &shape_tool,TDF_Label &top_label_shape,
bool top_shape=
false);
275 void identifier_TopoDS_Wire(
OCC_BOUCLE* occ_boucle,std::map<long,MG_IDENTIFICATEUR*> &map_element_identifie,XCAFDoc_ShapeTool &shape_tool,TDF_Label &top_label_shape,
bool top_shape=
false);
276 void identifier_TopoDS_Edge(
OCC_ARETE* occ_arete,std::map<long,MG_IDENTIFICATEUR*> &map_element_identifie,XCAFDoc_ShapeTool &shape_tool,TDF_Label &top_label_shape,
bool top_shape=
false);
277 void identifier_TopoDS_Vertex(
OCC_SOMMET* occ_sommet,std::map<long,MG_IDENTIFICATEUR*> &map_element_identifie,XCAFDoc_ShapeTool &shape_tool,TDF_Label &top_label_shape,
bool top_shape=
false);
virtual int enregistrer_fichier_OCAF(char *file, MG_GEOMETRIE *mg_geometrie)
void identifier_TopoDS_Face(OCC_FACE *occ_face, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
virtual const TopoDS_Shape & GetShape(const int id_shape)
TopoDS_Solid get_TopoDS_Solid_id(long id)
TopoDS_Vertex get_TopoDS_Vertex_id(long id)
MG_SOMMET * importer_TopoDS_Vertex(TopoDS_Vertex topods_vertex, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_ARETE *mg_arete=NULL, int index_sommet=1, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
virtual int importer_fichier_brep(char *file, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
int ajouter_TopoDS_Edge_id(TopoDS_Edge edge, long id)
OCC_SOMMET * un_equivalent_est_present_recherche_avancee(TopoDS_Vertex vertex, NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE *, TopTools_ShapeMapHasher > &MapOfShape_MG_ELEMENT_TOPOLOGIQUE)
int supprimer_OCC_ARETE(OCC_ARETE *occ_arete)
TopoDS_Wire get_TopoDS_Wire_id(long id)
int ajouter_OCC_SOMMET(class OCC_SOMMET *occ_sommet)
OCC_SOMMET * un_equivalent_est_present(TopoDS_Vertex vertex, bool recherche_avancee=false)
TopoDS_Edge get_TopoDS_Edge_id(long id)
int ajouter_TopoDS_Vertex_id(TopoDS_Vertex vertex, long id)
virtual int exporter_fichier_STEP(char *file, MG_GEOMETRIE *mg_geometrie)
NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_COTOPOLOGIQUE *, TopTools_ShapeMapHasher > m_MapOfShape_MG_ELEMENT_COTOPOLOGIQUE
int ajouter_OCC_COQUILLE(class OCC_COQUILLE *occ_coquille)
void identifier_TopoDS_Edge_Degenerated(TopoDS_Shape topods_shape, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape)
int ajouter_TopoDS_Face_id(TopoDS_Face face, long id)
int ajouter_TopoDS_Solid_id(TopoDS_Solid solid, long id)
int supprimer_OCC_COQUILLE(OCC_COQUILLE *occ_coquille)
void importer_TopoDS_Compound(TopoDS_Compound topods_compound, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
TopoDS_Shell get_TopoDS_Shell_id(long id)
virtual int exporter_fichier_brep(char *file, MG_GEOMETRIE *mg_geometrie)
int ajouter_OCC_BOUCLE(class OCC_BOUCLE *occ_boucle)
NCollection_DataMap< TopoDS_Shape, MG_ELEMENT_TOPOLOGIQUE *, TopTools_ShapeMapHasher > m_MapOfShape_MG_ELEMENT_TOPOLOGIQUE
int ajouter_OCC_FACE(class OCC_FACE *occ_face)
int ajouter_OCC_COQUE(class OCC_COQUE *occ_coque)
MG_COQUILLE * importer_TopoDS_Shell(TopoDS_Shell topods_shell, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_ELEMENT_TOPOLOGIQUE *mg_ele_topo_superieur=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
virtual int ouvrir_fichier_OCAF(char *file)
int supprimer_OCC_SOMMET(OCC_SOMMET *occ_sommet)
int ajouter_TopoDS_Shell_id(TopoDS_Shell shell, long id)
virtual int importer_fichier_STEP(char *file, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
int ajouter_OCC_VOLUME(class OCC_VOLUME *occ_volume)
int supprimer_OCC_BOUCLE(OCC_BOUCLE *occ_boucle)
int ajouter_OCC_ARETE(class OCC_ARETE *occ_arete)
MG_ELEMENT_TOPOLOGIQUE * get_MG_ELEMENT_TOPOLOGIQUE(TopoDS_Shape topods_shape)
void identifier_TopoDS_Shell(OCC_COQUILLE *occ_coquille, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
void importer_TopoDS_Shape(TopoDS_Shape topods_shape, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
void identifier_TopoDS_Vertex(OCC_SOMMET *occ_sommet, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
void identifier_TopoDS_Edge(OCC_ARETE *occ_arete, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
int supprimer_OCC_COQUE(OCC_COQUE *occ_coque)
std::map< long, TopoDS_Shape > m_map_id_TopoDS_Shape
void identifier_TopoDS_Wire(OCC_BOUCLE *occ_boucle, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
int decompose_TopoDS_Compound(TopoDS_Compound topods_compound, TopTools_DataMapOfShapeShape &map_TopoDS_Solid, TopTools_DataMapOfShapeShape &map_TopoDS_Shell, TopTools_DataMapOfShapeShape &map_TopoDS_Face, TopTools_DataMapOfShapeShape &map_TopoDS_Wire, TopTools_DataMapOfShapeShape &map_TopoDS_Edge, TopTools_DataMapOfShapeShape &map_TopoDS_Vertex)
void identifier_TopoDS_Solid(OCC_VOLUME *occ_volume, std::map< long, MG_IDENTIFICATEUR * > &map_element_identifie, XCAFDoc_ShapeTool &shape_tool, TDF_Label &top_label_shape, bool top_shape=false)
int supprimer_OCC_FACE(OCC_FACE *occ_face)
MG_ARETE * importer_TopoDS_Edge(TopoDS_Edge topods_edge, TopoDS_Wire *topods_wire, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_BOUCLE *mg_boucle=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
MG_BOUCLE * importer_TopoDS_Wire(TopoDS_Wire topods_wire, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_ELEMENT_TOPOLOGIQUE *mg_ele_topo_superieur=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
MG_ELEMENT_COTOPOLOGIQUE * get_MG_ELEMENT_COTOPOLOGIQUE(TopoDS_Shape topods_shape)
virtual std::string get_version(void)
void importer_TopoDS_CompSolid(TopoDS_CompSolid topods_compsolid, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
TopoDS_Face get_TopoDS_Face_id(long id)
MG_FACE * importer_TopoDS_Face(TopoDS_Face topods_face, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_COQUILLE *mg_coquille=NULL, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
int supprimer_OCC_VOLUME(OCC_VOLUME *occ_volume)
int ajouter_TopoDS_Wire_id(TopoDS_Wire wire, long id)
MG_VOLUME * importer_TopoDS_Solid(TopoDS_Solid topods_solid, std::map< MG_ELEMENT_TOPOLOGIQUE *, MG_ELEMENT_TOPOLOGIQUE * > *map_nouveau_mg_element_topologique, std::map< MG_ELEMENT_COTOPOLOGIQUE *, MG_ELEMENT_COTOPOLOGIQUE * > *map_nouveau_mg_element_cotopologique, std::map< MG_ELEMENT_GEOMETRIQUE *, MG_ELEMENT_GEOMETRIQUE * > *map_nouveau_mg_element_geometrique, MG_GEOMETRIE *mg_geometrie=NULL, bool fusionner_entite_similaire=false, double precision=1e-6)
virtual ~OCC_FONCTION_V2017(void)