0032404: Draw - problems with definition of cpulimit in tests - The maximum value of cpulimit in test cases was limited to 1000 seconds (~ 17 minutes) - cpulimit 1000 has been added to hlr/begin

- [DBH] tests/boolean/bcut_complex/M2
- [DBH] tests/boolean/bcut_complex/P6
- [DBH] tests/boolean/bopcommon_complex/C5
- [DBH] tests/boolean/bopcommon_complex/C6
- [DBH] tests/boolean/bopcommon_complex/C9
- [DBH] tests/boolean/bopcommon_complex/D1
- [DBH] tests/boolean/bopcommon_complex/D4
- [DBH] tests/boolean/bopcommon_complex/D5
- [DBH] tests/boolean/bopcommon_complex/D8
- [DBH] tests/boolean/bopcommon_complex/D9
- [DBH] tests/boolean/bopcut_complex/C7
- [DBH] tests/boolean/bopcut_complex/C8
- [DBH] tests/boolean/bopcut_complex/D2
- [DBH] tests/boolean/bopcut_complex/D3
- [DBH] tests/boolean/bopcut_complex/D6
- [DBH] tests/boolean/bopcut_complex/D7
- [DBH] tests/boolean/bopcut_complex/E2
- [DBH] tests/boolean/bopfuse_complex/C3
- [DBH] tests/boolean/bopfuse_complex/C4
- [DBH] tests/boolean/bopfuse_complex/C5
- [DBH] tests/boolean/bopfuse_complex/C6
- [DBH] tests/boolean/bopfuse_complex/C7
- [DBH] tests/boolean/bopfuse_complex/C8
- [DBH] tests/boolean/boptuc_complex/A1
- [DBH] tests/boolean/boptuc_complex/A2
- [DBH] tests/boolean/boptuc_complex/A3
- [DBH] tests/boolean/boptuc_complex/A4
- [DBH] tests/boolean/boptuc_complex/A5
- [DBH] tests/boolean/boptuc_complex/A6
- [DBH] tests/boolean/bsection/M8
- [DBH] tests/boolean/bsection/N4
- [DBH] tests/boolean/bsection/N7

0032140: Modeling Algorithms - unify same domain calls crossed for opposite vectors 1. Correct unification of circular edges: avoid trying to make an axis with null magnitude. 2. New method UnionPCurves: unify existing pcurves of chain instead of projecting the curve of unified edge onto surfaces

0031939: Coding - correction of spelling errors in comments [part 7] Fix various typos Fixed via codespell v2.1.dev

- [DBH] tests/boolean/bcut_complex/F2
- [DBH] tests/boolean/bfuse_simple/E5
- [DBH] tests/boolean/bfuse_simple/E6
- [DBH] tests/boolean/bfuse_simple/E7
- [DBH] tests/boolean/bfuse_simple/E8
- [DBH] tests/boolean/bfuse_simple/E9
- [DBH] tests/boolean/bfuse_simple/F1
- [DBH] tests/boolean/bfuse_simple/F2
- [DBH] tests/boolean/bfuse_simple/F3
- [DBH] tests/boolean/bfuse_simple/F4
- [DBH] tests/boolean/bfuse_simple/F5
- [DBH] tests/boolean/bfuse_simple/F6
- [DBH] tests/boolean/bfuse_simple/F7
- [DBH] tests/boolean/bfuse_simple/F8
- [DBH] tests/boolean/bfuse_simple/F9
- [DBH] tests/boolean/bfuse_simple/G1
- [DBH] tests/boolean/bfuse_simple/G2
- [DBH] tests/boolean/bfuse_simple/G3
- [DBH] tests/boolean/bfuse_simple/G4
- [DBH] tests/boolean/bfuse_simple/G5
- [DBH] tests/boolean/bfuse_simple/G6
- [DBH] tests/boolean/bfuse_simple/G7
- [DBH] tests/boolean/bfuse_simple/G8
- [DBH] tests/boolean/bfuse_simple/G9
- [DBH] tests/boolean/bfuse_simple/H1
- [DBH] tests/boolean/bfuse_simple/H2
- [DBH] tests/boolean/bfuse_simple/H3
- [DBH] tests/boolean/bfuse_simple/H4
- [DBH] tests/boolean/bfuse_simple/H5
- [DBH] tests/boolean/bfuse_simple/H6
- [DBH] tests/boolean/bfuse_simple/H7
- [DBH] tests/boolean/bfuse_simple/H8
- [DBH] tests/boolean/bfuse_simple/H9
- [DBH] tests/boolean/bfuse_simple/I1
- [DBH] tests/boolean/bfuse_simple/I2
- [DBH] tests/boolean/bfuse_simple/I3
- [DBH] tests/boolean/bfuse_simple/I4
- [DBH] tests/boolean/bfuse_simple/I5
- [DBH] tests/boolean/bfuse_simple/I6
- [DBH] tests/boolean/bfuse_simple/I7
- [DBH] tests/boolean/bfuse_simple/I8
- [DBH] tests/boolean/bfuse_simple/I9
- [DBH] tests/boolean/bfuse_simple/J1
- [DBH] tests/boolean/bfuse_simple/J2
- [DBH] tests/boolean/bfuse_simple/J3
- [DBH] tests/boolean/bfuse_simple/J4
- [DBH] tests/boolean/bfuse_simple/J5
- [DBH] tests/boolean/bfuse_simple/J6
- [DBH] tests/boolean/bfuse_simple/J7
- [DBH] tests/boolean/bfuse_simple/J8

