From 466cf8703aa4a22537f5a949314799336b933cab Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 22 Jan 2007 15:14:47 +0000 Subject: [PATCH] This commit was generated by cvs2git to create branch 'BR_Dev_For_4_0'. Sprout from V3_2_0_maintainance 2006-09-08 11:18:59 UTC jfa 'PAL13409: EDF282 SMESH: Tetrahedron is added if we specify Mefisto.' Cherrypick from V3_2_0_maintainance 2007-01-22 15:14:46 UTC admin 'This commit was generated by cvs2git to create branch 'V3_2_0_maintainance'.': src/SMESH/SMESH_Octree.cxx src/SMESH/SMESH_Octree.hxx src/SMESH/SMESH_OctreeNode.cxx src/SMESH/SMESH_OctreeNode.hxx Cherrypick from V3_2_0_maintainance 2006-06-08 14:05:10 UTC admin 'This commit was generated by cvs2git to create branch 'V3_2_0_maintainance'.': doc/salome/gui/SMESH/pics/a-extusionalongapath2.png doc/salome/tui/SMESH/sources/bg_salome.gif --- .../gui/SMESH/pics/a-extusionalongapath2.png | Bin 0 -> 20909 bytes doc/salome/tui/SMESH/sources/bg_salome.gif | Bin 0 -> 17294 bytes src/SMESH/SMESH_Octree.cxx | 181 ++++++++++ src/SMESH/SMESH_Octree.hxx | 97 ++++++ src/SMESH/SMESH_OctreeNode.cxx | 327 ++++++++++++++++++ src/SMESH/SMESH_OctreeNode.hxx | 112 ++++++ 6 files changed, 717 insertions(+) create mode 100755 doc/salome/gui/SMESH/pics/a-extusionalongapath2.png create mode 100755 doc/salome/tui/SMESH/sources/bg_salome.gif create mode 100644 src/SMESH/SMESH_Octree.cxx create mode 100644 src/SMESH/SMESH_Octree.hxx create mode 100644 src/SMESH/SMESH_OctreeNode.cxx create mode 100644 src/SMESH/SMESH_OctreeNode.hxx diff --git a/doc/salome/gui/SMESH/pics/a-extusionalongapath2.png b/doc/salome/gui/SMESH/pics/a-extusionalongapath2.png new file mode 100755 index 0000000000000000000000000000000000000000..f120fc3c0fc4544d6ac2a10d8c02c6d58c212974 GIT binary patch literal 20909 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 literal 0 HcmV?d00001 diff --git a/doc/salome/tui/SMESH/sources/bg_salome.gif b/doc/salome/tui/SMESH/sources/bg_salome.gif new file mode 100755 index 0000000000000000000000000000000000000000..677b70468f798fe4fbc20fac3d706e61179ff12b GIT binary patch literal 17294 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 + gp_XYZ max = box->CornerMax(); + gp_XYZ Size = (max - min); + double returnVal = (Size.X()>Size.Y())?Size.X():Size.Y(); + return (returnVal>Size.Z())?returnVal:Size.Z(); +} + +//============================= +/*! + * \brief Compute the Octree + */ +//============================= +void SMESH_Octree::Compute() +{ + // As soon as the Octree is a Leaf, I stop building his children + if(!isLeaf()) + buildChildren(); +} + +//================================================================= +/*! + * \brief Build the 8 children boxes and call buildChildrenData() + */ +//================================================================= +void SMESH_Octree::buildChildren() +{ + myChildren = new (SMESH_Octree*)[8]; + + gp_XYZ min = myBox->CornerMin(); + gp_XYZ max = myBox->CornerMax(); + gp_XYZ HSize = (max - min)/2.; + gp_XYZ mid = min + HSize; + gp_XYZ childHsize = HSize/2.; + + Standard_Real XminChild, YminChild, ZminChild; + Bnd_B3d* box; + gp_XYZ minChild; + for (int i =0; i<8; i++) + { + // We build the eight boxes, we need 2 points to do that. + // Min, and Mid + // In binary, we can write i from 0 to 7 + // For instance : + // 5 is 101, it corresponds here in coordinates to ZYX + // If coordinate is 0 in Y-> box from Ymin to Ymid + // If coordinate is 1 in Y-> box from Ymid to Ymax + // Same scheme for X and Z + // I need the minChild to build the Bnd_B3d box. + + XminChild= (i%2==0)?min.X():mid.X(); + YminChild= ((i%4)/2==0)?min.Y():mid.Y(); + ZminChild= (i<4)?min.Z():mid.Z(); + minChild.SetCoord(XminChild, YminChild, ZminChild); + + box = new Bnd_B3d(minChild+childHsize,childHsize); + // The child is of the same type than its father (For instance, a SMESH_OctreeNode) + // We allocate the memory we need fot the child + myChildren[i] = allocateOctreeChild(); + // and we assign to him its box. + myChildren[i]->setBox(box); + delete box; + } + + // After building the 8 boxes, we put the data into the children.. + buildChildrenData(); + + //After we pass to the next level of the Octree + for (int i =0; i<8; i++) + myChildren[i]->Compute(); +} diff --git a/src/SMESH/SMESH_Octree.hxx b/src/SMESH/SMESH_Octree.hxx new file mode 100644 index 000000000..d9615b8dd --- /dev/null +++ b/src/SMESH/SMESH_Octree.hxx @@ -0,0 +1,97 @@ +// SMESH SMESH_Octree : global Octree implementation +// +// Copyright (C) 2003 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : SMESH_Octree.hxx +// Created : Tue Jan 16 16:00:00 2007 +// Author : Nicolas Geimer & Aurélien Motteux (OCC) +// Module : SMESH + +#ifndef _SMESH_OCTREE_HXX_ +#define _SMESH_OCTREE_HXX_ + +#include + +class SMESH_Octree { + +public: + // Constructor + SMESH_Octree (const int maxLevel = -1, const double minBoxSize = 0.); + + // Destructor + virtual ~SMESH_Octree (); + + // Tell if Octree is a leaf or not (has to be implemented in inherited classes) + virtual const bool isLeaf() = 0; + + // Compute the Octree + void Compute(); + + // Set the maximal level of the Octree + void setMaxLevel(const int maxLevel); + + // Set the minimal size of the Box + void setMinBoxSize(const double minBoxSize){myMinBoxSize = minBoxSize;}; + + // Set the bounding box of the Octree + void setBox(const Bnd_B3d* box); + + // Set box to the 3d Bounding Box of the Octree + void getBox(Bnd_B3d* box); + + // Compute the bigger dimension of the box + static double maxSize(const Bnd_B3d* box); + +protected: + // Constructor for children (has to be implemented in inherited classes) + virtual SMESH_Octree* allocateOctreeChild() = 0; + + // Build the 8 children boxes + void buildChildren(); + + // Build the data in the 8 children (has to be implemented in inherited classes) + virtual void buildChildrenData() = 0; + + // members + + // Box of the Octree + Bnd_B3d* myBox; + + // Array of 8 Octree children + SMESH_Octree** myChildren; + + // Point the father, set to NULL for the level 0 + SMESH_Octree* myFather; + + // Level of the Octree + int myLevel; + + // MaxLevel of the Octree + int myMaxLevel; + + // Minimal size of the Box + double myMinBoxSize; + + // Tell us if the Octree is a leaf or not (-1 if not initialized) + int myIsLeaf; +}; +#endif diff --git a/src/SMESH/SMESH_OctreeNode.cxx b/src/SMESH/SMESH_OctreeNode.cxx new file mode 100644 index 000000000..52f1e3071 --- /dev/null +++ b/src/SMESH/SMESH_OctreeNode.cxx @@ -0,0 +1,327 @@ +// SMESH SMESH_OctreeNode : Octree with Nodes set +// inherites global class SMESH_Octree +// +// Copyright (C) 2003 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : SMESH_OctreeNode.cxx +// Created : Tue Jan 16 16:00:00 2007 +// Author : Nicolas Geimer & Aurélien Motteux (OCC) +// Module : SMESH + +#include "SMESH_OctreeNode.hxx" +#include +#include + +using namespace std; + +//=============================================================== +/*! + * \brief Constructor : Build all the Octree using Compute() + * \param theNodes - Set of nodes, the Octree is built from this nodes + * \param maxLevel - Maximum level for the leaves + * \param maxNbNodes - Maximum number of nodes, a leaf can contain + * \param minBoxSize - Minimal size of the Octree Box + */ +//================================================================ +SMESH_OctreeNode::SMESH_OctreeNode (set theNodes, const int maxLevel, + const int maxNbNodes , const double minBoxSize ) + :SMESH_Octree(maxLevel,minBoxSize), + myMaxNbNodes(maxNbNodes), + myNodes(theNodes) +{ + // We need to compute the first bounding box via a special method + computeBoxForFather(); + myNbNodes = myNodes.size(); + myIsLeaf = (myLevel == myMaxLevel)||(myNbNodes<=myMaxNbNodes)||(myMinBoxSize>=maxSize(myBox)); + // All the children (Boxes and Data) are computed in Compute() + Compute(); +} + +//================================================================================== +/*! + * \brief Construct an empty SMESH_OctreeNode used by SMESH_Octree::buildChildren() + */ +//================================================================================== +SMESH_Octree* SMESH_OctreeNode::allocateOctreeChild() +{ + SMESH_OctreeNode * theOctree = new SMESH_OctreeNode(); + theOctree->myFather = this; + theOctree->myLevel = myLevel + 1; + theOctree->myMaxLevel = myMaxLevel; + theOctree->myMaxNbNodes = myMaxNbNodes; + theOctree->myMinBoxSize = myMinBoxSize; + theOctree->myNbNodes = 0; + return theOctree; +} + + + +//====================================== +/*! + * \brief Compute the first bounding box + * + * We take the max/min coord of the nodes + */ +//====================================== +void SMESH_OctreeNode::computeBoxForFather() +{ + set::iterator it=myNodes.begin(); + for( ;it!=myNodes.end();it++){ + const SMDS_MeshNode* n1 = *it; + gp_XYZ p1( n1->X(), n1->Y(), n1->Z() ); + myBox->Add(p1); + } +} + +//==================================================================================== +/*! + * \brief Tell if Octree is a leaf or not (has to be implemented in inherited classes) + * \retval - True if the Octree is a leaf + */ +//==================================================================================== +const bool SMESH_OctreeNode::isLeaf() +{ + return myIsLeaf; +} + +//==================================================================================== +/*! + * \brief Tells us if Node is inside the current box with the precision "precision" + * \param Node - Node + * \param precision - The box is enlarged with this precision + * \retval bool - True if Node is in the box within precision + */ +//==================================================================================== +const bool SMESH_OctreeNode::isInside(const SMDS_MeshNode * Node, const double precision ) +{ + double X=Node->X(); + double Y=Node->Y(); + double Z=Node->Z(); + bool Out = 1 ; + if (precision<=0.) + return !(myBox->IsOut(gp_XYZ(X,Y,Z))); + Bnd_B3d * BoxWithPrecision = new Bnd_B3d(); + getBox(BoxWithPrecision); + BoxWithPrecision->Enlarge(precision); + Out=BoxWithPrecision->IsOut(gp_XYZ(X,Y,Z)); + delete BoxWithPrecision; + return !(Out); +} + + +//================================================ +/*! + * \brief Set the data of the children + * Shares the father's data with each of his child + */ +//================================================ +void SMESH_OctreeNode::buildChildrenData() +{ + gp_XYZ min = myBox->CornerMin(); + gp_XYZ max = myBox->CornerMax(); + gp_XYZ mid = (min + max)/2.; + + set::iterator it=myNodes.begin(); + int ChildBoxNum; + while( it!=myNodes.end()) + { + const SMDS_MeshNode* n1 = *it; + ChildBoxNum= (n1->X()>mid.X()) + (n1->Y()>mid.Y())*2 + (n1->Z()>mid.Z())*4; + SMESH_OctreeNode* myChild = dynamic_cast (myChildren[ChildBoxNum]); + myChild->myNodes.insert(myChild->myNodes.end(),n1); + myNodes.erase( it ); + it=myNodes.begin(); + } + for (int i = 0; i<8; i++) + { + SMESH_OctreeNode* myChild = dynamic_cast (myChildren[i]); + myChild->myNbNodes = (myChild->myNodes).size(); + myChild->myIsLeaf = (myChild->myLevel == myMaxLevel)||(myChild->myNbNodes<=myMaxNbNodes)||(myMinBoxSize>=maxSize(myChild->myBox)); + } +} + +//=================================================================== +/*! + * \brief Return in Result a list of Nodes potentials to be near Node + * \param Node - Node + * \param precision - precision used + * \param Result - list of Nodes potentials to be near Node + */ +//==================================================================== +void SMESH_OctreeNode::NodesAround( const SMDS_MeshNode * Node, + list* Result, const double precision) +{ + if (isInside(Node,precision)) + { + if (myIsLeaf) + { + Result->insert( Result->end(), myNodes.begin(), myNodes.end() ); + } + else + { + for(int i=0;i<8;i++) + { + SMESH_OctreeNode* myChild = dynamic_cast (myChildren[i]); + myChild->NodesAround( Node, Result, precision); + } + } + } +} + + + +//============================= +/*! + * \brief Return in theGroupsOfNodes a list of group of nodes close to each other within theTolerance + * Search for all the nodes in nodes + * Static Method : no need to create an SMESH_OctreeNode + * \param nodes - set of nodes we look at, modified during research + * \param theGroupsOfNodes - list of nodes closed to each other returned + * \param theTolerance - Precision used, default value is 0.00001 + * \param maxLevel - Maximum level for SMESH_OctreeNode constructed, default value is -1 (Infinite) + * \param maxNbNodes - maximum Nodes in a Leaf of the SMESH_OctreeNode constructed, default value is 5 + */ +//============================= +void SMESH_OctreeNode::FindCoincidentNodes ( set nodes, + list< list< const SMDS_MeshNode*> >* theGroupsOfNodes, + const double theTolerance, const int maxLevel, + const int maxNbNodes) +{ + SMESH_OctreeNode* theOctreeNode = new SMESH_OctreeNode(nodes, maxLevel, maxNbNodes, theTolerance); + theOctreeNode->FindCoincidentNodes (&nodes, theTolerance, theGroupsOfNodes); + delete theOctreeNode; +} + + +//============================= +/*! + * \brief Return in theGroupsOfNodes a list of group of nodes close to each other within theTolerance + * Search for all the nodes in nodes + * \param nodes - set of nodes we look at, modified during research + * \param theTolerance - Precision used + * \param theGroupsOfNodes - list of nodes closed to each other returned + */ +//============================= +void SMESH_OctreeNode::FindCoincidentNodes ( set* nodes, + const double theTolerance, + list< list< const SMDS_MeshNode*> >* theGroupsOfNodes) +{ + set::iterator it1 = nodes->begin(); + list::iterator it2; + + while (it1 != nodes->end()) + { + const SMDS_MeshNode * n1 = *it1; + + list ListofCoincidentNodes;// Initialize the lists via a declaration, it's enough + + list * groupPtr = 0; + + // Searching for Nodes around n1 and put them in ListofCoincidentNodes + FindCoincidentNodes(n1, nodes, &ListofCoincidentNodes, theTolerance); + + // We build a list {n1 + his neigbours} and add this list in theGroupsOfNodes + for (it2=ListofCoincidentNodes.begin();it2 != ListofCoincidentNodes.end(); it2++) + { + const SMDS_MeshNode* n2 = *it2; + if ( !groupPtr ) + { + theGroupsOfNodes->push_back( list() ); + groupPtr = & theGroupsOfNodes->back(); + groupPtr->push_back( n1 ); + } + if(groupPtr->front()>n2) + groupPtr->push_front( n2 ); + else + groupPtr->push_back( n2 ); + } + if(groupPtr != 0) + groupPtr->sort(); + + nodes->erase(it1); + it1=nodes->begin(); + } +} + +//====================================================================================== +/*! + * \brief Return a list of nodes closed to Node and remove it from SetOfNodes + * \param Node - We're searching the nodes next to him. + * \param SetOfNodes - set of nodes in which we erase the found nodes + * \param Result - list of nodes closed to Node + * \param precision - Precision used + */ +//====================================================================================== +void SMESH_OctreeNode::FindCoincidentNodes( const SMDS_MeshNode * Node, + set* SetOfNodes, + list* Result, + const double precision) +{ + bool isInsideBool = isInside(Node,precision); + + if (isInsideBool) + { + // I'm only looking in the leaves, since all the nodes are stored there. + if (myIsLeaf) + { + gp_Pnt p1( Node->X(), Node->Y(), Node->Z() ); + + set myNodesCopy = myNodes; + set::iterator it = myNodesCopy.begin(); + double tol2 = precision * precision; + bool squareBool; + + while (it != myNodesCopy.end()) + { + const SMDS_MeshNode* n2 = *it; + // We're only looking at nodes with a superior Id. + if(Node->GetID() < n2->GetID()) + { + gp_Pnt p2( n2->X(), n2->Y(), n2->Z() ); + // Distance optimized computation + squareBool = (p1.SquareDistance( p2 ) <= tol2); + + // If n2 inside the SquareDistance, we add it in Result and remove it from SetOfNodes and myNodes + if(squareBool) + { + Result->insert(Result->begin(), n2); + SetOfNodes->erase( n2 ); + myNodes.erase( n2 ); + } + } + myNodesCopy.erase( it ); + it = myNodesCopy.begin(); + } + + } + else + { + // If I'm not a leaf, I'm going to see my children ! + for(int i = 0; i < 8; i++) + { + SMESH_OctreeNode* myChild = dynamic_cast (myChildren[i]); + myChild->FindCoincidentNodes(Node, SetOfNodes, Result, precision); + } + } + } +} + diff --git a/src/SMESH/SMESH_OctreeNode.hxx b/src/SMESH/SMESH_OctreeNode.hxx new file mode 100644 index 000000000..ce8bfde26 --- /dev/null +++ b/src/SMESH/SMESH_OctreeNode.hxx @@ -0,0 +1,112 @@ +// SMESH SMESH_OctreeNode : Octree with Nodes set +// inherites global class SMESH_Octree +// +// Copyright (C) 2003 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// +// +// File : SMESH_OctreeNode.hxx +// Created : Tue Jan 16 16:00:00 2007 +// Author : Nicolas Geimer & Aurélien Motteux (OCC) +// Module : SMESH + +#ifndef _SMESH_OCTREENODE_HXX_ +#define _SMESH_OCTREENODE_HXX_ + +#include "SMESH_Octree.hxx" + +//forward declaration +class SMDS_MeshNode; + +#include +#include + +class SMESH_OctreeNode : public SMESH_Octree{ + +public: + + // Constructor + SMESH_OctreeNode (set theNodes, const int maxLevel = -1, + const int maxNbNodes = 5 , const double minBoxSize = 0.); + +//============================= +/*! + * \brief Empty destructor + */ +//============================= + virtual ~SMESH_OctreeNode () {}; + + // Tells us if SMESH_OctreeNode is a leaf or not (-1 = not initialiazed) + virtual const bool isLeaf(); + + // Tells us if Node is inside the current box with the precision "precision" + virtual const bool isInside(const SMDS_MeshNode * Node, const double precision = 0. ); + + // Return in Result a list of Nodes potentials to be near Node + void NodesAround( const SMDS_MeshNode * Node , list* Result, + const double precision = 0. ); + + // Return in theGroupsOfNodes a list of group of nodes close to each other within theTolerance + // Search for all the nodes in nodes + void FindCoincidentNodes ( set* nodes, + const double theTolerance, + list< list< const SMDS_MeshNode*> >* theGroupsOfNodes); + + // Static method that return in theGroupsOfNodes a list of group of nodes close to each other within + // theTolerance search for all the nodes in nodes + static void FindCoincidentNodes ( set nodes, + list< list< const SMDS_MeshNode*> >* theGroupsOfNodes, + const double theTolerance = 0.00001, const int maxLevel = -1, + const int maxNbNodes = 5); + + protected: + +//============================= +/*! + * \brief Empty constructor + */ +//============================= + SMESH_OctreeNode (){}; + + // Shares the father's data with each of his child + virtual void buildChildrenData(); + + // Compute the bounding box of the whole set of nodes myNodes (only used for OctreeNode level 0) + void computeBoxForFather(); + + // Construct an empty SMESH_OctreeNode used by SMESH_Octree::buildChildren() + virtual SMESH_Octree* allocateOctreeChild(); + + // Return in result a list of nodes closed to Node and remove it from SetOfNodes + void FindCoincidentNodes( const SMDS_MeshNode * Node, + set* SetOfNodes, + list* Result, + const double precision); + + // The max number of nodes a leaf box can contain + int myMaxNbNodes; + + // The set of nodes inside the box of the Octree (Empty if Octree is not a leaf) + set myNodes; + + // The number of nodes I have inside the box + int myNbNodes; +}; +#endif -- 2.39.2