From cf358071086f4db48813a1dc26b96f478034d5f2 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 16 Nov 2016 16:48:50 +0300 Subject: [PATCH] Optimize ConvertToQuadratic avoid computing octree->getHeight() upon each FindClosestTo() in SMESH_MesherHelper::FixQuadraticElements() --- src/MEFISTO2/aptrte.cxx | 1 - src/SMESHUtils/SMESH_MeshAlgos.cxx | 11 +++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/MEFISTO2/aptrte.cxx b/src/MEFISTO2/aptrte.cxx index 3743dcf06..5ee5e167a 100755 --- a/src/MEFISTO2/aptrte.cxx +++ b/src/MEFISTO2/aptrte.cxx @@ -866,6 +866,5 @@ void if( nbtrianeg>0 ) MESSAGE( "ATTENTION: "<< nbtrianeg << " TRIANGLES d'AIRE NEGATIVE" ); - MESSAGE(" "); return; } diff --git a/src/SMESHUtils/SMESH_MeshAlgos.cxx b/src/SMESHUtils/SMESH_MeshAlgos.cxx index dbadd8250..6670e509e 100644 --- a/src/SMESHUtils/SMESH_MeshAlgos.cxx +++ b/src/SMESHUtils/SMESH_MeshAlgos.cxx @@ -442,6 +442,7 @@ struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher SMDS_Mesh* _mesh; SMDS_ElemIteratorPtr _meshPartIt; ElementBndBoxTree* _ebbTree; + int _ebbTreeHeight; SMESH_NodeSearcherImpl* _nodeSearcher; SMDSAbs_ElementType _elementType; double _tolerance; @@ -451,7 +452,7 @@ struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher SMESH_ElementSearcherImpl( SMDS_Mesh& mesh, double tol=-1, SMDS_ElemIteratorPtr elemIt=SMDS_ElemIteratorPtr()) - : _mesh(&mesh),_meshPartIt(elemIt),_ebbTree(0),_nodeSearcher(0),_tolerance(tol),_outerFacesFound(false) {} + : _mesh(&mesh),_meshPartIt(elemIt),_ebbTree(0),_ebbTreeHeight(-1),_nodeSearcher(0),_tolerance(tol),_outerFacesFound(false) {} virtual ~SMESH_ElementSearcherImpl() { if ( _ebbTree ) delete _ebbTree; _ebbTree = 0; @@ -479,6 +480,12 @@ struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher { return _outerFaces.empty() || _outerFaces.count(face); } + int getTreeHeight() + { + if ( _ebbTreeHeight < 0 ) + _ebbTreeHeight = _ebbTree->getHeight(); + return _ebbTreeHeight; + } struct TInters //!< data of intersection of the line and the mesh face (used in GetPointState()) { @@ -796,7 +803,7 @@ SMESH_ElementSearcherImpl::FindClosestTo( const gp_Pnt& point, if ( _ebbTree->getBox()->IsOut( point.XYZ() )) radius = point.Distance( boxCenter ) - 0.5 * _ebbTree->maxSize(); if ( radius < 0 ) - radius = _ebbTree->maxSize() / pow( 2., _ebbTree->getHeight()) / 2; + radius = _ebbTree->maxSize() / pow( 2., getTreeHeight()) / 2; while ( suspectElems.empty() ) { _ebbTree->getElementsInSphere( point.XYZ(), radius, suspectElems ); -- 2.30.2