0024789: BOPAlgo_Builder produces invalid result on planar, conical and spherical surfaces BOPAlgo_PaveFiller::MakeBlocks() - Improve Face/Face post treatment procedure by: * Adding more existing edge for intersection with section edges to resolve all possible intersections. * Using tree for edges selection. * Avoiding intersection of the existing edges among themselves. IntPatch_ImpImpIntersection::CyCyNoGeometric - add more points to wline to make it more smooth.

0029692: Add functionality to make the group of touching same-dimensional shapes connected Implementation of the new class *BOPAlgo_MakeConnected* for making the group of touching same-dimensional shapes connected. Provide the material association for the first sub-elements of the input shapes. Provide possibility to make the connected shape periodic. Draw commands for new algorithm: * makeconnected - make the input shapes connected or glued, performs material associations; * cmaterialson - returns the materials located on the requested side of a shape; * cmakeperiodic - makes the connected shape periodic in requested directions; * crepeatshape - repeats the periodic connected shape in requested directions requested number of times; * cperiodictwins - returns all periodic twins for the shape; * cclearrepetitions - clears all previous repetitions of the periodic shape, keeping the shape periodic. Documentation & test cases for the new algorithm.

0029683: Add functionality to make the TopoDS_Shape periodic in 3D space Implementation of the new class *BOPAlgo_MakePeriodic* for making the shape periodic in 3D space. Periodicity of the shape means that the shape can be repeated in any periodic direction any number of times without creation of the new geometry or splits. The idea of this algorithm is to make the shape look similarly on the opposite sides or on the period bounds of periodic directions. It does not mean that the opposite sides of the shape will be mirrored. It just means the the opposite sides of the shape should be split by each other and obtain the same geometry on opposite sides. Such approach will allow repeating the shape, i.e. translating the copy of a shape on the period, without creation of new geometry because there will be no coinciding parts of different dimension. Draw commands for the new algorithm: * makeperiodic - makes the shape periodic in required directions; * repeatshape - repeats the periodic shape in requested periodic direction; * periodictwins - returns the periodic twins for the shape; * clearrepetitions - clears all previous repetitions of the periodic shape. Documentation & test cases for the algorithm.

0030174: ShapeUpgrade_UnifySameDomain does not unify cylindrical faces Hotfix for issue 27271 (avoiding potential seam edges) is deleted. Correction of test case

