Files
OCCT/src/IntPatch/FILES
nbv e2e0498b17 0027431: [Regression to 6.9.1] Huge tolerance obtained during intersection of cylinder and sphere
The root of the problem is incorrect processing of cases when intersection line goes through the apex(es) of sphere. The fix improves this situation. The algorithm is taken from DecomposeResult(...) function (see IntPatch_ImpPrmIntersection.cxx file). Before the fix, faltering steps were done to solve this problem. As result, it worked in some particular cases. Now, its possibilities have been extended significantly.

Following changes have been made in the fix:

1. Class IntPatch_ALineToWLine has been rewritten cardinally. It touches as interfaces of existing methods as adding/removing some methods/fields. Correction touches both cases: going through seam of Cone/Sphere and through pole(s) of sphere. Old interface did not allow making some actions with analytical line (ALine), e.g. splitting it on several Walking-lines (WLine).

2. Restriction-line support has been removed from Implicit-Implicit intersection result (see IntPatch_Intersection::GeomGeomPerfom(...) method). It connects with the fact that the intersection algorithm itself returns precise intersection line in analytical cases (in compare with parametric intersector). Therefore, we do not need in additional (restriction) line.

3. New class IntPatch_SpecialPoints has been added. This class contains methods to add some special points (such as apex of cone, pole of sphere, point on surface boundary etc.) in intersection line (IntPatch_PointLine). It is based on the static functions, which already exist in IntPatch_ImpPrmIntersection.cxx file (these functions have been moved to the new class).

4. Method IntPatch_WLineTool::ExtendTwoWlinesToEachOther(...) has been renamed to IntPatch_WLineTool::ExtendTwoWLines(...). It is connected with changing main idea of the method. Now it allows extending WLine to the surface boundary or to the singular point (if it is possible): cone apex, sphere pole etc. Interface of this method has been corrected, too. At that, old functionality (extending to each other) has been kept. For implementation of this algorithm, new enumeration "IntPatchWT_WLsConnectionType" has been created.

5. Method IntPatch_PointLine::CurvatureRadiusOfIntersLine(...) has been added. See IntPatch_PointLine.hxx for detail information. It allows correct step computing depended on the local curvature of the intersection line. This method uses geometrical properties of intersected surfaces to compute local curvature. Therefore, it can be applied in wide range of cases even if the intersection curve is not represented in explicit form (e.g. in case of param-param-intersection).

6. Method IntSurf::SetPeriod(...) has been created.

7. Additional check has been added in Draft_Modification::Perform() method for better choice of correct fragment of intersection line for processing DRAFT operation.

8. New overload method IntPatch_Point::SetValue() has been added.

9. Some refactoring of the code has been made.

Creation of test case for issue #27431.

---------------------------------------------------------------------------------------------
Some test cases have been adjusted according to their new behavior.

   tests\bugs\modalg_4\bug62
It is really IMPROVEMENT (but fortuitous).

   tests\bugs\modalg_5\bug25838
The behavior of this test has been reverted to the state before fixing the issue #27341. Main problem has not been fixed in #27341. It was fortuitous improvement.

    tests\bugs\moddata_2\bug565
Quality of intersection curve was not checked. And the curve is bad on both MASTER and FIX. Input data are really wrong: plane-like-cone. However, on the MASTER, four intersection curves (the quality is insignificant) are expected. On the fix, not empty intersection result is expected simply.

   tests\boolean\volumemaker\A8
Differences in images and CPU is expected. Difference in images is expected to be fixed in the issue #26020. Now, we should apply this behavior.
Much CPU time is spent by IntTools_FaceFace::ComputeTolReached3d(...) and GeomInt_IntSS::BuildPCurves(...) methods calling. These methods are not touched by the algorithm. It is the result of change of intersection curve(s) form. However, the new Curve(s) seems to be valid and can be applied. As result, new behavior can be applied, too.

   tests\boolean\volumemaker\F8
   tests\boolean\volumemaker\F9
   tests\boolean\volumemaker\G5
   tests\boolean\volumemaker\G6
CPU difference is expected. Much CPU time is spent by IntPatch_PointLine::CurvatureRadiusOfIntersLine(...) method calling. This method is really new (it does not exist on the MASTER) and is really useful. Therefore, we should apply new behavior.

   tests\boolean\volumemaker\G1
CPU difference is expected. Much CPU time is spent by IntTools_WLineTool::DecompositionOfWLine(...) and IntTools_FaceFace::ComputeTolReached3d(...) methods calling. These methods are not touched by the algorithm. It is the result of change of intersection curve(s) form. However, the new Curve(s) seems to be valid and can be applied. As result, new behavior can be applied, too.

   tests\bugs\modalg_6\bug26619
Differences in images is expected. The test keeps its BAD status on the FIX. But the result on the fix is nearer to expected than on the MASTER. Issue #27014 is still actual. As before, it is not clear, why the number of entities is different. The number of section curves has not been changed. Interfered entities are the same as on the MASTER.

   tests\bugs\modalg_5\bug25319_1(2)
