typedef SMDS_Iterator<const TopoDS_Shape*> PShapeIterator;
typedef boost::shared_ptr< PShapeIterator > PShapeIteratorPtr;
-
+
typedef std::vector<const SMDS_MeshNode* > TNodeColumn;
typedef std::map< double, TNodeColumn > TParam2ColumnMap;
/*!
* \brief Return true if 2D mesh on FACE is distored
*/
- static bool IsDistorted2D( SMESH_subMesh* faceSM, bool checkUV=false );
+ static bool IsDistorted2D( SMESH_subMesh* faceSM,
+ bool checkUV = false,
+ SMESH_MesherHelper* faceHelper = NULL);
/*!
* \brief Returns true if given node is medium
* \brief Return the shape set by IsQuadraticSubMesh() or SetSubShape()
*/
const TopoDS_Shape& GetSubShape() const { return myShape; }
+ /*!
+ * \brief Copy shape information from another helper to improve performance
+ * since SetSubShape() can be time consuming if there are many edges
+ */
+ void CopySubShapeInfo(const SMESH_MesherHelper& other);
+
/*!
* \brief Convert a shape to its index in the SMESHDS_Mesh
/*!
* \brief Check if the shape set through IsQuadraticSubMesh() or SetSubShape()
* has a degenerated edges
- * \retval bool - true if it has
+ * \retval bool - true if there are degenerated edges
*/
bool HasDegeneratedEdges() const { return !myDegenShapeIds.empty(); }
+ /*!
+ * \brief Return a number of degenerated edges in the shape set through
+ * IsQuadraticSubMesh() or SetSubShape()
+ * \retval size_t - nb edges
+ */
+ size_t NbDegeneratedEdges() const { return myDegenShapeIds.size(); }
/*!
* \brief Check if shape is a seam edge or it's vertex
* \retval bool - true if it has
*/
bool HasRealSeam() const { return HasSeam() && ( *mySeamShapeIds.begin() < 0 ); }
+ /*!
+ * \brief Return a number of real seam edges in the shape set through
+ * IsQuadraticSubMesh() or SetSubShape(). A real seam edge encounters twice in a wire
+ * \retval size_t - nb of real seams
+ */
+ size_t NbRealSeam() const;
/*!
* \brief Return index of periodic parametric direction of a closed face
* \retval int - 1 for U, 2 for V direction
* \brief Return an alternative parameter for a node on seam
*/
double GetOtherParam(const double param) const;
+ /*!
+ * \brief Check if UV is on seam. Return 0 if not, 1 for U seam, 2 for V seam
+ */
+ int IsOnSeam(const gp_XY& uv) const;
/*!
* \brief Return existing or create new medium nodes between given ones
static void WriteShape(const TopoDS_Shape& s);
+
protected:
/*!
double getFaceMaxTol( const TopoDS_Shape& face ) const;
+
private:
// forbidden copy constructor