- [DBH] tests/boolean/removefeatures/A1
- [DBH] tests/boolean/removefeatures/A2
- [DBH] tests/boolean/removefeatures/A3
- [DBH] tests/boolean/removefeatures/A4
- [DBH] tests/boolean/removefeatures/A5
- [DBH] tests/boolean/removefeatures/A6
- [DBH] tests/boolean/removefeatures/A8
- [DBH] tests/boolean/removefeatures/B1
- [DBH] tests/boolean/removefeatures/B2
- [DBH] tests/boolean/removefeatures/B3
- [DBH] tests/boolean/removefeatures/B4
- [DBH] tests/boolean/removefeatures/B5
- [DBH] tests/boolean/removefeatures/B8
- [DBH] tests/boolean/removefeatures/B9
- [DBH] tests/boolean/removefeatures/F1
- [DBH] tests/boolean/removefeatures/F2
- [DBH] tests/boolean/removefeatures/F3
- [DBH] tests/boolean/removefeatures/F4
- [DBH] tests/boolean/removefeatures/G3
- [DBH] tests/boolean/removefeatures/G4
- [DBH] tests/boolean/simplify/A3

0030145: Modeling Algorithms - Boolean Operations on open solids Provide possibility to perform Boolean operations on open solids. Implementation of the new method *BOPAlgo_Builder::BuildBOP* performing the construction of the result shape for the given type of Boolean operation. This approach does not rely on the splits of solid to be correct and looks for the faces with necessary state relatively opposite solids to build the result solid. The call to this method is performed from BOP algorithm in case there were open solids in the arguments. Implementation of the draw command *buildbop* performing a call to the method above.

- [DBH] tests/boolean/bcut_complex/O3
- [DBH] tests/boolean/bcut_complex/O4
- [DBH] tests/boolean/bcut_complex/O5
- [DBH] tests/boolean/bcut_complex/O6
- [DBH] tests/boolean/bfuse_complex/O5
- [DBH] tests/boolean/grids.list
- [DBH] tests/boolean/opensolid/A1
- [DBH] tests/boolean/opensolid/A2
- [DBH] tests/boolean/opensolid/A3
- [DBH] tests/boolean/opensolid/A4
- [DBH] tests/boolean/opensolid/A5
- [DBH] tests/boolean/opensolid/A6
- [DBH] tests/boolean/opensolid/A7
- [DBH] tests/boolean/opensolid/A8
- [DBH] tests/boolean/opensolid/A9

0030094: Modeling Algorithms - Defeaturing does not work on the attached shape due to incorrect extension of the torus BRepLib::ExtendFace method when working with analytical and periodic faces now takes into account the possible closeness of the result face. Test cases for the issue.

0029711: General Fuse operation produces invalid result The following improvements have been introduced in Boolean Operations algorithm s: 1. UBTree is replaced with EBTree in Boolean operations to be able to add/remove elements into the tree of bounding boxes. 2. Repeated (nested) intersection of sub-shapes is performed with argument vertices whose tolerances increased during the operation. 3. The algorithms of Edge/Edge and Edge/Face intersection have been improved for the cases when the intersection point is located close to the edge boundaries . 4. New procedure has been implemented to ensure forced creation of Edge/Face common blocks in cases when the edge is really close to the face. 5. Post-processing of Face/Face intersection results has been improved. 6. Extension of the planar faces for Plane/Plane intersection is avoided. 7. Builder Face now better classifies potentially internal edges relatively to new faces with filtering by bounding boxes. Side effect changes: 1. IntTools_ShrunkRange now keeps the length of the valid range of the edge. 2. The method BOPDS_DS::UpdateEdgeTolerance() has been removed as unused (replaced by the BOPAlgo_PaveFiller::UpdateEdgeTolerance()). Test case for the issue 0029900. Test case for the issue 0029711. Adjustments of the existing test cases. Avoid using uninitialized variables.

