- gp_XY p0 ( uvB[ iCol ].u, uvB[ iCol ].v );
- gp_XY p2 ( uvT[ iCol ].u, uvT[ iCol ].v );
- const double x0 = uvB[ iCol ].x;
- const double x1 = uvT[ iCol ].x;
- double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
- double y = y0 + x * (y1 - y0);
- gp_XY uv = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
- gp_Pnt p = S->Value( uv.Coord(1), uv.Coord(2));
- const SMDS_MeshNode* n = nodeRows[iRow][iCol];
- meshDS->MoveNode( n, p.X(), p.Y(), p.Z() );
- if ( SMDS_FacePosition* pos = dynamic_cast< SMDS_FacePosition*>( n->GetPosition() ))
- pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+ gp_XY p1 ( uvR[ iRow ].u, uvR[ iRow ].v );
+ gp_XY p3 ( uvL[ iRow ].u, uvL[ iRow ].v );
+ const double y0 = uvL[ iRow ].y;
+ const double y1 = uvR[ iRow ].y;
+ for ( size_t iCol = 1; iCol < nodeRows[0].size()-1; ++iCol )
+ {
+ gp_XY p0 ( uvB[ iCol ].u, uvB[ iCol ].v );
+ gp_XY p2 ( uvT[ iCol ].u, uvT[ iCol ].v );
+ const double x0 = uvB[ iCol ].x;
+ const double x1 = uvT[ iCol ].x;
+ double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
+ double y = y0 + x * (y1 - y0);
+ gp_XY uv = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
+ gp_Pnt p = S->Value( uv.Coord(1), uv.Coord(2));
+ const SMDS_MeshNode* n = nodeRows[iRow][iCol];
+ meshDS->MoveNode( n, p.X(), p.Y(), p.Z() );
+ if ( SMDS_FacePositionPtr pos = n->GetPosition() )
+ pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+ }
+ }
+ }
+ else
+ {
+ Handle(ShapeAnalysis_Surface) S = helper.GetSurface( face );
+ SMESH_NodeXYZ a0 ( uvB.front().node );
+ SMESH_NodeXYZ a1 ( uvB.back().node );
+ SMESH_NodeXYZ a2 ( uvT.back().node );
+ SMESH_NodeXYZ a3 ( uvT.front().node );
+ for ( size_t iRow = 1; iRow < nodeRows.size()-1; ++iRow )
+ {
+ SMESH_NodeXYZ p1 ( uvR[ iRow ].node );
+ SMESH_NodeXYZ p3 ( uvL[ iRow ].node );
+ const double y0 = uvL[ iRow ].y;
+ const double y1 = uvR[ iRow ].y;
+ for ( size_t iCol = 1; iCol < nodeRows[0].size()-1; ++iCol )
+ {
+ SMESH_NodeXYZ p0 ( uvB[ iCol ].node );
+ SMESH_NodeXYZ p2 ( uvT[ iCol ].node );
+ const double x0 = uvB[ iCol ].x;
+ const double x1 = uvT[ iCol ].x;
+ double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
+ double y = y0 + x * (y1 - y0);
+ gp_Pnt p = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
+ gp_Pnt2d uv = S->ValueOfUV( p, Precision::Confusion() );
+ p = S->Value( uv );
+ const SMDS_MeshNode* n = nodeRows[iRow][iCol];
+ meshDS->MoveNode( n, p.X(), p.Y(), p.Z() );
+ if ( SMDS_FacePositionPtr pos = n->GetPosition() )
+ pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+ }