Salome HOME
PAL13460 (force the mesh to go through a point)
authoreap <eap@opencascade.com>
Wed, 28 Feb 2007 09:41:32 +0000 (09:41 +0000)
committereap <eap@opencascade.com>
Wed, 28 Feb 2007 09:41:32 +0000 (09:41 +0000)
+  SMESH_OctreeNodeIteratorPtr GetChildrenIterator();
+  SMDS_NodeIteratorPtr        GetNodeIterator();
+  int                         NbNodes() const { return myNbNodes; }

src/SMESH/SMESH_OctreeNode.cxx
src/SMESH/SMESH_OctreeNode.hxx

index 52f1e3071799bb048975583044fe08ad98c4b7b5..16fb784fb791811c74f6a599e4c2e2f9e38147c4 100644 (file)
 // 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;
 
@@ -42,7 +44,7 @@ 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),
@@ -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() ));
+}
index ce8bfde26566f2fc490d26dd47250144b465bbd1..4feb86842c154c8757068b6282ce76d83a36b4db 100644 (file)
 
 #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.);
 
 //=============================
@@ -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:
 
 //=============================
 /*!