0021422: EDF 1963 SMESH: Viscous layer algorithm fails in some cases

protect from SIGSEGV when used with "Viscous layers"
This commit is contained in:
eap 2011-11-24 14:35:35 +00:00
parent b8043c6073
commit 3b5470266a
2 changed files with 12 additions and 8 deletions

View File

@ -1689,16 +1689,17 @@ bool StdMeshers_PrismAsBlock::GetLayersTransformation(vector<gp_Trsf> & trsf) co
for ( int iE = 0; iE < nbEdgesInWires.front(); ++iE, ++edgeIt )
{
if ( BRep_Tool::Degenerated( *edgeIt )) continue;
const TParam2ColumnMap& u2colMap =
const TParam2ColumnMap* u2colMap =
GetParam2ColumnMap( myHelper->GetMeshDS()->ShapeToIndex( *edgeIt ), isReverse );
if ( !u2colMap ) return false;
isReverse = ( edgeIt->Orientation() == TopAbs_REVERSED );
double f = u2colMap.begin()->first, l = u2colMap.rbegin()->first;
double f = u2colMap->begin()->first, l = u2colMap->rbegin()->first;
if ( isReverse ) swap ( f, l );
const int nbCol = 5;
for ( int i = 0; i < nbCol; ++i )
{
double u = f + i/double(nbCol) * ( l - f );
const TNodeColumn* col = & getColumn( & u2colMap, u )->second;
const TNodeColumn* col = & getColumn( u2colMap, u )->second;
if ( columns.empty() || col != columns.back() )
columns.push_back( col );
}

View File

@ -148,15 +148,18 @@ public:
* \brief Return TParam2ColumnMap for a base edge
* \param baseEdgeID - base edge SMESHDS Index
* \param isReverse - columns in-block orientation
* \retval const TParam2ColumnMap& - map
* \retval const TParam2ColumnMap* - map
*/
const TParam2ColumnMap& GetParam2ColumnMap(const int baseEdgeID,
const TParam2ColumnMap* GetParam2ColumnMap(const int baseEdgeID,
bool & isReverse) const
{
std::pair< TParam2ColumnMap*, bool > col_frw =
myShapeIndex2ColumnMap.find( baseEdgeID )->second;
std::map< int, std::pair< TParam2ColumnMap*, bool > >::const_iterator i_mo =
myShapeIndex2ColumnMap.find( baseEdgeID );
if ( i_mo == myShapeIndex2ColumnMap.end() ) return 0;
const std::pair< TParam2ColumnMap*, bool >& col_frw = i_mo->second;
isReverse = !col_frw.second;
return * col_frw.first;
return col_frw.first;
}
/*!