The reason is described in the issue #27896.

Small correction in the test case
2016-11-03 14:15:41 +03:00

101 lines
2.7 KiB
Plaintext
Executable File

IntPatch_ALine.cxx
IntPatch_ALine.hxx
IntPatch_ALine.lxx
IntPatch_ALineToWLine.cxx
IntPatch_ALineToWLine.hxx
IntPatch_ArcFunction.cxx
IntPatch_ArcFunction.hxx
IntPatch_ArcFunction.lxx
IntPatch_CSFunction.cxx
IntPatch_CSFunction.hxx
IntPatch_CurvIntSurf.hxx
IntPatch_CurvIntSurf_0.cxx
IntPatch_GLine.cxx
IntPatch_GLine.hxx
IntPatch_GLine.lxx
IntPatch_HCurve2dTool.cxx
IntPatch_HCurve2dTool.hxx
IntPatch_HCurve2dTool.lxx
IntPatch_HInterTool.cxx
IntPatch_HInterTool.hxx
IntPatch_HInterTool.lxx
IntPatch_IType.hxx
IntPatch_ImpImpIntersection.cxx
IntPatch_ImpImpIntersection.hxx
IntPatch_ImpImpIntersection.lxx
IntPatch_ImpImpIntersection_0.gxx
IntPatch_ImpImpIntersection_1.gxx
IntPatch_ImpImpIntersection_2.gxx
IntPatch_ImpImpIntersection_3.gxx
IntPatch_ImpImpIntersection_4.gxx
IntPatch_ImpImpIntersection_5.gxx
IntPatch_ImpImpIntersection_6.gxx
IntPatch_ImpPrmIntersection.cxx
IntPatch_ImpPrmIntersection.hxx
IntPatch_ImpPrmIntersection.lxx
IntPatch_InterferencePolyhedron.cxx
IntPatch_InterferencePolyhedron.hxx
IntPatch_Intersection.cxx
IntPatch_Intersection.hxx
IntPatch_Intersection.lxx
IntPatch_Line.cxx
IntPatch_Line.hxx
IntPatch_Line.lxx
IntPatch_LineConstructor.cxx
IntPatch_LineConstructor.hxx
IntPatch_Point.cxx
IntPatch_Point.hxx
IntPatch_Point.lxx
IntPatch_PointLine.cxx
IntPatch_PointLine.hxx
IntPatch_PolyArc.cxx
IntPatch_PolyArc.hxx
IntPatch_PolyLine.cxx
IntPatch_PolyLine.hxx
IntPatch_Polygo.cxx
IntPatch_Polygo.hxx
IntPatch_Polygo.lxx
IntPatch_Polyhedron.cxx
IntPatch_Polyhedron.hxx
IntPatch_PolyhedronTool.hxx
IntPatch_PolyhedronTool.lxx
IntPatch_PrmPrmIntersection.cxx
IntPatch_PrmPrmIntersection.hxx
IntPatch_PrmPrmIntersection.lxx
IntPatch_PrmPrmIntersection_T3Bits.cxx
IntPatch_PrmPrmIntersection_T3Bits.hxx
IntPatch_PrmPrmIntersection_T3Bits.lxx
IntPatch_RLine.cxx
IntPatch_RLine.hxx
IntPatch_RLine.lxx
IntPatch_RstInt.cxx
IntPatch_RstInt.hxx
IntPatch_SearchPnt.hxx
IntPatch_SequenceOfIWLineOfTheIWalking.hxx
IntPatch_SequenceOfLine.hxx
IntPatch_SequenceOfPathPointOfTheSOnBounds.hxx
IntPatch_SequenceOfPoint.hxx
IntPatch_SequenceOfSegmentOfTheSOnBounds.hxx
IntPatch_SpecPntType.hxx
IntPatch_SpecialPoints.cxx
IntPatch_SpecialPoints.hxx
IntPatch_TheIWLineOfTheIWalking.hxx
IntPatch_TheIWLineOfTheIWalking_0.cxx
IntPatch_TheIWalking.hxx
IntPatch_TheIWalking_0.cxx
IntPatch_ThePathPointOfTheSOnBounds.hxx
IntPatch_ThePathPointOfTheSOnBounds_0.cxx
IntPatch_TheSOnBounds.hxx
IntPatch_TheSOnBounds_0.cxx
IntPatch_TheSearchInside.hxx
IntPatch_TheSearchInside_0.cxx
IntPatch_TheSegmentOfTheSOnBounds.hxx
IntPatch_TheSegmentOfTheSOnBounds_0.cxx
IntPatch_TheSurfFunction.hxx
IntPatch_TheSurfFunction_0.cxx
IntPatch_WLine.cxx
IntPatch_WLine.hxx
IntPatch_WLine.lxx
IntPatch_WLineTool.cxx
IntPatch_WLineTool.hxx