+ if ( nbright > 2 ) // there was a split at J
+ quad->nbNodeOut( QUAD_LEFT_SIDE ) = 0;
+ }
+ const SMDS_MeshNode *a, *b, *c, *d;
+ i = nbup - 1;
+ // avoid creating zero-area triangles near a straight-angle corner
+ {
+ a = uv_e2[i].node;
+ b = uv_e2[i-1].node;
+ c = uv_e1[nbright-2].node;
+ SMESH_TNodeXYZ pa( a ), pb( b ), pc( c );
+ double area = 0.5 * (( pb - pa ) ^ ( pc - pa )).Modulus();
+ if ( Abs( area ) < 1e-20 )
+ {
+ --g;
+ d = quad->UVPt( g, nbvertic-2 ).node;
+ if ( myTrianglePreference )
+ {
+ if ( SMDS_MeshFace* face = myHelper->AddFace(a, d, c))
+ meshDS->SetMeshElementOnShape(face, geomFaceID);
+ }
+ else
+ {
+ if ( SMDS_MeshFace* face = myHelper->AddFace(a, b, d, c))
+ {
+ meshDS->SetMeshElementOnShape(face, geomFaceID);
+ SMESH_ComputeErrorPtr& err = aMesh.GetSubMesh( aFace )->GetComputeError();
+ if ( !err || err->IsOK() || err->myName < COMPERR_WARNING )
+ {
+ err.reset( new SMESH_ComputeError( COMPERR_WARNING,
+ "Bad quality quad created"));
+ err->myBadElements.push_back( face );
+ }
+ }
+ --i;
+ }
+ }
+ }