Salome HOME
Copyright update 2022
[modules/smesh.git] / src / SMESH / SMESH_Algo.hxx
index c0075a88e310f18c9ddaeb4fddbf3d66ed21e60e..3beb89ae12c68c5e97c698bf46df9eaec4d48fac 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -36,6 +36,7 @@
 #include "SMESH_Hypothesis.hxx"
 
 #include <GeomAbs_Shape.hxx>
+#include <TopoDS_Shape.hxx>
 
 #include <string>
 #include <vector>
@@ -59,8 +60,8 @@ class TopoDS_Vertex;
 class TopoDS_Wire;
 class gp_XYZ;
 
-typedef std::map< SMESH_subMesh*, std::vector<int> >           MapShapeNbElems;
-typedef std::map< SMESH_subMesh*, std::vector<int> >::iterator MapShapeNbElemsItr;
+typedef std::map< SMESH_subMesh*, std::vector<smIdType> >           MapShapeNbElems;
+typedef std::map< SMESH_subMesh*, std::vector<smIdType> >::iterator MapShapeNbElemsItr;
 
 // ==================================================================================
 /*!
@@ -89,10 +90,11 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
     std::set<SMDSAbs_GeometryType> _outElemTypes; // produced types of mesh elements
     std::string                    _label;        // GUI type name
 
+    Features(): _dim( -1 ) {}
     bool IsCompatible( const Features& algo2 ) const;
   };
   /*!
-   * \brief Returns a structure describing algorithm features
+   * \brief Return a structure describing algorithm features
    */
   static const Features& GetFeatures( const std::string& algoType );
   const Features&        GetFeatures() const { return GetFeatures( _name ); }
@@ -126,7 +128,7 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
   virtual std::istream & LoadFrom(std::istream & load);
 
   /*!
-   * \brief Returns all types of compatible hypotheses
+   * \brief Return all types of compatible hypotheses
    */
   const std::vector < std::string > & GetCompatibleHypothesis();
 
@@ -195,7 +197,7 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
                         MapShapeNbElems& aResMap) = 0;
 
   /*!
-   * \brief Returns a list of compatible hypotheses used to mesh a shape
+   * \brief Return a list of compatible hypotheses used to mesh a shape
     * \param aMesh - the mesh 
     * \param aShape - the shape
     * \param ignoreAuxiliary - do not include auxiliary hypotheses in the list
@@ -212,22 +214,11 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
                     const TopoDS_Shape & aShape,
                     const bool           ignoreAuxiliary=true) const;
   /*!
-   * \brief Returns a list of compatible hypotheses assigned to a shape in a mesh
-    * \param aMesh - the mesh 
-    * \param aShape - the shape
-    * \param ignoreAuxiliary - do not include auxiliary hypotheses in the list
-    * \retval const std::list <const SMESHDS_Hypothesis*> - hypotheses list
-   * 
-   *  List the relevant hypothesis associated to the shape. Relevant hypothesis
-   *  have a name (type) listed in the algorithm. Hypothesis associated to
-   *  father shape -are not- taken into account (see GetUsedHypothesis)
+   * \brief Return sub-shape to which hypotheses returned by GetUsedHypothesis() are assigned
    */
-  const std::list <const SMESHDS_Hypothesis *> &
-  GetAppliedHypothesis(SMESH_Mesh &         aMesh,
-                       const TopoDS_Shape & aShape,
-                       const bool           ignoreAuxiliary=true) const;
+  virtual const std::list < TopoDS_Shape > & GetAssignedShapes() const;
   /*!
-   * \brief Returns the filter recognizing only compatible hypotheses
+   * \brief Return the filter recognizing only compatible hypotheses
    *  \param ignoreAuxiliary - make filter ignore compatible auxiliary hypotheses
    *  \retval SMESH_HypoFilter* - the filter that can be NULL
    */
@@ -348,7 +339,7 @@ public:
    */
   static double EdgeLength(const TopoDS_Edge & E);
 
-  int NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W);
+  smIdType NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W);
 
   /*!
    * \brief Return continuity of two edges
@@ -441,8 +432,8 @@ protected:
   const SMESH_HypoFilter *              _compatibleAllHypFilter;
   const SMESH_HypoFilter *              _compatibleNoAuxHypFilter;
   std::vector<std::string>              _compatibleHypothesis;
-  std::list<const SMESHDS_Hypothesis *> _appliedHypList;
   std::list<const SMESHDS_Hypothesis *> _usedHypList;
+  std::list<TopoDS_Shape>               _assigedShapeList; // _usedHypList assigned to
   
 
   // Algo features influencing which Compute() and how is called:
@@ -482,12 +473,28 @@ class SMESH_EXPORT SMESH_1D_Algo: public SMESH_Algo
 {
 public:
   SMESH_1D_Algo(int hypId, SMESH_Gen* gen);
+  /*!
+   * \brief Return true if the algorithm can mesh a given shape
+   *  \param [in] aShape - shape to check
+   *  \param [in] toCheckAll - if true, this check returns OK if all shapes are OK,
+   *              else, returns OK if at least one shape is OK
+   *  \retval bool - \c true by default
+   */
+  virtual bool IsApplicableToShape(const TopoDS_Shape & shape, bool toCheckAll) const;
 };
 
 class SMESH_EXPORT SMESH_2D_Algo: public SMESH_Algo
 {
 public:
   SMESH_2D_Algo(int hypId, SMESH_Gen* gen);
+  /*!
+   * \brief Return true if the algorithm can mesh a given shape
+   *  \param [in] aShape - shape to check
+   *  \param [in] toCheckAll - if true, this check returns OK if all shapes are OK,
+   *              else, returns OK if at least one shape is OK
+   *  \retval bool - \c true by default
+   */
+  virtual bool IsApplicableToShape(const TopoDS_Shape & shape, bool toCheckAll) const;
   /*!
    * \brief Method in which an algorithm generating a structured mesh
    *        fixes positions of in-face nodes after there movement
@@ -501,6 +508,14 @@ class SMESH_EXPORT SMESH_3D_Algo: public SMESH_Algo
 {
 public:
   SMESH_3D_Algo(int hypId, SMESH_Gen* gen);
+  /*!
+   * \brief Return true if the algorithm can mesh a given shape
+   *  \param [in] aShape - shape to check
+   *  \param [in] toCheckAll - if true, this check returns OK if all shapes are OK,
+   *              else, returns OK if at least one shape is OK
+   *  \retval bool - \c true by default
+   */
+  virtual bool IsApplicableToShape(const TopoDS_Shape & shape, bool toCheckAll) const;
 };
 
 #endif