From 23d3375b50708f384dbb404dee933bd72d54f9b0 Mon Sep 17 00:00:00 2001
From: eap <eap@opencascade.com>
Date: Tue, 3 Mar 2009 09:01:11 +0000
Subject: [PATCH] 0020184: EDF SMESH 952: Projection 2D does not work    
 project only if there are nodes on face

---
 src/StdMeshers/StdMeshers_Projection_2D.cxx | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/StdMeshers/StdMeshers_Projection_2D.cxx b/src/StdMeshers/StdMeshers_Projection_2D.cxx
index ed6027268..af75b6a4f 100644
--- a/src/StdMeshers/StdMeshers_Projection_2D.cxx
+++ b/src/StdMeshers/StdMeshers_Projection_2D.cxx
@@ -415,18 +415,20 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
   // Check if node projection to a face is needed
   Bnd_B2d uvBox;
   SMDS_ElemIteratorPtr faceIt = srcSubMesh->GetSubMeshDS()->GetElements();
-  for ( int nbN = 0; nbN < 3 && faceIt->more();  ) {
+  int nbFaceNodes = 0;
+  for ( ; nbFaceNodes < 3 && faceIt->more();  ) {
     const SMDS_MeshElement* face = faceIt->next();
     SMDS_ElemIteratorPtr nodeIt = face->nodesIterator();
     while ( nodeIt->more() ) {
       const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
       if ( node->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE ) {
-        nbN++;
+        nbFaceNodes++;
         uvBox.Add( helper.GetNodeUV( srcFace, node ));
       }
     }
   }
-  const bool toProjectNodes = ( uvBox.IsVoid() || uvBox.SquareExtent() < DBL_MIN );
+  const bool toProjectNodes =
+    ( nbFaceNodes > 0 && ( uvBox.IsVoid() || uvBox.SquareExtent() < DBL_MIN ));
 
   // Load pattern from the source face
   SMESH_Pattern mapper;