+ std::list<const SMDS_MeshNode*>& theNodesToInsert,
+ const bool toCreatePoly = false);
+ // insert theNodesToInsert into theFace between theBetweenNode1 and theBetweenNode2.
+ // If toCreatePoly is true, replace theFace by polygon, else split theFace.
+
+ void UpdateVolumes (const SMDS_MeshNode* theBetweenNode1,
+ const SMDS_MeshNode* theBetweenNode2,
+ std::list<const SMDS_MeshNode*>& theNodesToInsert);
+ // insert theNodesToInsert into all volumes, containing link
+ // theBetweenNode1 - theBetweenNode2, between theBetweenNode1 and theBetweenNode2.
+
+ void ConvertToQuadratic(const bool theForce3d);
+ //converts all mesh to quadratic one, deletes old elements, replacing
+ //them with quadratic ones with the same id.
+
+ bool ConvertFromQuadratic();
+ //converts all mesh from quadratic to ordinary ones, deletes old quadratic elements, replacing
+ //them with ordinary mesh elements with the same id.
+
+
+// static int SortQuadNodes (const SMDS_Mesh * theMesh,
+// int theNodeIds[] );
+// // Set 4 nodes of a quadrangle face in a good order.
+// // Swap 1<->2 or 2<->3 nodes and correspondingly return
+// // 1 or 2 else 0.
+//
+// static bool SortHexaNodes (const SMDS_Mesh * theMesh,
+// int theNodeIds[] );
+// // Set 8 nodes of a hexahedron in a good order.
+// // Return success status
+
+ static void AddToSameGroups (const SMDS_MeshElement* elemToAdd,
+ const SMDS_MeshElement* elemInGroups,
+ SMESHDS_Mesh * aMesh);
+ // Add elemToAdd to the groups the elemInGroups belongs to
+
+ static void RemoveElemFromGroups (const SMDS_MeshElement* removeelem,
+ SMESHDS_Mesh * aMesh);
+ // remove elemToAdd from the groups
+
+ /*!
+ * \brief Return nodes linked to the given one in elements of the type
+ */
+ static void GetLinkedNodes( const SMDS_MeshNode* node,
+ TIDSortedElemSet & linkedNodes,
+ SMDSAbs_ElementType type = SMDSAbs_All );
+
+ static const SMDS_MeshElement*
+ FindFaceInSet(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2,
+ const TIDSortedElemSet& elemSet,
+ const TIDSortedElemSet& avoidSet);
+ // Return a face having linked nodes n1 and n2 and which is
+ // - not in avoidSet,
+ // - in elemSet provided that !elemSet.empty()
+
+ /*!
+ * \brief Find corresponding nodes in two sets of faces
+ * \param theSide1 - first face set
+ * \param theSide2 - second first face
+ * \param theFirstNode1 - a boundary node of set 1
+ * \param theFirstNode2 - a node of set 2 corresponding to theFirstNode1
+ * \param theSecondNode1 - a boundary node of set 1 linked with theFirstNode1
+ * \param theSecondNode2 - a node of set 2 corresponding to theSecondNode1
+ * \param nReplaceMap - output map of corresponding nodes
+ * \retval Sew_Error - is a success or not
+ */
+ static Sew_Error FindMatchingNodes(set<const SMDS_MeshElement*>& theSide1,
+ set<const SMDS_MeshElement*>& theSide2,
+ const SMDS_MeshNode* theFirstNode1,
+ const SMDS_MeshNode* theFirstNode2,
+ const SMDS_MeshNode* theSecondNode1,
+ const SMDS_MeshNode* theSecondNode2,
+ TNodeNodeMap & nReplaceMap);
+
+ /*!
+ * \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);