0029807: [Regression to 7.0.0] Impossible to cut cone from prism The algorithm has been improved for the cases when the intersection line goes through the cone apex. <!break> 1. All special points are put to the ALine forcefully (if they are true intersection point). Currently this step has not been implemented yet. 2. Now the tolerance of IntPatch_Point (put into ALine) is computed in order to cover the distance between it and the correspond ALine. 3. Test cases have been created. 4. Procedure of trimming IntAna_Curve has been improved. 5. Criterion when the discriminant of IntAna_Curve can be considered to be equal to 0 has been improved. 6. Methods IntAna_Curve::FindParameter(...) (and IntPatch_ALine::FindParameter(...)) currently returns list of all parameters corresponding the given point (IntAna_Curve can be self-interfered curve). Before the fix, this method always returned only one (randomly chosen) parameter. 7. Interfaces of the following methods have been changed: IntAna_Curve::FindParameter(...), IntPatch_ALine::FindParameter(...), IntPatch_ALine::ChangeVertex(...), IntPatch_SpecialPoints::AddPointOnUorVIso(...), IntPatch_SpecialPoints::AddSingularPole(...), IntPatch_WLineTool::ExtendTwoWLines(). 8. Following methods have been added: IntAna_Quadric::SpecialPoints(...), IntPatch_ALineToWLine::GetSectionRadius(...), IntPatch_SpecialPoints::ProcessSphere(...), IntPatch_SpecialPoints::ProcessCone(...), IntPatch_SpecialPoints::GetTangentToIntLineForCone(...). ------------------ 1) tests/boolean/volumemaker/C5 tests/boolean/volumemaker/C6 tests/boolean/volumemaker/E7 They are real IMPROVEMENTS. In the FIX (in compare with MASTER), section result between pairs of faces f2&f6 (C5), f3&f7 (C6) and f1&f5 (E7) is closed. Separated test cases have been created in order to focus on the problem with section. Bug #28503 has been fixed. Correction in test cases.

0028747: Incorrect result of the section operation after edge refinement Implementation of the method for simplification of the result of Boolean Operation on the API level. The method BRepAlgoAPI_BuilderAlgo::SimplifyResult has been added, so the derived classes such as BooleanOpeation and Splitter can also use this method. The result shape simplification should be called after the operation is done. The simplification is performed by the means of ShapeUpgrade_UnifySameDomain algorithm. Draw command "bsimplify" has been added to control the simplification options. Documentation for new functionality and draw commands controlling the options of Boolean operations. Test cases for the new functionality. Side-effect change: The algorithms in Boolean component have been changed to use the BRepTools_History as a History tool. Now it became possible to disable the collection of shapes modifications during Boolean Operations, which may be useful for performance sake (in draw the option is controlled by *setfillhistory* command). Draw command "unifysamedom" has been changed to accept the angular tolerance in degrees instead of radians.

0029604: Uniform mechanism providing History of shape's modifications for OCCT algorithms in DRAW Implementation of the mechanism for unification of the history commands for all OCCT algorithms. The following Draw commands should be used to track the history of shapes modifications of any operation: - modified - to find the shapes modified from the given shape in the given history. - generated - to find the shapes generated from the given shape in the given history. - isdeleted - to check if the given shape has been deleted during operation. The mechanism allows fast & easy enabling of the DRAW history support for the algorithms supporting the history on the API level (i.e. the algorithm should have the methods Modified(), Generated() and IsDeleted()). To enable the draw history support it is necessary to store the history of the algorithm into the session. For instance: TopTools_ListOfShape Objects = ...; // Objects TopTools_ListOfShape Tools = ...; // Tools BRepAlgoAPI_Cut aCut(Objects, Tools); // Boolean cut operation BRepTest_Objects::SetHistory(Objects, aCut); // Store the history for the Objects (overwrites the history in the session) BRepTest_Objects::AddHistory(Tools, aCut); // Add the history for the Tools To get the stored history in draw the command "savehistory" should be used. It saves the history kept in session into a Drawable object with the given name: # perform cut bcut r s1 s2 # save history of cut savehistory cut_history explode s1 f modified m cut_history s1_1 The Draw History commands of the following algorithms have been removed: - Boolean Operations; - Defeaturing; - Unify same domain; - Sweep; - Thrusections; All these algorithms have been switched to support the new Draw history mechanism. The Fillet and Blend algorithms have been also enabled to support history commands.

