+ tgtEdges.push_back( tgtE );
+
+
+ // Fill map of src to tgt nodes with nodes on edges
+
+ if ( srcMesh->GetSubMesh( srcE )->IsEmpty() ||
+ tgtMesh->GetSubMesh( tgtE )->IsEmpty() )
+ {
+ // add nodes on VERTEXes for a case of not meshes EDGEs
+ const TopoDS_Shape& srcV = SMESH_MesherHelper::IthVertex( 0, srcE );
+ const TopoDS_Shape& tgtV = shape2ShapeMap( srcV, /*isSrc=*/true );
+ const SMDS_MeshNode* srcN = SMESH_Algo::VertexNode( TopoDS::Vertex( srcV ), srcMeshDS );
+ const SMDS_MeshNode* tgtN = SMESH_Algo::VertexNode( TopoDS::Vertex( tgtV ), tgtMeshDS );
+ if ( srcN && tgtN )
+ src2tgtNodes.insert( make_pair( srcN, tgtN ));
+ }
+ else
+ {
+ const bool skipMediumNodes = true;
+ map< double, const SMDS_MeshNode* > srcNodes, tgtNodes;
+ if ( !SMESH_Algo::GetSortedNodesOnEdge( srcMeshDS, srcE, skipMediumNodes, srcNodes) ||
+ !SMESH_Algo::GetSortedNodesOnEdge( tgtMeshDS, tgtE, skipMediumNodes, tgtNodes ))
+ return SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH,
+ "Invalid node parameters on edges");
+
+ if (( srcNodes.size() != tgtNodes.size() ) && tgtNodes.size() > 0 )
+ return SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH,
+ "Different number of nodes on edges");
+ if ( !tgtNodes.empty() )
+ {
+ map< double, const SMDS_MeshNode* >::iterator u_tn = tgtNodes.begin();
+ if ( srcE.Orientation() == tgtE.Orientation() )
+ {
+ map< double, const SMDS_MeshNode* >::iterator u_sn = srcNodes.begin();
+ for ( ; u_tn != tgtNodes.end(); ++u_tn, ++u_sn)
+ src2tgtNodes.insert( make_pair( u_sn->second, u_tn->second ));
+ }
+ else
+ {
+ map< double, const SMDS_MeshNode* >::reverse_iterator u_sn = srcNodes.rbegin();
+ for ( ; u_tn != tgtNodes.end(); ++u_tn, ++u_sn)
+ src2tgtNodes.insert( make_pair( u_sn->second, u_tn->second ));
+ }
+ is1DComputed = true;
+ }
+ }
+ } // loop on EDGEs of a WIRE
+