-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021 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
void bndSegsToMesh( const vector< vector< BndSeg > >& bndSegsPerEdge )
{
+ if ( bndSegsPerEdge.empty() )
+ return;
#ifdef _MYDEBUG_
if ( !getenv("bndSegsToMesh")) return;
map< const TVDVertex *, int > v2Node;
// 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];
}
}
+ else // 2D_mesh_QuadranglePreference_00/A1, bos20144.brep
+ {
+ continue; // bndSegs.size() == 1
+ }
+
bndSegs[i].setBranch( branchID, bndSegsPerEdge ); // set to i-th and to the opposite bndSeg
if ( bndSegs[i].hasOppositeEdge() )
branchEdges[ bndSegs[i].branchID() ].push_back( bndSegs[i]._edge );