- [DBH] tests/boolean/history/A1
- [DBH] tests/boolean/history/A2
- [DBH] tests/boolean/history/A3
- [DBH] tests/boolean/history/A4
- [DBH] tests/boolean/history/A5
- [DBH] tests/boolean/history/A6
- [DBH] tests/boolean/history/A7
- [DBH] tests/boolean/history/A8
- [DBH] tests/boolean/removefeatures/A6
- [DBH] tests/boolean/removefeatures/A7
- [DBH] tests/boolean/removefeatures/B1
- [DBH] tests/boolean/removefeatures/B2
- [DBH] tests/boolean/removefeatures/B3
- [DBH] tests/boolean/removefeatures/B4
- [DBH] tests/boolean/removefeatures/B5
- [DBH] tests/boolean/removefeatures/B7
- [DBH] tests/boolean/removefeatures/B8
- [DBH] tests/boolean/removefeatures/B9
- [DBH] tests/boolean/removefeatures/C1
- [DBH] tests/boolean/removefeatures/C3
- [DBH] tests/boolean/removefeatures/C4
- [DBH] tests/boolean/removefeatures/C5
- [DBH] tests/boolean/removefeatures/E1
- [DBH] tests/boolean/removefeatures/G1
- [DBH] tests/boolean/removefeatures/begin

0029646: Boolean Operations algorithm produces a face with self-intersecting wire Boolean operations - Allow repeated intersection of edges to find the coinciding pairs. Previously, only the edges rejected by bounding boxes classification has been additionally checked on coincidence. The current patch removes this filter allowing all edges with coinciding vertices to be checked on coincidence. Adjustment of the test cases for current behavior: 1. The following cases are improvements: boolean volumemaker A8 bugs modalg_1 buc60703_1 bugs modalg_1 buc60703_2 bugs modalg_1 buc60703_4 bugs modalg_6 bug26789_1 bugs modalg_6 bug26789_2 bugs modalg_7 bug26883_4 bugs modalg_7 bug27948 2. bugs modalg_7 bug29580_1 is modified to extend the validity checks.

0028097: Test system does not recognize 'fail...' messages as errors Test parse rules are improved to recognize messages with word 'fail' or 'failure' as errors. Test cases are corrected accordingly (TODO or REQUIRED statements added where fail messages were not noticed previously).

0029580: Regression: invalid result of BOP Fuse Boolean Operation - avoid creation of INTERNAL solid from unclassified faces in Solid Builder algorithm. Instead warn the user that some of the faces have been unclassified and not used for solids creation. Adjustment of the test cases. Test cases for the issue.

0029481: Implementation of the Feature Removal algorithm Implementation of the 3D model De-featuring algorithm intended for the removal of the unwanted parts (or features) from the model consisting of solids. The features can be the holes, protrusions, gaps, chamfers, fillets etc. The algorithm removes all possible requested features from the shape and builds the new shape as a result. The input model is not modified. On the API level the algorithm is implemented in the class *BRepAlgoAPI_Defeaturing*. The actual features removal is performed by the low-level algorithm *BOPAlgo_RemoveFeatures*. Documentation of the new classes. Implementation of the DRAW commands for working with new algorithm. Test cases for the new functionality. Changes in other algorithms used by De-featuring algorithm: - Provide history support for the solids in *ShapeUpgrade_UnifySameDomain* algorithm; - Implementation of the mechanism to merge History of any Algorithm with standard history methods such as IsDeleted(), Modified() and Generated() into *BRepTools_History*.

