1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0029606: [Regression vs 7.0] BRepClass3d_SolidClassifier classifies the point as IN while it is ON

Simple treatment of some analytical cases when curve is parallel or belongs surface is added in curve - face/surface intersection algorithm
Treatment such cases is added in classifier algorithm
Test case added
This commit is contained in:
ifv
2018-03-28 17:00:50 +03:00
committed by bugmaster
parent d051064495
commit f84edf5816
8 changed files with 185 additions and 82 deletions

View File

@@ -1252,9 +1252,11 @@ void IntCurveSurface_Inter::AppendIntAna(const TheCurve& curve,
if(intana_ConicQuad.IsDone()) {
if(intana_ConicQuad.IsInQuadric()) {
//-- cout<<" Courbe Dans la Quadrique !!! Non Traite !!!"<<endl;
myIsParallel = Standard_True;
}
else if(intana_ConicQuad.IsParallel()) {
//-- cout<<" Courbe // a la Quadrique !!! Non Traite !!!"<<endl;
myIsParallel = Standard_True;
}
else {
Standard_Integer nbp = intana_ConicQuad.NbPoints();

View File

@@ -25,11 +25,19 @@
#define PARAMEQUAL(a,b) (Abs((a)-(b))< (1e-8))
//================================================================================
IntCurveSurface_Intersection::IntCurveSurface_Intersection(): done(Standard_False) {
IntCurveSurface_Intersection::IntCurveSurface_Intersection():
done(Standard_False),
myIsParallel(Standard_False)
{
}
//================================================================================
Standard_Boolean IntCurveSurface_Intersection::IsDone() const { return(done); }
//================================================================================
Standard_Boolean IntCurveSurface_Intersection::IsParallel() const
{
return(myIsParallel);
}
//================================================================================
Standard_Integer IntCurveSurface_Intersection::NbPoints() const {
if (!done) {throw StdFail_NotDone();}
return lpnt.Length();
@@ -116,6 +124,7 @@ void IntCurveSurface_Intersection::ResetFields() {
lseg.Clear();
lpnt.Clear();
done=Standard_False;
myIsParallel = Standard_False;
}
}
//================================================================================

View File

@@ -64,7 +64,12 @@ public:
//! the computation has not been done
//! raises OutOfRange if Index is not in the range <1..NbSegment>
Standard_EXPORT const IntCurveSurface_IntersectionSegment& Segment (const Standard_Integer Index) const;
//! Returns true if curve is parallel or belongs surface
//! This case is recognized only for some pairs
//! of analytical curves and surfaces (plane - line, ...)
Standard_EXPORT Standard_Boolean IsParallel() const;
//! Dump all the fields.
Standard_EXPORT void Dump() const;
@@ -101,6 +106,9 @@ protected:
Standard_Boolean done;
Standard_Boolean myIsParallel; //Curve is "parallel" surface
//This case is recognized only for some pairs
//of analytical curves and surfaces (plane - line, ...)
private: