#include "SMDS_MeshElement.hxx"
#include "SMESH_Controls.hxx"
#include "SMESH_Mesh.hxx"
-#include "SMESH_SequenceOfElemPtr.hxx"
-#include "SMESH_SequenceOfNode.hxx"
+#include "SMESH_TypeDefs.hxx"
#include <utilities.h>
class SMESH_MesherHelper;
-typedef std::map<const SMDS_MeshElement*,
- std::list<const SMDS_MeshElement*> > TElemOfElemListMap;
-typedef std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> TNodeNodeMap;
-
-//!< Set of elements sorted by ID, to be used to assure predictability of edition
-typedef std::set< const SMDS_MeshElement*, TIDCompare > TIDSortedElemSet;
-typedef std::set< const SMDS_MeshNode*, TIDCompare > TIDSortedNodeSet;
-
-typedef pair< const SMDS_MeshNode*, const SMDS_MeshNode* > NLink;
-
-
//=======================================================================
/*!
* \brief Searcher for the node closest to point
std::vector< const SMDS_MeshElement* >& foundElems)=0;
};
-//=======================================================================
-/*!
- * \brief A sorted pair of nodes
- */
-//=======================================================================
-
-struct SMESH_TLink: public NLink
-{
- SMESH_TLink(const SMDS_MeshNode* n1, const SMDS_MeshNode* n2 ):NLink( n1, n2 )
- { if ( n1->GetID() < n2->GetID() ) std::swap( first, second ); }
- SMESH_TLink(const NLink& link ):NLink( link )
- { if ( first->GetID() < second->GetID() ) std::swap( first, second ); }
- const SMDS_MeshNode* node1() const { return first; }
- const SMDS_MeshNode* node2() const { return second; }
-};
-
-//=======================================================================
-/*!
- * \brief SMESH_TLink knowing its orientation
- */
-//=======================================================================
-
-struct SMESH_OrientedLink: public SMESH_TLink
-{
- bool _reversed;
- SMESH_OrientedLink(const SMDS_MeshNode* n1, const SMDS_MeshNode* n2 )
- : SMESH_TLink( n1, n2 ), _reversed( n1 != node1() ) {}
-};
-
// ============================================================
/*!
* \brief Editor of a mesh
class SMESH_EXPORT SMESH_MeshEditor
{
-public:
- //------------------------------------------
- /*!
- * \brief SMDS_MeshNode -> gp_XYZ convertor
- */
- //------------------------------------------
- struct TNodeXYZ : public gp_XYZ
- {
- const SMDS_MeshNode* _node;
- TNodeXYZ( const SMDS_MeshElement* e):gp_XYZ(0,0,0),_node(0) {
- if (e) {
- ASSERT( e->GetType() == SMDSAbs_Node );
- _node = static_cast<const SMDS_MeshNode*>(e);
- SetCoord( _node->X(), _node->Y(), _node->Z() );
- }
- }
- double Distance(const SMDS_MeshNode* n) const { return (TNodeXYZ( n )-*this).Modulus(); }
- double SquareDistance(const SMDS_MeshNode* n) const { return (TNodeXYZ( n )-*this).SquareModulus(); }
- bool operator==(const TNodeXYZ& other) const { return _node == other._node; }
- };
-
public:
SMESH_MeshEditor( SMESH_Mesh* theMesh );
SMDS_MeshElement* AddElement(const std::vector<const SMDS_MeshNode*> & nodes,
const SMDSAbs_ElementType type,
const bool isPoly,
- const int ID = 0);
+ const int ID = -1);
/*!
* \brief Add element
*/
SMDS_MeshElement* AddElement(const std::vector<int> & nodeIDs,
const SMDSAbs_ElementType type,
const bool isPoly,
- const int ID = 0);
+ const int ID = -1);
int Remove (const std::list< int >& theElemIDs, const bool isNodes);
// Remove a node or an element.
* \brief Return SMESH_ElementSearcher. The caller is responsible for deleteing it
*/
SMESH_ElementSearcher* GetElementSearcher();
+ SMESH_ElementSearcher* GetElementSearcher( SMDS_ElemIteratorPtr elemIt );
/*!
* \brief Return true if the point is IN or ON of the element
*/
const TIDSortedElemSet& theNodesNot,
const TopoDS_Shape& theShape );
+ bool DoubleNodesOnGroupBoundaries( const std::vector<TIDSortedElemSet>& theElems,
+ bool createJointElems);
+
+ /*!
+ * \brief Generated skin mesh (containing 2D cells) from 3D mesh
+ * The created 2D mesh elements based on nodes of free faces of boundary volumes
+ * \return TRUE if operation has been completed successfully, FALSE otherwise
+ */
bool Make2DMeshFrom3D();
enum Bnd_Dimension { BND_2DFROM3D, BND_1DFROM3D, BND_1DFROM2D };
- void MakeBoundaryMesh(const TIDSortedElemSet& elements,
- Bnd_Dimension dimension,
- SMESH_Group* group = 0,
- SMESH_Mesh* targetMesh = 0,
- bool toCopyElements = false,
- bool toCopyExistingBondary = false);
+ int MakeBoundaryMesh(const TIDSortedElemSet& elements,
+ Bnd_Dimension dimension,
+ SMESH_Group* group = 0,
+ SMESH_Mesh* targetMesh = 0,
+ bool toCopyElements = false,
+ bool toCopyExistingBondary = false,
+ bool toAddExistingBondary = false,
+ bool aroundElements = false);
-private:
+
+ private:
/*!
* \brief Convert elements contained in a submesh to quadratic