- [DBH] tests/boolean/grids.list
- [DBH] tests/boolean/removefeatures/A1
- [DBH] tests/boolean/removefeatures/A2
- [DBH] tests/boolean/removefeatures/A3
- [DBH] tests/boolean/removefeatures/A4
- [DBH] tests/boolean/removefeatures/A5
- [DBH] tests/boolean/removefeatures/A6
- [DBH] tests/boolean/removefeatures/A7
- [DBH] tests/boolean/removefeatures/A8
- [DBH] tests/boolean/removefeatures/A9
- [DBH] tests/boolean/removefeatures/B1
- [DBH] tests/boolean/removefeatures/B2
- [DBH] tests/boolean/removefeatures/B3
- [DBH] tests/boolean/removefeatures/B4
- [DBH] tests/boolean/removefeatures/B5
- [DBH] tests/boolean/removefeatures/B6
- [DBH] tests/boolean/removefeatures/B7
- [DBH] tests/boolean/removefeatures/B8
- [DBH] tests/boolean/removefeatures/B9
- [DBH] tests/boolean/removefeatures/C1
- [DBH] tests/boolean/removefeatures/C2
- [DBH] tests/boolean/removefeatures/C3
- [DBH] tests/boolean/removefeatures/C4
- [DBH] tests/boolean/removefeatures/C5
- [DBH] tests/boolean/removefeatures/C6
- [DBH] tests/boolean/removefeatures/C7
- [DBH] tests/boolean/removefeatures/C8
- [DBH] tests/boolean/removefeatures/C9
- [DBH] tests/boolean/removefeatures/D1
- [DBH] tests/boolean/removefeatures/D2
- [DBH] tests/boolean/removefeatures/D3
- [DBH] tests/boolean/removefeatures/D4
- [DBH] tests/boolean/removefeatures/D5
- [DBH] tests/boolean/removefeatures/D6
- [DBH] tests/boolean/removefeatures/D7
- [DBH] tests/boolean/removefeatures/D8
- [DBH] tests/boolean/removefeatures/D9
- [DBH] tests/boolean/removefeatures/E1
- [DBH] tests/boolean/removefeatures/E2
- [DBH] tests/boolean/removefeatures/E3
- [DBH] tests/boolean/removefeatures/E4
- [DBH] tests/boolean/removefeatures/E5
- [DBH] tests/boolean/removefeatures/E6
- [DBH] tests/boolean/removefeatures/E7
- [DBH] tests/boolean/removefeatures/E8
- [DBH] tests/boolean/removefeatures/E9
- [DBH] tests/boolean/removefeatures/F1
- [DBH] tests/boolean/removefeatures/F2
- [DBH] tests/boolean/removefeatures/F3
- [DBH] tests/boolean/removefeatures/F4
- [DBH] tests/boolean/removefeatures/F5
- [DBH] tests/boolean/removefeatures/F6
- [DBH] tests/boolean/removefeatures/F7
- [DBH] tests/boolean/removefeatures/F8
- [DBH] tests/boolean/removefeatures/F9
- [DBH] tests/boolean/removefeatures/G1
- [DBH] tests/boolean/removefeatures/G2
- [DBH] tests/boolean/removefeatures/begin

0029363: No history for shapes which were produced as a result of intersection 1. Implementation of the *Generated* method for the algorithms in Boolean Component. In terms of these algorithms the shape from the arguments can have Generated shapes only if these new shapes have been obtained as a result of pure intersection (not overlapping) of this shape with any other shapes from arguments. Thus, the Generated shapes are always: * VERTICES created from the intersection points and may be Generated from edges and faces only; * EDGES created from the intersection edges and may be Generated from faces only. So, only EDGES and FACES could have information about Generated shapes. For all other types of shapes the list of Generated shapes will be empty. 2. Optimization and simplification of the Modified and IsDeleted methods based on the correct filling of the BOPAlgo_BuilderShape::myImagesResult map. 3. Provide history of unification of the solids in the CellsBuilder algorithm. 4. Update of the documentation of Boolean Operations User guide with new chapter "History Information" describing rules for filling history for operations in Boolean Component. 5. Test cases for the issue. New grid "history" has been added into "boolean" category.

0029359: Approximation algorithm computes multidimensional distance in Euclidean space incorrectly Wrong distance computation has been corrected. Some test-cases have been corrected according to their new behavior. Namely, built (by approximation algorithm) curve(s) has changed its geometrical position. 1. tests/blend/simple/X4 It is not a regression because the result is not correct on both MASTER and FIX (see explanation in the issue #26740). This problem is expected to be solved after porting Fillet-algorithm to new Boolean operation. Old Boolean operations do not cover Edge-Edge tangent-zone by vertex. 2. tests/bugs/modalg_6/bug27341_318 "checknbshapes" has been deleted in order to avoid non-stable behavior (see issue #29360) of this test case. New result is OK on both Linux and Windows platform.