#include <Adaptor3d_HCurveOnSurface.hxx>
#include <Adaptor2d_HCurve2d.hxx>
#include <Standard_Failure.hxx>
+#include <GCPnts_AbscissaPoint.hxx>
//=======================================================================
//function : Constructor
aPreciseLinDef *= 0.5;
}
- aPreciseLinDef = Max(aPreciseLinDef, Precision::Confusion());
- aPreciseAngDef = Max(aPreciseAngDef, Precision::Angular());
+ aPreciseLinDef = Max (aPreciseLinDef, Precision::Confusion());
+ aPreciseAngDef = Max (aPreciseAngDef, Precision::Angular());
+
+ Standard_Real aMinSize = myParameters.MinSize;
+ if (myParameters.AdjustMinSize)
+ {
+ aMinSize = Min (aMinSize, myParameters.RelMinSize() * GCPnts_AbscissaPoint::Length (
+ myCurve, myCurve.FirstParameter(), myCurve.LastParameter(), aPreciseLinDef));
+ }
mySquareEdgeDef = aPreciseLinDef * aPreciseLinDef;
- mySquareMinSize = Max(mySquareEdgeDef, myParameters.MinSize * myParameters.MinSize);
+ mySquareMinSize = Max (mySquareEdgeDef, aMinSize * aMinSize);
- myEdgeSqTol = BRep_Tool::Tolerance(myEdge);
+ myEdgeSqTol = BRep_Tool::Tolerance (myEdge);
myEdgeSqTol *= myEdgeSqTol;
const Standard_Integer aMinPntNb = (myCurve.GetType() == GeomAbs_Circle) ? 4 : 2; //OCC287
- myDiscretTool.Initialize(myCurve,
- myCurve.FirstParameter(), myCurve.LastParameter(),
- aPreciseAngDef, aPreciseLinDef, aMinPntNb,
- Precision::PConfusion(), myParameters.MinSize);
+ myDiscretTool.Initialize (myCurve,
+ myCurve.FirstParameter(), myCurve.LastParameter(),
+ aPreciseAngDef, aPreciseLinDef, aMinPntNb,
+ Precision::PConfusion(), aMinSize);
if (myCurve.IsCurveOnSurface())
{
Relative (Standard_False),
InternalVerticesMode (Standard_True),
ControlSurfaceDeflection (Standard_True),
- CleanModel(Standard_True)
+ CleanModel (Standard_True),
+ AdjustMinSize (Standard_False)
{
}
//! Cleans temporary data model when algorithm is finished.
Standard_Boolean CleanModel;
+
+ //! Enables/disables local adjustment of min size depending on edge size.
+ //! Disabled by default.
+ Standard_Boolean AdjustMinSize;
};
#endif
-surf_def_off disables control of deflection of mesh from real\n\
surface (enabled by default)\n\
-parallel enables parallel execution (switched off by default)\n\
- -adaptive enables adaptive computation of minimal value in parametric space\n";
+ -adjust_min enables local adjustment of min size depending on edge size (switched off by default)\n";
return 0;
}
aMeshParams.InternalVerticesMode = Standard_False;
else if (aOpt == "-surf_def_off")
aMeshParams.ControlSurfaceDeflection = Standard_False;
+ else if (aOpt == "-adjust_min")
+ aMeshParams.AdjustMinSize = Standard_True;
else if (i < nbarg)
{
Standard_Real aVal = Draw::Atof(argv[i++]);