//=======================================================================
/*!
- * \brief It helps meshers to add elements
+ * \brief It helps meshers to add elements and provides other utilities
*
- * It allow meshers not to care about creation of medium nodes
+ * - It allows meshers not to care about creation of medium nodes
* when filling a quadratic mesh. Helper does it itself.
- * It defines degree of elements to create when IsQuadraticSubMesh()
+ * It defines order of elements to create when IsQuadraticSubMesh()
* is called.
+ * - It provides information on a shape it is initialized with:
+ * periodicity, presence of singularities etc.
+ * - ...
*/
//=======================================================================
// ---------- PUBLIC UTILITIES ----------
/*!
- * \brief Returns true if given node is medium
- * \param n - node to check
- * \param typeToCheck - type of elements containing the node to ask about node status
+ * \brief Returns true if all elements of a sub-mesh are of same shape
+ * \param smDS - sub-mesh to check elements of
+ * \param shape - expected shape of elements
+ * \param nullSubMeshRes - result value for the case of smDS == NULL
* \retval bool - check result
*/
- static bool IsMedium(const SMDS_MeshNode* node,
- const SMDSAbs_ElementType typeToCheck = SMDSAbs_All);
+ static bool IsSameElemGeometry(const SMESHDS_SubMesh* smDS,
+ SMDSAbs_GeometryType shape,
+ const bool nullSubMeshRes = true);
/*!
* \brief Load nodes bound to face into a map of node columns
const TopoDS_Edge& theBaseEdge,
SMESHDS_Mesh* theMesh,
SMESH_ProxyMesh* theProxyMesh=0);
+ /*!
+ * \brief Return true if 2D mesh on FACE is structured
+ */
+ static bool IsStructured( SMESH_subMesh* faceSM );
+
+ /*!
+ * \brief Returns true if given node is medium
+ * \param n - node to check
+ * \param typeToCheck - type of elements containing the node to ask about node status
+ * \retval bool - check result
+ */
+ static bool IsMedium(const SMDS_MeshNode* node,
+ const SMDSAbs_ElementType typeToCheck = SMDSAbs_All);
/*!
* \brief Return support shape of a node
* \param node - the node
return ind;
}
+ /*!
+ * \brief Count nb of sub-shapes
+ * \param shape - the shape
+ * \param type - the type of sub-shapes to count
+ * \param ignoreSame - if true, use map not to count same shapes, esle use explorer
+ * \retval int - the calculated number
+ */
+ static int Count(const TopoDS_Shape& shape,
+ const TopAbs_ShapeEnum type,
+ const bool ignoreSame);
+
/*!
* \brief Return number of unique ancestors of the shape
*/
const SMESH_Mesh& mesh,
TopAbs_ShapeEnum ancestorType);
/*!
- * \brief Find a common ancestors of two shapes of the given type
+ * \brief Find a common ancestor, of the given type, of two shapes
*/
static TopoDS_Shape GetCommonAncestor(const TopoDS_Shape& shape1,
const TopoDS_Shape& shape2,
const SMESH_Mesh& mesh,
TopAbs_ShapeEnum ancestorType);
-
/*!
* \brief Return orientation of sub-shape in the main shape
*/
static TopoDS_Vertex IthVertex( const bool is2nd, TopoDS_Edge anEdge, const bool CumOri=true );
+ static TopAbs_ShapeEnum GetGroupType(const TopoDS_Shape& group,
+ const bool avoidCompound=false);
+
public:
// ---------- PUBLIC INSTANCE METHODS ----------
*/
bool GetIsQuadratic() const { return myCreateQuadratic; }
+ /*
+ * \brief Find out elements orientation on a geometrical face
+ */
+ bool IsReversedSubMesh (const TopoDS_Face& theFace);
+
/*!
* \brief Move medium nodes of faces and volumes to fix distorted elements
+ * \param error - container of fixed distorted elements
* \param volumeOnly - fix nodes on geom faces or not if the shape is solid
*/
- void FixQuadraticElements(bool volumeOnly=true);
+ void FixQuadraticElements(SMESH_ComputeErrorPtr& error, bool volumeOnly=true);
/*!
* \brief To set created elements on the shape set by IsQuadraticSubMesh()
* or the next methods. By defaul elements are set on the shape if
* a mesh has no shape to be meshed
*/
- void SetElementsOnShape(bool toSet) { mySetElemOnShape = toSet; }
+ bool SetElementsOnShape(bool toSet)
+ { bool res = mySetElemOnShape; mySetElemOnShape = toSet; return res; }
/*!
* \brief Set shape to make elements on without calling IsQuadraticSubMesh()
/*!
* \brief Return node UV on face
* \param inFaceNode - a node of element being created located inside a face
+ * \param check - if provided, returns result of UV check that it enforces
*/
gp_XY GetNodeUV(const TopoDS_Face& F,
const SMDS_MeshNode* n,