//
// SMESH SMESH_OctreeNode : Octree with Nodes set
-// inherites global class SMESH_Octree
+// inherites class SMESH_Octree
// File : SMESH_OctreeNode.cxx
// Created : Tue Jan 16 16:00:00 2007
// Author : Nicolas Geimer & Aurelien Motteux (OCC)
* \param minBoxSize - Minimal size of the Octree Box
*/
//================================================================
+
SMESH_OctreeNode::SMESH_OctreeNode (const TIDSortedNodeSet & theNodes, const int maxLevel,
const int maxNbNodes , const double minBoxSize )
- :SMESH_Octree( new SMESH_Octree::Limit( maxLevel,minBoxSize)),
- myMaxNbNodes(maxNbNodes),
- myNodes(theNodes)
+ :SMESH_Octree( new Limit( maxLevel,minBoxSize,maxNbNodes)),
+ myNodes(theNodes)
{
compute();
}
*/
//================================================================================
-SMESH_OctreeNode::SMESH_OctreeNode (int maxNbNodes):
- SMESH_Octree(), myMaxNbNodes(maxNbNodes)
+SMESH_OctreeNode::SMESH_OctreeNode ():SMESH_Octree()
+{
+}
+
+//================================================================================
+/*!
+ * \brief Return max number of nodes in a tree leaf
+ */
+//================================================================================
+
+int SMESH_OctreeNode::getMaxNbNodes() const
{
+ return ((Limit*)myLimit)->myMaxNbNodes;
}
//==================================================================================
*/
//==================================================================================
-SMESH_Octree* SMESH_OctreeNode::allocateOctreeChild() const
+SMESH_Octree* SMESH_OctreeNode::newChild() const
{
- return new SMESH_OctreeNode(myMaxNbNodes);
+ return new SMESH_OctreeNode();
}
//======================================
gp_XYZ p1( n1->X(), n1->Y(), n1->Z() );
box->Add(p1);
}
- if ( myNodes.size() <= myMaxNbNodes )
+ if ( myNodes.size() <= getMaxNbNodes() )
myIsLeaf = true;
return box;
const bool SMESH_OctreeNode::isInside (const gp_XYZ& p, const double precision)
{
if (precision <= 0.)
- return !(getBox().IsOut(p));
- Bnd_B3d BoxWithPrecision = getBox();
+ return !(getBox()->IsOut(p));
+ Bnd_B3d BoxWithPrecision = *getBox();
BoxWithPrecision.Enlarge(precision);
return ! BoxWithPrecision.IsOut(p);
}
//================================================
void SMESH_OctreeNode::buildChildrenData()
{
- gp_XYZ min = getBox().CornerMin();
- gp_XYZ max = getBox().CornerMax();
+ gp_XYZ min = getBox()->CornerMin();
+ gp_XYZ max = getBox()->CornerMax();
gp_XYZ mid = (min + max)/2.;
TIDSortedNodeSet::iterator it = myNodes.begin();
for (int i = 0; i < 8; i++)
{
SMESH_OctreeNode* myChild = dynamic_cast<SMESH_OctreeNode*> (myChildren[i]);
- if ( myChild->myNodes.size() <= myMaxNbNodes )
+ if ( myChild->myNodes.size() <= getMaxNbNodes() )
myChild->myIsLeaf = true;
}
}
if (!isLeaf())
{
// first check a child containing node
- gp_XYZ mid = (getBox().CornerMin() + getBox().CornerMax()) / 2.;
+ gp_XYZ mid = (getBox()->CornerMin() + getBox()->CornerMax()) / 2.;
int nodeChild = getChildIndex( node.X(), node.Y(), node.Z(), mid );
if ( ((SMESH_OctreeNode*) myChildren[nodeChild])->NodesAround(node, dist2Nodes, precision))
return true;
}
else if ( myChildren )
{
- gp_XYZ mid = (getBox().CornerMin() + getBox().CornerMax()) / 2.;
+ gp_XYZ mid = (getBox()->CornerMin() + getBox()->CornerMax()) / 2.;
int nodeChild = getChildIndex( node->X(), node->Y(), node->Z(), mid );
int pointChild = getChildIndex( toPnt.X(), toPnt.Y(), toPnt.Z(), mid );
if ( nodeChild != pointChild )
SMESH_OctreeNodeIteratorPtr SMESH_OctreeNode::GetChildrenIterator()
{
return SMESH_OctreeNodeIteratorPtr
- ( new SMDS_SetIterator< SMESH_OctreeNode*, SMESH_Octree** >
+ ( new SMDS_SetIterator< SMESH_OctreeNode*, TBaseTree** >
( myChildren, (( isLeaf() || !myChildren ) ? myChildren : &myChildren[ 8 ] )));
}