-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "SMESH_Utils.hxx"
+const double theEnlargeFactor = 1. + 1e-10;
+
//================================================================================
// Data limiting the tree height
struct SMESH_TreeLimit {
// Allocate a bndbox according to childIndex. childIndex is zero based
virtual box_type* newChildBox(int childIndex) const = 0;
+ // Change size of a box by a factor; each dimension changes independently of others
+ virtual void enlargeByFactor( box_type* box, double factor ) const = 0;
+
// Fill in data of the children
virtual void buildChildrenData() = 0;
// Tree limit
const SMESH_TreeLimit* myLimit;
-private:
- // Build the children recursively
- void buildChildren();
+ // Bounding box of a tree
+ box_type* myBox;
// Level of the Tree
int myLevel;
- box_type* myBox;
+ // Build the children recursively
+ void buildChildren();
};
//===========================================================================
myFather(0),
myIsLeaf( false ),
myLimit( limit ),
- myLevel(0),
- myBox(0)
+ myBox(0),
+ myLevel(0)
{
//if ( !myLimit ) myLimit = new SMESH_TreeLimit();
}
{
if ( !myLimit ) myLimit = new SMESH_TreeLimit();
myBox = buildRootBox();
+ enlargeByFactor( myBox, theEnlargeFactor );
if ( myLimit->myMinBoxSize > 0. && maxSize() <= myLimit->myMinBoxSize )
myIsLeaf = true;
else
myChildren = new SMESH_Tree*[NB_CHILDREN];
// get the whole model size
- double rootSize = 0;
- {
- SMESH_Tree* root = this;
- while ( root->myLevel > 0 )
- root = root->myFather;
- rootSize = root->maxSize();
- }
+ // double rootSize = 0;
+ // {
+ // SMESH_Tree* root = this;
+ // while ( root->myLevel > 0 )
+ // root = root->myFather;
+ // rootSize = root->maxSize();
+ // }
for (int i = 0; i < NB_CHILDREN; i++)
{
// The child is of the same type than its father (For instance, a SMESH_OctreeNode)
myChildren[i]->myLimit = myLimit;
myChildren[i]->myLevel = myLevel + 1;
myChildren[i]->myBox = newChildBox( i );
- myChildren[i]->myBox->Enlarge( rootSize * 1e-10 );
+ enlargeByFactor( myChildren[i]->myBox, theEnlargeFactor );
if ( myLimit->myMinBoxSize > 0. && myChildren[i]->maxSize() <= myLimit->myMinBoxSize )
myChildren[i]->myIsLeaf = true;
}
if ( isLeaf() )
return 1;
- int heigth = 0;
+ int height = 0;
for (int i = 0; i<NB_CHILDREN; i++)
{
int h = myChildren[i]->getHeight( false );
- if ( h > heigth )
- heigth = h;
+ if ( h > height )
+ height = h;
}
- return heigth + 1;
+ return height + 1;
}
#endif