Approx_ComputeCLine.gxx : new class field is added to manage hang checking.
ProjLib/ProjLib_ComputeApprox.cxx : unset hang checking for analytical surfaces and curves
mylastC = LastC;
myMaxSegments = MAXSEGM;
myInvOrder = Standard_True;
+ myHangChecking = Standard_True;
alldone = Standard_False;
Perform(Line);
}
mylastC = LastC;
myMaxSegments = MAXSEGM;
myInvOrder = Standard_True;
+ myHangChecking = Standard_True;
}
//=======================================================================
Standard_Real thetol3d = Precision::Confusion(), thetol2d = Precision::Confusion();
UFirst = Line.FirstParameter();
ULast = Line.LastParameter();
- Standard_Real TolU = Max((ULast - UFirst)*1.e-03, Precision::Confusion());
+ Standard_Real TolU = 0.;
+ if (myHangChecking)
+ {
+ TolU = Max((ULast - UFirst)*1.e-03, Precision::Confusion());
+ }
+ else
+ {
+ TolU = Max((ULast - UFirst)*1.e-05, Precision::PApproximation());
+ }
Standard_Real myfirstU = UFirst;
Standard_Real mylastU = ULast;
Standard_Integer aMaxSegments = 0;
//cout << myfirstU << " - " << mylastU << " tol : " << thetol3d << " " << thetol2d << endl;
Standard_Boolean aStopCutting = Standard_False;
- if (aNbCut >= aNbComp)
+ if (myHangChecking && aNbCut >= aNbComp)
{
if (aNbCut > aNbImp + 1)
{
myInvOrder = theInvOrder;
}
+//=======================================================================
+//function : SetHangChecking
+//purpose :
+//=======================================================================
+void Approx_ComputeCLine::SetHangChecking(const Standard_Boolean theHangChecking)
+{
+ myHangChecking = theHangChecking;
+}
+
//=======================================================================
//function : IsAllApproximated
//purpose : returns False if at a moment of the approximation,
//! By default inverse order is used.
Standard_EXPORT void SetInvOrder(const Standard_Boolean theInvOrder);
+ //! Set value of hang checking flag
+ //! if this flag = true, possible hang of algorithm is checked
+ //! and algorithm is forced to stop.
+ //! By default hang checking is used.
+ Standard_EXPORT void SetHangChecking(const Standard_Boolean theHangChecking);
+
//! returns False if at a moment of the approximation,
//! the status NoApproximation has been sent by the user
//! when more points were needed.
AppParCurves_Constraint mylastC;
Standard_Integer myMaxSegments;
Standard_Boolean myInvOrder;
+ Standard_Boolean myHangChecking;
};
//! By default inverse order is used.
Standard_EXPORT void SetInvOrder(const Standard_Boolean theInvOrder);
+ //! Set value of hang checking flag
+ //! if this flag = true, possible hang of algorithm is checked
+ //! and algorithm is forced to stop.
+ //! By default hang checking is used.
+ Standard_EXPORT void SetHangChecking(const Standard_Boolean theHangChecking);
+
//! returns False if at a moment of the approximation,
//! the status NoApproximation has been sent by the user
//! when more points were needed.
AppParCurves_Constraint mylastC;
Standard_Integer myMaxSegments;
Standard_Boolean myInvOrder;
+ Standard_Boolean myHangChecking;
};
//! By default inverse order is used.
Standard_EXPORT void SetInvOrder(const Standard_Boolean theInvOrder);
+ //! Set value of hang checking flag
+ //! if this flag = true, possible hang of algorithm is checked
+ //! and algorithm is forced to stop.
+ //! By default hang checking is used.
+ Standard_EXPORT void SetHangChecking(const Standard_Boolean theHangChecking);
+
//! returns False if at a moment of the approximation,
//! the status NoApproximation has been sent by the user
//! when more points were needed.
AppParCurves_Constraint mylastC;
Standard_Integer myMaxSegments;
Standard_Boolean myInvOrder;
+ Standard_Boolean myHangChecking;
};
Approx_FitAndDivide2d Fit(Deg1, Deg2, myTolerance, aTol2d, Standard_True, aFistC, aLastC);
Fit.SetMaxSegments(aMaxSegments);
+ if (simplecase)
+ {
+ Fit.SetHangChecking(Standard_False);
+ }
Fit.Perform(F);
Standard_Real aNewTol2d = 0;
--- /dev/null
+puts "================================================================="
+puts "OCC31470: BOP common produces empty result (box and holed sphere)"
+puts "================================================================="
+puts ""
+
+plane pln1 51.899912462 99.996691888 62.33204004
+psphere s1 pln1 15
+psphere s2 pln1 10
+bcut ss s1 s2
+box bb 100 100 100
+
+bcommon result bb ss
+savehistory hh
+
+explode ss f
+modified ff hh ss_1
+generated ee hh ss_1
+
+checkshape result
+
+checknbshapes result -solid 1 -shell 1 -face 3 -wire 6 -edge 8 -vertex 6
+
+set tolres [checkmaxtol result]
+
+if { ${tolres} > 2.e-7} {
+ puts "Error: bad tolerance of result"
+}
+
+checkprops result -v 4975.49
+
+v2d
+pcurve pc ee ff
+trim pc pc
+2dfit
+
+checkview -screenshot -2d -path ${imagedir}/${test_image}.png