From ed1963a82ecaa650d3ad36c7ce49208238d23559 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 28 Feb 2007 09:41:32 +0000 Subject: [PATCH] PAL13460 (force the mesh to go through a point) + SMESH_OctreeNodeIteratorPtr GetChildrenIterator(); + SMDS_NodeIteratorPtr GetNodeIterator(); + int NbNodes() const { return myNbNodes; } --- src/SMESH/SMESH_OctreeNode.cxx | 38 ++++++++++++++++++++++++++++------ src/SMESH/SMESH_OctreeNode.hxx | 28 ++++++++++++++++++++----- 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/SMESH/SMESH_OctreeNode.cxx b/src/SMESH/SMESH_OctreeNode.cxx index 52f1e3071..16fb784fb 100644 --- a/src/SMESH/SMESH_OctreeNode.cxx +++ b/src/SMESH/SMESH_OctreeNode.cxx @@ -28,8 +28,10 @@ // Module : SMESH #include "SMESH_OctreeNode.hxx" + +#include "SMDS_MeshNode.hxx" +#include "SMDS_SetIterator.hxx" #include -#include using namespace std; @@ -42,7 +44,7 @@ using namespace std; * \param minBoxSize - Minimal size of the Octree Box */ //================================================================ -SMESH_OctreeNode::SMESH_OctreeNode (set theNodes, const int maxLevel, +SMESH_OctreeNode::SMESH_OctreeNode (const set & theNodes, const int maxLevel, const int maxNbNodes , const double minBoxSize ) :SMESH_Octree(maxLevel,minBoxSize), myMaxNbNodes(maxNbNodes), @@ -119,11 +121,10 @@ const bool SMESH_OctreeNode::isInside(const SMDS_MeshNode * Node, const double p bool Out = 1 ; if (precision<=0.) return !(myBox->IsOut(gp_XYZ(X,Y,Z))); - Bnd_B3d * BoxWithPrecision = new Bnd_B3d(); + Bnd_B3d BoxWithPrecision; getBox(BoxWithPrecision); - BoxWithPrecision->Enlarge(precision); - Out=BoxWithPrecision->IsOut(gp_XYZ(X,Y,Z)); - delete BoxWithPrecision; + BoxWithPrecision.Enlarge(precision); + Out=BoxWithPrecision.IsOut(gp_XYZ(X,Y,Z)); return !(Out); } @@ -325,3 +326,28 @@ void SMESH_OctreeNode::FindCoincidentNodes( const SMDS_MeshNode * Node, } } +//================================================================================ +/*! + * \brief Return iterator over children + */ +//================================================================================ + +SMESH_OctreeNodeIteratorPtr SMESH_OctreeNode::GetChildrenIterator() +{ + return SMESH_OctreeNodeIteratorPtr + ( new SMDS_SetIterator< SMESH_OctreeNode*, SMESH_Octree** > + ( myChildren, ( isLeaf() ? myChildren : &myChildren[ 8 ] ))); +} + +//================================================================================ +/*! + * \brief Return nodes iterator + */ +//================================================================================ + +SMDS_NodeIteratorPtr SMESH_OctreeNode::GetNodeIterator() +{ + return SMDS_NodeIteratorPtr + ( new SMDS_SetIterator< SMDS_pNode, set< SMDS_pNode >::const_iterator > + ( myNodes.begin(), myNodes.end() )); +} diff --git a/src/SMESH/SMESH_OctreeNode.hxx b/src/SMESH/SMESH_OctreeNode.hxx index ce8bfde26..4feb86842 100644 --- a/src/SMESH/SMESH_OctreeNode.hxx +++ b/src/SMESH/SMESH_OctreeNode.hxx @@ -32,18 +32,24 @@ #include "SMESH_Octree.hxx" +#include +#include + +#include "SMDS_ElemIterator.hxx" + //forward declaration class SMDS_MeshNode; +class SMESH_OctreeNode; -#include -#include +typedef SMDS_Iterator SMESH_OctreeNodeIterator; +typedef boost::shared_ptr SMESH_OctreeNodeIteratorPtr; class SMESH_OctreeNode : public SMESH_Octree{ public: // Constructor - SMESH_OctreeNode (set theNodes, const int maxLevel = -1, + SMESH_OctreeNode (const set& theNodes, const int maxLevel = -1, const int maxNbNodes = 5 , const double minBoxSize = 0.); //============================= @@ -75,8 +81,20 @@ public: list< list< const SMDS_MeshNode*> >* theGroupsOfNodes, const double theTolerance = 0.00001, const int maxLevel = -1, const int maxNbNodes = 5); - - protected: + /*! + * \brief Return iterator over children + */ + SMESH_OctreeNodeIteratorPtr GetChildrenIterator(); + /*! + * \brief Return nodes iterator + */ + SMDS_NodeIteratorPtr GetNodeIterator(); + /*! + * \brief Return nb nodes in a tree + */ + int NbNodes() const { return myNbNodes; } + +protected: //============================= /*! -- 2.39.2