- else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX) {
- SMESHDS_Mesh * meshDS = GetMeshDS();
- int vertexID = n->GetPosition()->GetShapeId();
- const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
- param = BRep_Tool::Parameter( V, E );
+ else if( pos->GetTypeOfPosition() == SMDS_TOP_VERTEX )
+ {
+ if ( inEdgeNode && TopExp::FirstVertex( E ).IsSame( TopExp::LastVertex( E ))) // issue 0020128
+ {
+ Standard_Real f,l;
+ BRep_Tool::Range( E, f,l );
+ double uInEdge = GetNodeU( E, inEdgeNode );
+ param = ( fabs( uInEdge - f ) < fabs( l - uInEdge )) ? f : l;
+ }
+ else
+ {
+ SMESHDS_Mesh * meshDS = GetMeshDS();
+ int vertexID = pos->GetShapeId();
+ const TopoDS_Vertex& V = TopoDS::Vertex(meshDS->IndexToShape(vertexID));
+ param = BRep_Tool::Parameter( V, E );
+ }