Fix regressions

mesh_Projection_2D_00/A4
 imps_09/K2
This commit is contained in:
eap 2014-10-01 21:09:19 +04:00
parent 079e65a9b1
commit 10aa0585bd

View File

@ -486,15 +486,10 @@ namespace {
} }
else else
{ {
const bool skipMediumNodes = true;
map< double, const SMDS_MeshNode* > srcNodes, tgtNodes; map< double, const SMDS_MeshNode* > srcNodes, tgtNodes;
if (( ! SMESH_Algo::GetSortedNodesOnEdge( srcMeshDS, TopoDS::Edge( srcE ), if ( !SMESH_Algo::GetSortedNodesOnEdge( srcMeshDS, srcE, skipMediumNodes, srcNodes) ||
/*ignoreMediumNodes = */true, !SMESH_Algo::GetSortedNodesOnEdge( tgtMeshDS, tgtE, skipMediumNodes, tgtNodes ))
srcNodes ))
||
( ! SMESH_Algo::GetSortedNodesOnEdge( tgtMeshDS, TopoDS::Edge( tgtE ),
/*ignoreMediumNodes = */true,
tgtNodes ))
)
return SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH, return SMESH_ComputeError::New( COMPERR_BAD_INPUT_MESH,
"Invalid node parameters on edges"); "Invalid node parameters on edges");
@ -504,10 +499,18 @@ namespace {
if ( !tgtNodes.empty() ) if ( !tgtNodes.empty() )
{ {
map< double, const SMDS_MeshNode* >::iterator u_tn = tgtNodes.begin(); map< double, const SMDS_MeshNode* >::iterator u_tn = tgtNodes.begin();
map< double, const SMDS_MeshNode* >::iterator u_sn = srcNodes.begin(); if ( srcE.Orientation() == tgtE.Orientation() )
for ( ; u_tn != tgtNodes.end(); ++u_tn, ++u_sn) {
src2tgtNodes.insert( make_pair( u_sn->second, u_tn->second )); 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; is1DComputed = true;
} }
} }
@ -551,6 +554,11 @@ namespace {
gp_Trsf srcTrsf = srcFace.Location(); gp_Trsf srcTrsf = srcFace.Location();
gp_Trsf tgtTrsf = tgtFace.Location(); gp_Trsf tgtTrsf = tgtFace.Location();
trsf.Set( srcTrsf.Inverted() * tgtTrsf ); trsf.Set( srcTrsf.Inverted() * tgtTrsf );
// check
gp_Pnt srcP = BRep_Tool::Pnt( srcWires[0]->FirstVertex() );
gp_Pnt tgtP = BRep_Tool::Pnt( tgtWires[0]->FirstVertex() );
if ( tgtP.Distance( trsf.Transform( srcP )) > tol )
trsf.Set( tgtTrsf.Inverted() * srcTrsf );
} }
else else
{ {