X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSMESH%2FSMESH_Gen.hxx;h=f2887c0443a22986355b7b6da4d7346c6b23e141;hb=c63ee099ad2b149bd70136839c973e8910137bc5;hp=70f17f50605287ab1479e3a01d0bcbaf05692dec;hpb=7b70ad87bf8f5c46b2751f94cd196932b9ae7122;p=modules%2Fsmesh.git diff --git a/src/SMESH/SMESH_Gen.hxx b/src/SMESH/SMESH_Gen.hxx index 70f17f506..f2887c044 100644 --- a/src/SMESH/SMESH_Gen.hxx +++ b/src/SMESH/SMESH_Gen.hxx @@ -17,7 +17,7 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -31,7 +31,6 @@ #include "Utils_SALOME_Exception.hxx" -#include "SMESH_HypothesisFactory.hxx" #include "SMESH_Hypothesis.hxx" #include "SMESH_Algo.hxx" #include "SMESH_1D_Algo.hxx" @@ -44,54 +43,86 @@ #include #include -using namespace std; + typedef struct studyContextStruct { - map < int, SMESH_Hypothesis * >mapHypothesis; - map < int, SMESH_Mesh * >mapMesh; + std::map < int, SMESH_Hypothesis * >mapHypothesis; + std::map < int, SMESH_Mesh * >mapMesh; SMESHDS_Document * myDocument; } StudyContextStruct; class SMESH_Gen { - public: - SMESH_Gen(); - ~SMESH_Gen(); - - SMESH_Hypothesis *CreateHypothesis(const char *anHyp, int studyId) - throw(SALOME_Exception); - SMESH_Mesh *Init(int studyId, const TopoDS_Shape & aShape) - throw(SALOME_Exception); - bool Compute(::SMESH_Mesh & aMesh, const TopoDS_Shape & aShape) - throw(SALOME_Exception); - StudyContextStruct *GetStudyContext(int studyId); - - static int GetShapeDim(const TopoDS_Shape & aShape); - SMESH_Algo *GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); - SMESH_Mesh *Import(int studyId, const char * fileName, const char * fileType); - - // inherited methods from SALOMEDS::Driver - - void Save(int studyId, const char *aUrlOfFile); - void Load(int studyId, const char *aUrlOfFile); - void Close(int studyId); - const char *ComponentDataType(); - - const char *IORToLocalPersistentID(const char *IORString, bool & IsAFile); - const char *LocalPersistentIDToIOR(const char *aLocalPersistentID); - - SMESH_HypothesisFactory _hypothesisFactory; - - map < int, SMESH_Algo * >_mapAlgo; - map < int, SMESH_1D_Algo * >_map1D_Algo; - map < int, SMESH_2D_Algo * >_map2D_Algo; - map < int, SMESH_3D_Algo * >_map3D_Algo; - - private: - int _localId; // unique Id of created objects, within SMESH_Gen entity - map < int, StudyContextStruct * >_mapStudyContext; - map < int, SMESH_Hypothesis * >_mapHypothesis; + public: + SMESH_Gen(); + ~SMESH_Gen(); + +// SMESH_Hypothesis *CreateHypothesis(const char *anHyp, int studyId) +// throw(SALOME_Exception); + SMESH_Mesh* CreateMesh(int theStudyId, bool theIsEmbeddedMode) + throw(SALOME_Exception); + bool Compute(::SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); + + bool CheckAlgoState(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape); + // notify on bad state of attached algos, return false + // if Compute() would fail because of some algo bad state + + + enum TAlgoStateErrorName { NONE=0, MISSING_ALGO, MISSING_HYPO, NOT_CONFORM_MESH }; + struct TAlgoStateError + { + TAlgoStateErrorName _name; + const SMESH_Algo* _algo; + int _algoDim; + bool _isGlobalAlgo; + + TAlgoStateError(): _algoDim(0),_algo(0),_name(NONE) {} + void Set(TAlgoStateErrorName name, const SMESH_Algo* algo, bool isGlobal) + { _name = name; _algo = algo; _algoDim = algo->GetDim(); _isGlobalAlgo = isGlobal; } + void Set(TAlgoStateErrorName name, const int algoDim, bool isGlobal) + { _name = name; _algo = 0; _algoDim = algoDim; _isGlobalAlgo = isGlobal; } + }; + + bool GetAlgoState(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape, + std::list< SMESH_Gen::TAlgoStateError > & theErrors); + // notify on bad state of attached algos, return false + // if Compute() would fail because of some algo bad state + // theErrors list contains problems description + + + StudyContextStruct *GetStudyContext(int studyId); + + static int GetShapeDim(const TopAbs_ShapeEnum & aShapeType); + static int GetShapeDim(const TopoDS_Shape & aShape) + { return GetShapeDim( aShape.ShapeType() ); } + SMESH_Algo* GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape); + static bool IsGlobalHypothesis(const SMESH_Hypothesis* theHyp, SMESH_Mesh& aMesh); + + // inherited methods from SALOMEDS::Driver + + void Save(int studyId, const char *aUrlOfFile); + void Load(int studyId, const char *aUrlOfFile); + void Close(int studyId); + const char *ComponentDataType(); + + const char *IORToLocalPersistentID(const char *IORString, bool & IsAFile); + const char *LocalPersistentIDToIOR(const char *aLocalPersistentID); + + int GetANewId(); + + std::map < int, SMESH_Algo * >_mapAlgo; + std::map < int, SMESH_1D_Algo * >_map1D_Algo; + std::map < int, SMESH_2D_Algo * >_map2D_Algo; + std::map < int, SMESH_3D_Algo * >_map3D_Algo; + + private: + + int _localId; // unique Id of created objects, within SMESH_Gen entity + std::map < int, StudyContextStruct * >_mapStudyContext; + + // hypotheses managing + int _hypId; }; #endif