// Module : SMESH
#include "SMESH_OctreeNode.hxx"
+
+#include "SMDS_MeshNode.hxx"
+#include "SMDS_SetIterator.hxx"
#include <gp_Pnt.hxx>
-#include <SMDS_MeshNode.hxx>
using namespace std;
* \param minBoxSize - Minimal size of the Octree Box
*/
//================================================================
-SMESH_OctreeNode::SMESH_OctreeNode (set<const SMDS_MeshNode*> theNodes, const int maxLevel,
+SMESH_OctreeNode::SMESH_OctreeNode (const set<const SMDS_MeshNode*> & theNodes, const int maxLevel,
const int maxNbNodes , const double minBoxSize )
:SMESH_Octree(maxLevel,minBoxSize),
myMaxNbNodes(maxNbNodes),
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);
}
}
}
+//================================================================================
+/*!
+ * \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() ));
+}
#include "SMESH_Octree.hxx"
+#include <list>
+#include <set>
+
+#include "SMDS_ElemIterator.hxx"
+
//forward declaration
class SMDS_MeshNode;
+class SMESH_OctreeNode;
-#include <list>
-#include <set>
+typedef SMDS_Iterator<SMESH_OctreeNode*> SMESH_OctreeNodeIterator;
+typedef boost::shared_ptr<SMESH_OctreeNodeIterator> SMESH_OctreeNodeIteratorPtr;
class SMESH_OctreeNode : public SMESH_Octree{
public:
// Constructor
- SMESH_OctreeNode (set<const SMDS_MeshNode*> theNodes, const int maxLevel = -1,
+ SMESH_OctreeNode (const set<const SMDS_MeshNode*>& theNodes, const int maxLevel = -1,
const int maxNbNodes = 5 , const double minBoxSize = 0.);
//=============================
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:
//=============================
/*!