-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
}
text << "\n";
file.write( text.c_str(), text.size() );
- cout << "execfile( '" << fileName << "')" << endl;
+ cout << fileName << endl;
#endif
}
for ( size_t iE = 0; iE < edges.size(); ++iE )
{
size_t iE2 = (iE+1) % edges.size();
- if ( !TopExp::CommonVertex( edges[iE], edges[iE2], vShared ))
- continue;
+ if ( !TopExp::CommonVertex( edges[iE], edges[iE2], vShared )) // FACE with several WIREs?
+ for ( size_t i = 1; i < edges.size(); ++i )
+ {
+ iE2 = (iE2+1) % edges.size();
+ if ( iE != iE2 &&
+ TopExp::CommonVertex( edges[iE], edges[iE2], vShared ) &&
+ vShared.IsSame( TopExp::LastVertex( edges[iE], true )))
+ break;
+ }
if ( !vShared.IsSame( TopExp::LastVertex( edges[iE], true )))
- return false;
+ continue;
+ //return false;
vector< UVU > & points1 = uvuVec[ iE ];
vector< UVU > & points2 = uvuVec[ iE2 ];
gp_Pnt2d & uv1 = points1.back() ._uv;
// make 'scale' such that to have coordinates precise enough when converted to int
gp_XY uvMin = uvBox.CornerMin(), uvMax = uvBox.CornerMax();
- uvMin.ChangeCoord(1) = uvMin.X() * scale[0];
- uvMin.ChangeCoord(2) = uvMin.Y() * scale[1];
- uvMax.ChangeCoord(1) = uvMax.X() * scale[0];
- uvMax.ChangeCoord(2) = uvMax.Y() * scale[1];
+ uvMin *= gp_XY( scale[0], scale[1] );
+ uvMax *= gp_XY( scale[0], scale[1] );
double vMax[2] = { Max( Abs( uvMin.X() ), Abs( uvMax.X() )),
Max( Abs( uvMin.Y() ), Abs( uvMax.Y() )) };
int iMax = ( vMax[0] > vMax[1] ) ? 0 : 1;
- const double precision = Min( 1e-5, minSegLen * 1e-2 );
+ const double precision = Min( 1e-5, Min( minSegLen * 1e-2, vMax[iMax] * 1e-5 ));
double preciScale = Min( vMax[iMax] / precision,
std::numeric_limits<int>::max() / vMax[iMax] );
preciScale /= scale[iMax];
for (TVD::const_cell_iterator it = vd.cells().begin(); it != vd.cells().end(); ++it)
{
const TVDCell* cell = &(*it);
+ if ( cell->is_degenerate() )
+ {
+ std::cerr << "SMESH_MAT2d: encounter degenerate voronoi_cell. Invalid input data?"
+ << std::endl;
+ return;
+ }
if ( cell->contains_segment() )
{
InSegment& seg = inSegments[ cell->source_index() ];