From: eap Date: Thu, 3 Jul 2014 12:09:34 +0000 (+0400) Subject: IPAL52438: Projection 2D fails X-Git-Tag: V7_5_0a1~69 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=9e3a675848244004917a6c154f4fa238661091e2;p=modules%2Fsmesh.git IPAL52438: Projection 2D fails Merge w/o parameter check if nb of existing and new nodes is same --- diff --git a/src/SMESH/SMESH_Pattern.cxx b/src/SMESH/SMESH_Pattern.cxx index af13d4548..0ae35919a 100644 --- a/src/SMESH/SMESH_Pattern.cxx +++ b/src/SMESH/SMESH_Pattern.cxx @@ -4018,26 +4018,41 @@ bool SMESH_Pattern::MakeMesh(SMESH_Mesh* theMesh, map< double, const SMDS_MeshNode* >::iterator u2n = ++paramsOfNodes.begin(); map< double, const SMDS_MeshNode* >::iterator u2nEnd = --paramsOfNodes.end(); TPoint* p; - const double tolFact = ( paramsOfNodes.size() == points.size() ) ? 0.3 : 0.05; - while ( u2n != u2nEnd && pItF != points.end() ) + if ( paramsOfNodes.size() == points.size() ) { - const double u = u2n->first; - const SMDS_MeshNode* n = u2n->second; - const double tol = ( (++u2n)->first - u ) * tolFact; - do + for ( ; u2n != u2nEnd; ++u2n ) { p = ( isForward ? *pItF : *pItR ); - if ( Abs( u - p->myU ) < tol ) + int pIndex = p - &myPoints[0]; + if ( !nodesVector [ pIndex ] ) + nodesVector [ pIndex ] = u2n->second; + ++pItF; + ++pItR; + } + } + else + { + const double tolFact = 0.05; + while ( u2n != u2nEnd && pItF != points.end() ) + { + const double u = u2n->first; + const SMDS_MeshNode* n = u2n->second; + const double tol = ( (++u2n)->first - u ) * tolFact; + do { - int pIndex = p - &myPoints[0]; - if ( !nodesVector [ pIndex ] ) - nodesVector [ pIndex ] = n; - ++pItF; - ++pItR; - break; + p = ( isForward ? *pItF : *pItR ); + if ( Abs( u - p->myU ) < tol ) + { + int pIndex = p - &myPoints[0]; + if ( !nodesVector [ pIndex ] ) + nodesVector [ pIndex ] = n; + ++pItF; + ++pItR; + break; + } } + while ( p->myU < u && ( ++pItF, ++pItR != points.rend() )); } - while ( p->myU < u && ( ++pItF, ++pItR != points.rend() )); } break; }