-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 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
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
TopLoc_Location loc;
Handle(Geom_Surface) surface = BRep_Tool::Surface( face, loc );
- if ( surface->IsUPeriodic() || surface->IsVPeriodic() ||
- surface->IsUClosed() || surface->IsVClosed() )
+ // if ( surface->IsUPeriodic() || surface->IsVPeriodic() ||
+ // surface->IsUClosed() || surface->IsVClosed() )
{
//while ( surface->IsKind(STANDARD_TYPE(Geom_RectangularTrimmedSurface )))
//surface = Handle(Geom_RectangularTrimmedSurface)::DownCast( surface )->BasisSurface();
void SMESH_MesherHelper::setPosOnShapeValidity(int shapeID, bool ok ) const
{
- ((SMESH_MesherHelper*)this)->myNodePosShapesValidity.insert( make_pair( shapeID, ok));
+ std::map< int,bool >::iterator sh_ok =
+ ((SMESH_MesherHelper*)this)->myNodePosShapesValidity.insert( make_pair( shapeID, ok)).first;
+ if ( !ok )
+ sh_ok->second = ok;
}
//=======================================================================
const bool force,
double distXYZ[4]) const
{
- int shapeID = n->getshapeId();
+ int shapeID = n->getshapeId();
bool infinit = ( Precision::IsInfinite( uv.X() ) || Precision::IsInfinite( uv.Y() ));
- if ( force || toCheckPosOnShape( shapeID ) || infinit )
+ bool zero = ( uv.X() == 0. && uv.Y() == 0. );
+ if ( force || toCheckPosOnShape( shapeID ) || infinit || zero )
{
// check that uv is correct
TopLoc_Location loc;
{
int shapeID = n->getshapeId();
bool infinit = Precision::IsInfinite( u );
- if ( force || toCheckPosOnShape( shapeID ) || infinit )
+ bool zero = ( u == 0. );
+ if ( force || toCheckPosOnShape( shapeID ) || infinit || zero )
{
TopLoc_Location loc; double f,l;
Handle(Geom_Curve) curve = BRep_Tool::Curve( E,loc,f,l );
return getMediumNodeOnComposedWire(n1,n2,force3d);
}
E = TopoDS::Edge(meshDS->IndexToShape( edgeID = pos.first ));
- u[0] = GetNodeU(E,n1,n2, force3d ? 0 : &uvOK[0]);
- u[1] = GetNodeU(E,n2,n1, force3d ? 0 : &uvOK[1]);
+ try {
+ u[0] = GetNodeU(E,n1,n2, force3d ? 0 : &uvOK[0]);
+ u[1] = GetNodeU(E,n2,n1, force3d ? 0 : &uvOK[1]);
+ }
+ catch ( Standard_Failure& f )
+ {
+ // issue 22502 / a node is on VERTEX not belonging to E
+ return getMediumNodeOnComposedWire(n1,n2,force3d);
+ }
}
if ( !force3d & uvOK[0] && uvOK[1] )