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:
@@ -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();
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
//================================================================================
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user