The following improvement has been implemented in BRepLib_MakeWire class to make it more reliable:
1. Quit adding edges of a wire into result if the current edges have not been added. Return NotDone status.
Test case for the issue.
Using of input tolerance has been eliminated in Geom2dInt_GInter algorithm called from BRepClass_Intersector::Perform(...) method. Now, the input tolerance is used only for check ON-status of classification.
(cherry picked from commit 748c9dc6ae0d6018018fca585b6d8cf511c0dd0b)
Correct the method PerformCurve of GCPnts_QuasiUniformDeflection to get the proper derivative at the end of the current curve.
Improve the Draw commands "crvpoints" and "crvtpoints" so that to work with wires as composite curves.
Improve the algorithm BRepPrimAPI_MakeHalfSpace. Earlier it made projection of the point only on faces. If the nearest point does not conform to normal projection criterion the result is wrong. The fix includes search of projection on edges and vertices. This makes the algorithm robust for half spaces with boundaries.
The static method CorrectSurfaceBoundaries() in the class IntTools_FaceFace,
which is used for correction of the boundaries of the faces before their intersection,
contains two inconsistent adjustments of the boundaries of the faces based on periodic surfaces.
One of these adjustments has been removed. The remaining adjustment, the one that is based on the
2D bounding boxes of the closed curves, should be sufficient.
Test case for the issue.
(cherry picked from commit 7cb2f40993)
1. The reason of exception has been eliminated.
2. Algorithm in IntPatch_WLineTool::JoinWLines(...) method has been modified in order to forbid join curves in the point where more than two intersection lines meet. More over, joining is forbidden if local curvature in the connection point is too big (see function CheckArgumentsToJoin(...) in the file IntPatch_WLineTool.cxx).
3. Interface of IntPatch_WLineTool::JoinWLines(...) method has been modified in order to reduce number of arguments.
4. Small corrections in IsSeamOrBound(...) static function has been made. Namely, check has been added if two boundaries are in the same period region but are too far each to other (see IntPatch_WLineTool.cxx, IsSeamOrBound(...) function, line # 532).
5. "Reversed" flag has been made local. Now, it is pure local characteristic: the algorithm decides itself, shall we reverse the argument order. This correction makes the algorithm more commutative (see issue #25404). However, IntPatch_WLineTool::JoinWLines(...) method can return non-commutative result.
6. Algorithm of searching small intersection curves has been improved.
7. New methods have been added in Bnd_Range class.
-----------------------------------------
Some test cases have been adjusted according to their new behavior.
1. tests\bugs\modalg_6\bug26310_3
tests\bugs\modalg_6\bug26310_4
tests\bugs\moddata_2\bug235
tests\perf\modalg\bug26310_1
tests\bugs\modalg_5\bug24915
Logic of these cases has been changed. Mover over, additional check has been added in "bug26310_1" test case. Therefore, its performance will be slower than on the current MASTER.
2. tests\bugs\modalg_5\bug25292*
Scripts have been rewritten in order to make it more readable. Logic of these cases has not been changed.
The algorithm in WorkWithBoundaries::BoundaryEstimation(...) did not take into account opposite directions of cylindrical axes (when the angle between them is obtuse). After the fix it does it.
Small correction of test cases for issue CR28009
(cherry picked from commit c9c7286e56)
Method WorkWithBoundaries::BoundaryEstimation(...) has been brought in balance with IsParallel(...) method, which checks if cylinder axes are parallel.
(cherry picked from commit 95f8c6082d)
Sometimes start point of the intersection line is in the surface boundary strictly. I.e. the parameter of this point in the surface can be equal to both 0 or 2*PI equivalently. It is important to chose correct parameter value.
The algorithm of prediction is based on monotonicity property (see CylCylMonotonicity(...) function in IntPatch_ImpImpIntersection_4.gxx). Now, this function is used wrongly. The fix improves this situation.
Small optimization in the code.
Creation of test cases .
The logic of returning value by the method BoundariesComputing() has been corrected.
(cherry picked from commit 79997052f1)
Check, if cylinder axes are parallel is made more carefully.
This check is brought to conformity with check if axes are parallel (see constructor AxeOperator::AxeOperator(...) in IntAna_QuadQuadGeo.cxx file)
Test case for issue CR26884
(cherry picked from commit ce48b00930)
1. Partial porting of the patches for the issues #0026738 and #0028017:
Careful treatment of the SD vertices created on the Face/Face intersection stage.
2. Avoid creation of the small section edges.
3. Test case for the issue.
4. Adjusting test cases for current behavior.
1. The result of Boolean operation on the arguments of collection type, containers WIRE/SHELL/COMPSOLID, is now also a collection.
The result of Boolean operation on arguments of non-collection types is now a compound containing the splits of arguments directly, without its enclosure into containers.
Thus, if there were no containers, such as WIRE/SHELL/COMPSOLID, in the input arguments there will be no such containers in the result of BOP.
2. The containers of type WIRE included into result should now also (as the SHELLs) have coherent orientation of its sub-shapes.
For that the new method has been implemented (BOPTools_AlgoTools::OrientEdgesOnWire(TopoDS_Shape&)) which reorients edges of the given shape for correct ordering.
3. The duplicating containers, i.e. containers with the contents completely included in other containers, are now avoided in the result of BOP.
4. Documentation has been updated.
5. New test cases for the issue.
6. Adjusting test cases to current behavior.
1. Partial porting of the fix for the issue #0026560:
Function to compute subshape max tolerance has been added.
Fixed bounding box expanding at Face/Face step of boolean operation.
2. New test cases are created.
The fix forces creation of new sub-shapes (vertex, edge) when the tolerance of some sub-shape of an argument is to be increased.
This new behavior is turned off by default. It can be turned on using two ways:
1) Setting 'locking' flag of the arguments.
2) Calling the method SetNonDestructive(Standard_True) of the API classes.
Lipchitz constant approximation and fixes in global optimization algorithm added to improve performance.
Test case added.
Fix backporting:
0026593: Coding rules - revert compatibility of NCollection_CellFilter constructor with old code
Restored old constructor and old behavior where possible.
Minor correction.
0026395: Merge clasees NCollection_CellFilter_NDim and NCollection_CellFilter
Deleted exceed class CellFilterNDim.
Now dimension count used as input parameter in NCollection_CellFilter.
minor corrections.
BRepMesh_CircleTool: extend radius of circle by quite small value in order to classify points forming inscribed triangle as lying on it. Do not use PConfusion due to false positive result leading algorithm to hanging.
Extrema Curve / Surface algorithm changed to perform more accurate search.
test case bug25232_8 - improvement, one additional intersection point is detected now.
test case bug23830 - normal behavior, position of extrema is changed.
Small correction of pro19653 test
test case for original issue added.
1. Check face location has been added.
2. Message, if mkplane command fails, has been added.
3. Test case for this issue has been created.
Changes in accordance with the remark.
Small correction of test case for issue CR26687
Improved periodicity handling when trimmed parameters became unclosed or nonperiodic, but underlying geometry closed or periodic.
Added possibility to not perform trim in GeomAdaptor::MakeSurface.
Minor corrections.
Test-case for issue #26196
Algorithm of computation of safe shift value along 2D-line (in order to distance between two points was less than tolerance) has been improved.
Correction of some test cases in accordance with their new behavior.
Take basis surface from trimmed surfaces during IGES writing, because pcurves will be transformed, so trim will be shifted, accorded to new face bounds,
fix updating of seam edge,
change condition of using Segment during exporting periodic BSpline surfaces to IGES (if bounds are not in one period).
Test cases for issue CR26419
Add some workaround to read IGES files with lines, which lengths are less than standard 80.
Test case for issue CR26573
Correction of test cases for issue CR26573
Correction of test case for issue CR26573
Modification to support case when edges on face have incorrect orientation was added.
Modification to support case when wires have intersecting segment was added
Test cases for issue 25553 added; other affected tests corrected (improvements)
Corrected test case