- if ( !isValid ) // smoothing in 3D fails, try in 2D
- {
- // compute the new UV as avarage of surrounding UVs
- newUV.SetCoord (0.0, 0.0);
- for ( unsigned i = 0; i < sNode._triangles.size(); ++i )
- newUV += sNode._triangles[i]._n1->_uv;
- newUV /= sNode._triangles.size();
-
- // check validity of the newUV
- isValid = true;
- for ( unsigned i = 0; i < sNode._triangles.size() && isValid; ++i )
- isValid = sNode._triangles[i].IsForward( newUV );
-
- if ( isValid )
- newXYZ = surface->Value( newUV.X(), newUV.Y() ).XYZ();
- }
-
- if ( isValid ) // store new node position
- {
- sNode._uv = newUV;
- sNode._xyz = newXYZ;
- }