Salome HOME
- static bool isStraight( const TopoDS_Edge & E, const bool degenResult=false );
[modules/smesh.git] / src / SMESH / SMESH_Algo.hxx
index 3f8f2c839c1b1021f62c552de9e52a7b64e353e2..f2c166605d16832265d219106bd37b96c2a90793 100644 (file)
@@ -52,6 +52,7 @@ class SMESH_Gen;
 class SMESH_HypoFilter;
 class SMESH_Mesh;
 class SMESH_MesherHelper;
+class SMESH_ProxyMesh;
 class SMESH_subMesh;
 class TopoDS_Face;
 class TopoDS_Shape;
@@ -169,6 +170,11 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
    */
   virtual void CancelCompute();
 
+  /*!
+   * \brief If possible, returns progress of computation [0.,1.]
+   */
+  virtual double GetProgress() const;
+
   /*!
    * \brief evaluates size of prospective mesh on a shape
     * \param aMesh - the mesh
@@ -195,7 +201,7 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
   virtual const std::list <const SMESHDS_Hypothesis *> &
   GetUsedHypothesis(SMESH_Mesh &         aMesh,
                     const TopoDS_Shape & aShape,
-                    const bool           ignoreAuxiliary=true);
+                    const bool           ignoreAuxiliary=true) const;
   /*!
    * \brief Returns a list of compatible hypotheses assigned to a shape in a mesh
     * \param aMesh - the mesh 
@@ -210,7 +216,7 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
   const list <const SMESHDS_Hypothesis *> &
   GetAppliedHypothesis(SMESH_Mesh &         aMesh,
                        const TopoDS_Shape & aShape,
-                       const bool           ignoreAuxiliary=true);
+                       const bool           ignoreAuxiliary=true) const;
   /*!
    * \brief Make the filter recognize only compatible hypotheses
    * \param theFilter - the filter to initialize
@@ -224,14 +230,23 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
    */
   virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
   virtual bool SetParametersByDefaults(const TDefaults& dflts, const SMESH_Mesh* theMesh=0);
+
   /*!
    * \brief return compute error
    */
   SMESH_ComputeErrorPtr GetComputeError() const;
   /*!
-   * \brief initialize compute error
+   * \brief initialize compute error etc. before call of Compute()
    */
   void InitComputeError();
+  /*!
+   * \brief Return compute progress by nb of calls of this method
+   */
+  double GetProgressByTic() const;
+  /*!
+   * Return a vector of sub-meshes to Compute()
+   */
+  std::vector<SMESH_subMesh*>& SubMeshesToCompute() { return _smToCompute; }
 
 public:
   // ==================================================================
@@ -325,11 +340,6 @@ public:
    */
   static double EdgeLength(const TopoDS_Edge & E);
 
-  /*!
-   * \brief Calculate normal of a mesh face
-   */
-  static bool FaceNormal(const SMDS_MeshElement* F, gp_XYZ& normal, bool normalized=true);
-
   //static int NumberOfWires(const TopoDS_Shape& S);
   int NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W);
 
@@ -347,6 +357,14 @@ public:
   static bool IsContinuous(const TopoDS_Edge & E1, const TopoDS_Edge & E2) {
     return ( Continuity( E1, E2 ) >= GeomAbs_G1 );
   }
+  /*!
+   * \brief Return true if an edge can be considered straight
+   */
+  static bool IsStraight( const TopoDS_Edge & E, const bool degenResult=false );
+  /*!
+   * \brief Return true if an edge has no 3D curve
+   */
+  static bool isDegenerated( const TopoDS_Edge & E );
 
   /*!
    * \brief Return the node built on a vertex
@@ -356,12 +374,6 @@ public:
    */
   static const SMDS_MeshNode* VertexNode(const TopoDS_Vertex& V, const SMESHDS_Mesh* meshDS);
 
-  /*!
-   * \brief Return nodes common to two elements
-   */
-  static std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
-                                                           const SMDS_MeshElement* e2);
-
   enum EMeshError { MEr_OK = 0, MEr_HOLES, MEr_BAD_ORI, MEr_EMPTY };
 
   /*!
@@ -418,8 +430,14 @@ protected:
   std::list<const SMDS_MeshElement*> _badInputElements; //!< to explain COMPERR_BAD_INPUT_MESH
 
   volatile bool _computeCanceled; //!< is set to True while computing to stop it
+
+  double        _progress;        /* progress of Compute() [0.,1.],
+                                     to be set by an algo really tracking the progress */
+  int           _progressTic;     // counter of calls from SMESH_Mesh::GetComputeProgress()
+  std::vector<SMESH_subMesh*> _smToCompute; // sub-meshes to Compute()
 };
 
+
 class SMESH_EXPORT SMESH_0D_Algo: public SMESH_Algo
 {
 public:
@@ -436,6 +454,13 @@ class SMESH_EXPORT SMESH_2D_Algo: public SMESH_Algo
 {
 public:
   SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen);
+  /*!
+   * \brief Method in which an algorithm generating a structured mesh
+   *        fixes positions of in-face nodes after there movement
+   *        due to insertion of viscous layers.
+   */
+  virtual bool FixInternalNodes(const SMESH_ProxyMesh& mesh,
+                                const TopoDS_Face&     face);
 };
 
 class SMESH_EXPORT SMESH_3D_Algo: public SMESH_Algo