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.

0029322: Unify faces classification procedures in Boolean Operations 1. Unify the faces classification procedure of the methods BOPAlgo_BuilderSolid::PerformInternalShapes() and BOPAlgo_Builder::FillIn3DParts() using the latter as a base. The new method BOPAlgo_Tools::ClassifyFaces() has been created for that. Both methods mentioned above have been updated to use the new one. 2. Forced intersection of the edges after enlarge of the tolerance values of their vertices during the operation has been added into BOP's intersection algorithm (BOPAlgo_PaveFiller). BOPAlgo_Tools::PerformCommonBlocks() method has been updated to avoid loosing faces of the already created Common blocks. As a result the case "boolean gdml_private ZF6" became more stable, because the intermediate result is no longer invalid. Additional test cases have been added to verify this improvement (bugs modalg_7 bug29322_*) 3. When building PCurves for edges on faces, check the existing PCurves on its validity for periodic surfaces and adjust PCurves if necessary. The improvement helps to produce the valid result in the test case "bugs moddata_1 bug152". 4. Avoid creation of empty Edge-Edge interference if the intersection point is lying close to a shared vertex. The improvement helps obtain the valid result of the "bopcheck" operation in the test case "bugs modalg_7 bug27683". Adjustment of the test case to current behavior: - Avoid usage of the self-intersecting torus in the test case "boolean gdml_public A9". - Fix the input shape in the test case "boolean bopfuse_complex H1" to provide valid result. - Test cases "bugs moddata_1 bug152_1 bug152_2" have been unified into single test case "bugs moddata_1 bug152". Now, the case rebuilds invalid input data and performs all types of Boolean operations. - Change the test case "bugs modalg_7 bug22750" to produce valid intermediate results used in subsequent operations as arguments. - The following test cases are improvements: - "boolean volumemaker D8" - "boolean volumemaker G1" - "bugs modalg_7 bug27683"

0029301: Improve performance of Boolean Operations Improve performance of Boolean operations algorithm by: - Improving the check of Same Domain faces (BOPAlgo_Builder::FillSameDomainFaces()); - Faster rejection of outer faces for solids using Bounding Box classification first (BOPAlgo_Builder::FillIn3DParts()); - Using IncAllocator for local containers. Quality improvement has been made in BOPAlgo_PaveFiller class: 1. Method IsExistingPaveBlock() has been corrected to provide the correct edge tolerance and to obtain valid intermediate results in the test case "boolean gdml_private ZH3". New test case have been added to verify this improvement (bugs modalg_7 bug29301). 2. Method PutClosingPaveOnCurve() has been corrected to use the tolerance of the pave put on the bound for checking curve on closeness. Additional check for the curve to have valid range after addition of the pave on the other end has been added to prevent considering the small curves (covered by vertex tolerance) as closed ones. As a result of this modification the test case boolean gdml_public B2 has been fixed (TODO removed). Adjustment of the test cases to current behavior: - boolean bopcommon_complex J1 - the produced result was incorrect as it was self-interfered. There should be no common in this case. - offset shape_type_i_c ZZ1 - the incorrect result is now produced instead of null shape.

0029133: Unstable test cases Adding new and early removed for some reasons test cases Removing TODO ? Adding necessary TODO ? on corresponding platforms for OK and BAD cases

- [DBH] tests/boolean/bopfuse_simple/ZP6
- [DBH] tests/boolean/gdml_private/B5
- [DBH] tests/boolean/gdml_private/K8
- [DBH] tests/boolean/gdml_private/L3
- [DBH] tests/boolean/gdml_private/L5
- [DBH] tests/boolean/gdml_private/L6
- [DBH] tests/boolean/gdml_private/L7
- [DBH] tests/boolean/gdml_private/L9
- [DBH] tests/boolean/gdml_private/P7
- [DBH] tests/boolean/gdml_private/P9
- [DBH] tests/boolean/gdml_private/ZI5
- [DBH] tests/boolean/gdml_private/bug27052_ZI5
- [DBH] tests/boolean/volumemaker/A8
- [DBH] tests/boolean/volumemaker/B8
- [DBH] tests/boolean/volumemaker/C1
- [DBH] tests/boolean/volumemaker/D6
- [DBH] tests/boolean/volumemaker/D8
- [DBH] tests/boolean/volumemaker/D9
- [DBH] tests/boolean/volumemaker/E4
- [DBH] tests/boolean/volumemaker/E5

0029237: Improve performance of Boolean Operations In order to improve performance of Boolean Operations on the relatively fast cases the following improvements have been made: 1. Initialization of the FaceInfo information for the faces participating in Face/Face interference, even when the gluing is ON, to take into account intersection of their sub-shapes. 2. Code simplification & duplication removal - the methods BOPAlgo_ShellSplitter::MakeConnexityBlocks and BOPAlgo_WireSplitter::MakeConnexityBlocks have been unified into BOPTools_AlgoTools::MakeConnexityBlocks. 3. Avoid unnecessary bounding box computation for solids during DS initialization. The bounding boxes for solids will be computed during the building stage to find faces located inside solids. For the shape self-interference check (performed by the BOPAlgo_CheckerSI), the bounding box is still computed, as it is necessary to resolve Shape/Solid intersections. 4. Use only three sample points to check coincidence of line and plane. 5. Perform necessity of planes intersection only when the gluing is off. 6. Avoid repeated initialization of 2D classifier while building splits of the faces. 7. Post treat stage: 7.1. Method CorrectWires: Save edge's data (PCurve, parameter of the vertex, range) to avoid its recalculation. 7.2. Method CheckEdge: While checking vertices on edges avoid unnecessary calculation of their location. 8. Provide possibility to disable the classification of the input solids on the inverted status (to be the holes in the space). 9. Avoid building of bounding boxes for faces/solids during splitting of the input arguments for their classification relatively hole faces/shells if there are no holes created. 10. Avoid rebuilding of the faces/solids from arguments which does not acquire any inside parts from other arguments during the operation by using their draft versions as their splits. Test cases for the issue. Correction of the test cases boolean gdml_public A9 and bugs modalg_7 bug28485 as they are improvements. Additional test case for the issue #28485 as it is fixed by the current changes.

0028245: Result of Cells Builder algorithm becomes invalid after removal of internal boundaries on faces When removing internal boundaries between faces of the same material do it once for the whole shape, and at this keep boundaries between areas with different material.