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.

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.

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*.

0028599: Replacement of old Boolean operations with new ones in BRepProj_Projection algorithm The usage of *BRepAlgo_Section* has been replaced with the usage of *BRepAlgoAPI_Section* in *BRepProj_Projection* algorithm. The TODO statements have been removed from the failing test case in the "prj" grid as they are working correctly now. The following changes have been made to improve the performance *BRepAlgoAPI_Section*: 1. Revision of the *IntPolyh_Intersection* class to avoid repeated calculation of the deflection of the same triangulation. 2. Small revision of the Edge/Face intersection algorithm to perform Extrema computation on the whole intersection range of the edge instead of discrete ranges. 3. Implementation of the extrema computation for the Circle and Sphere. 4. Correct computation of the parameter of the point on the Circle.

0028786: Refactoring of the Warning/Error reporting system of Boolean Operations Algorithm 0. Basic tools for defining classes representing alerts (errors, warnings etc.) and collecting them during execution of algorithms are added in Message package. 1. Refactoring of the Error/Warning reporting system of the algorithms in Boolean Component. To dump the description of the Error/Warning status of the algorithm the DumpErrors/DumpWarnings method should be called. Also, the methods GerErrorMsg(int Error) and GetWarningMsg(int Warning) have been implemented to get the description for the given Error/Warning. All Error/Warning statuses are now listed in the enumeration ErrorStatusEnum/WarningStatusEnum of the algorithm. It is also possible to get the shapes for which the warning has been set by using the method GetWarningShapes(). 2. The new class BOPAlgo_Options has been created to unify the options of the BOPAlgo_* and BRepAlgoAPI* algorithms. 3. The new checks across the algorithms have been added to detect and report errors and warnings. 4. Test cases boolean bopcut_complex B9 E1 E5 E8 boolean bopfuse_complex B4 B5 C9 D1 D4 D5 D6 D7 have been rewritten to use Cells Builder algorithm instead of Boolean Operations algorithm, because latter always returns error "Unsupported Boolean operation" for these cases. 5. New chapter has been added in the user guide for Boolean Operations - Error / Warning reporting system. 6. Added comment to NCollection_List::Remove(Iterator&)

0026874: Implementation of the Partition operator in OCCT 1. The partition operation allows splitting an arbitrary number of shapes of an arbitrary dimension by other arbitrary shapes. The algorithm has been implemented in the class BOPAlgo_Splitter. The API operator Splitter has been implemented in the class BRepAlgoAPI_Splitter. 2. The draw commands for usage the new algorithm have been implemented - bsplit and bapisplit. The commands are identical, but one uses the BOPAlgo_Splitter, the other uses BRepAlgoAPI_Splitter. Both commands should be used after Pave Filler is filled. 3. Test cases for the new algorithm. 4. Documentation has been updated. Small corrections.

0028284: Avoid classification of sub-shapes of arguments of BOPs relatively solids during Intersection phase 1. The methods PerformVZ, PerformEZ, PerformFZ and PerformZZ have been transferred from BOPAlgo_PaveFiller to BOPAlgo_CheckerSI class to perform intersection of sub-shapes with solids only in self-intersection mode. 2. The checks for solids built from the same (shared) faces have been added into methods building the result of Boolean operations - BOPAlgo_BOP::BuildRC() and BOPAlgo_BOP::BuildSolid(). 3. Since the NonDestructive mode is now natively supported by the BOPAlgo_PaveFiller the methods providing the support of this mode by CheckerSI (BOPAlgo_CheckerSI::PrepareCopy() and BOPAlgo_CheckerSI::PostTreatCopy()) are not needed and have been removed. 4. The pairs of sub-shapes with interfering bounding boxes are now sorted before real intersection to guarantee the constant order of intersection of sub-shapes and produce more stable result. The class BOPDS_PassKey has been replaced with simpler class BOPDS_Pair. 5. The class BOPDS_SubIterator has been refactored. 6. Test cases for the issue. 7. Adjustment of the test case boolean volumemaker D2.

0027878: Development of the Gluing operations based on the new Boolean component The Gluing operation is an additional option for the algorithms in the Boolean Component such as General Fuse, Boolean operations, Section operation, Maker Volume and Cells Builder algorithms. The Gluing options have been designed to speed up the computation of the interference among arguments of the operations on special cases, in which the arguments may be overlapping but do not have real intersections between their sub-shapes. This option cannot be used on the shapes having real intersections, like intersection vertex between edges, or intersection vertex between edge and a face or intersection line between faces. The Gluing option is an enumeration implemented in BOPAlgo_GlueEnum.hxx. There are following items in the enum: * BOPAlgo_GlueOff - default value for the algorithms, Gluing is switched off; * BOPAlgo_GlueShift - Glue option for shapes with partial coincidence; * BOPAlgo_GlueFull - Glue option for shapes with full coincidence. For setting the Gluing options for the algorithm it is just necessary to call the SetGlue(BOPAlgo_GlueEnum) method with appropriate Glue value. For using this option in DRAW the command bglue has been implemented: * 0 - default value, Gluing is off; * 1 - for partial coincidence; * 2 - for full coincidence Elimination of the warnings.

0027525: Coding - eliminate warnings on Windows for OCCT with static type of libraries Useless *.cxx files were removed to eliminate linker warning LNK4221. Package TopOpeBRepDS was cleaned up from old debugging routines. Merged OSD_signal_WNT.cxx into OSD_signal.cxx Class Standard_ErrorHandlerCallback was moved into the Standard_ErrorHandler class as nested class Callback Eliminated warning about unused variable.

0026619: Tolerances of operands are modified using bop 0026796: The result of General Fuse operation is self-intersecting shape 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. Various bug fixes in the algorithm: - Compute correct tolerance values for intersections of type Line/Line, Line/Plane, Plane/Plane. - In case of Line/Plane intersection check if line's vertices lie on the plane. - Do not allow decreasing of the tolerance value of the Line/Line intersection vertex. - In IntTools_EdgeEdge, call the method FindParameters with proper 3D tolerance of the curve. - Force making copy of a degenerated edge if its vertex is touched but no 2D intersection with other curves is found. - Remove pave blocks both ends of which became referring to the same vertex after vertices substitution. - Avoid exception in IntTools_Context::IsVertexOnLine if Extrema is not done. - Reduce tolerance of vertex/edge using actual distances to interfered shapes if it was increased due to line/line, line/plane, or plane/plane small intersection angle. - Update tolerance of edges to reach all representations in a common block. - In V-E intersections, check if a vertex hits beyond shrunk range, in such case create V-V interference. - Do not put a section edge to the result if it becomes to be a micro edge after updating its vertex. - Correctly make vertices same-domain during the work of MakeBlocks. - Decrease shrunk range at least on a Precision::Confusion() in addition to vertex tolerance. - Add Confusion to bounding boxes of new shapes in DS - Add tolerance Precision::Confusion() to compare distances of touching cases to fix regressions. TODO marks have been removed from (or modified in) the following test cases (Improvements): boolean bsection M3 N2 R2 boolean gdml_private B6 C2 C6 G7 I6 F6 J1 J4 M7 N1 N8 N9 O3 O4 O6 O8 O9 P1 P2 P5 Q1 Q3 Q5 S9 T2 U4 U5 U9 ZB5 ZB6 ZC1 ZC5 ZD3 ZD6 ZD7 ZH2 ZH5 ZI2 ZI5 ZI7 ZI9 ZJ3 ZJ4 ZJ7 F8 I6 G1 boolean volumemaker A5 A6 B3 B4 B7 B9 D3 D4 D7 F1 boolean bopcut_2d D5 bugs modalg_5 bug25043 bugs modalg_2 bug472_1 bug472_2 bug472_3 Test cases updated because they are still bad but can be accepted as non-regression: boolean volumemaker C4 A3 A7 E6 bugs modalg_1 bug10232 boolean bsection N2 Put new TODO in the scripts: bugs modalg_5 bug25232_9 bugs modalg_6 bug26619 bugs modalg_1 buc60462_2 bugs modalg_4 bug772 For the following tests the result in fix became better, so take fix result as the reference: bugs modalg_5 bug24628 bugs modalg_6 bug26954_3 boolean volumemaker A4 B5 B6 C3 C8 D2 D5 F2 bugs modalg_2 bug472_2 bugs modalg_1 buc60776_1 - Add the method SetNonDestructive to API classes of user level

0026798: Boolean operations: keep desired cells and boundaries in the result The algorithm is based on the General Fuse algorithm (GFA). The result of GFA is all split parts of the Arguments. The purpose of this algorithm is to provide the result with the content of: 1. Cells (parts) defined by the user; 2. Internal boundaries defined by the user. In other words the algorithm should provide the possibility for the user to add or remove any part to (from) result and remove any internal boundaries between parts. Requirements for the Data: All the requirements of GFA for the DATA are inherited in this algorithm. Plus all the arguments should have the same dimension. Results: The result of the algorithm is compound containing selected parts of the basic type (VERTEX, EDGE, FACE or SOLID). The default result is empty compound. It is possible to add any split part to the result by using the methods AddToRessult() and AddAllToResult(). It is also possible to remove any part from the result by using methods RemoveFromResult() and RemoveAllFromResult(). The method RemoveAllFromResult() is also suitable for clearing the result. To remove Internal boundaries it is necessary to set the same material to the parts between which the boundaries should be removed and call the method RemoveInternalBoundaries(). The material should not be equal to 0, as this is default material value. The boundaries between parts with this value will not be removed. One part cannot be added with the different materials. It is also possible to remove the boundaries during combining the result. To do this it is necessary to set the material for parts (not equal to 0) and set the flag bUpdate to TRUE. BUT for the arguments of the types FACE or EDGE it is recommended to remove the boundaries in the end when the result is completely built. It will help to avoid self-intersections in the result. It is possible to create typed Containers from the parts added to result by using method MakeContainers(). The type of the containers will depend on the type of the arguments: WIRES for EEDGE, SHELLS for FACES and COMPSOLIDS for SOLIDS. The result will be compound containing containers. Adding of the parts to such result will not update containers. The result compound will contain the containers and new added parts (of basic type). Removing of the parts from such result may affect some containers if the the parts that should be removed is in container. In this case this container will be rebuilt without that part. History: The algorithm supports history information. This information available through the methods IsDeleted() and Modified(). In DRAW Test Harness it is available through the same commands as for Boolean Operations (bmodified and bisdeleted). Examples: 1. API BOPAlgo_CellsBuilder aCBuilder; BOPCol_ListOfShape aLS = ...; // arguments /* parallel or single mode (the default value is FALSE)*/ Standard_Boolean bRunParallel = Standard_False; /* fuzzy option (default value is 0)*/ Standard_Real aTol = 0.0; // aCBuilder.SetArguments(aLS); aCBuilder.SetRunParallel(bRunParallel); aCBuilder.SetFuzzyValue(aTol); // aCBuilder.Perform(); if (aCBuilder.ErrorStatus()) { // check error status return; } /* empty compound, as nothing has been added yet */ const TopoDS_Shape& aRes = aCBuilder.Shape(); /* all split parts */ const TopoDS_Shape& aRes = aCBuilder.GetAllParts(); // BOPCol_ListOfShape aLSToTake = ...; // parts of these arguments will be taken into result BOPCol_ListOfShape aLSToAvoid = ...; // parts of these arguments will not be taken into result // /* defines the material common for the cells, i.e. the boundaries between cells with the same material will be removed. By default it is set to 0. Thus, to remove some boundary the value of this variable should not be equal to 0 */ Standard_Integer iMaterial = ...; /* defines whether to update the result right now or not */ Standard_Boolean bUpdate = ...; // adding to result aCBuilder.AddToResult(aLSToTake, aLSToAvoid, iMaterial, bUpdate); aR = aCBuilder.Shape(); // the result // removing of the boundaries aCBuilder.RemoveInternalBoundaries(); // removing from result aCBuilder.AddAllToResult(); aCBuilder.RemoveFromResult(aLSToTake, aLSToAvoid); aR = aCBuilder.Shape(); // the result 2. DRAW Test Harness psphere s1 15 psphere s2 15 psphere s3 15 ttranslate s1 0 0 10 ttranslate s2 20 0 10 ttranslate s3 10 0 0 bclearobjects; bcleartools baddobjects s1 s2 s3 bfillds # rx will contain all split parts bcbuild rx # add to result the part that is common for all three spheres bcadd res s1 1 s2 1 s3 1 -m 1 # add to result the part that is common only for first and third shperes bcadd res s1 1 s2 0 s3 1 -m 1 # remove internal boundaries bcremoveint res Added history support for Generated shapes (created in ShapeUpgrade_UnifySameDomain). Methods AddToResult and RemoveFromResult have been documented in more details to clarify the procedure of adding and removing parts. Adding external library to use ShapeUpgrade_UnifySameDomain. Test-cases for issue #26798

0025354: Intersection operation I. New features: I.1 class BOPAlgo_Section The class clontains the algorithm to build a result of Secton between the arguments. The result of Section consists of vertices and edges. The result of Section contains: 1. new vertices that are subjects of V/V, E/E, E/F, F/F interferences 2. vertices that are subjects of V/E, V/F interferences 3. new edges that are subjects of F/F interferences 4. edges that are Common Blocks 5.a vertex is included in result of Section only when it is not shared between the edges of the result of Section The class BOPAlgo_Section inherits the functionality of root class BOPAlgo_Builder 1.2 class BOPTest_Objects method: BOPAlgo_Section& BOPTest_Objects::Section() has been added to get access to BOPAlgo_Section object II. Changes: II.1. class BOPAlgo_BOP method: void BOPAlgo_BOP::BuildSection() has been removed methods: void BOPAlgo_BOP::CheckData() void BOPAlgo_BOP::Prepare() void BOPAlgo_BOP::PerformInternal1(const BOPAlgo_PaveFiller& theFiller) const TopTools_ListOfShape& BOPAlgo_BOP::Generated (const TopoDS_Shape& theS) have been modified to eliminate references on Section operation II.2. class BOPAlgo_PaveFiller method: void BOPAlgo_PaveFiller::UpdateFaceInfo (BOPDS_DataMapOfPaveBlockListOfPaveBlock& theDME) modified to prevent the usage of negative index in Data Structure II.3. class BOPTest_Objects static function: Standard_Integer bopsection(Draw_Interpretor& di, Standard_Integer n, const char** a) has been modified to use BOPAlgo_Section object instead of BOPAlgo_BOP object static function: Standard_Integer bbop(Draw_Interpretor& di, Standard_Integer n, const char** a) has been modified to use BOPAlgo_Section object instea of BOPAlgo_BOP object II.4. class BRepAlgoAPI_BooleanOperation field: myBuilder the type has been changed from BOPAlgo_BOP* to BOPAlgo_Builder* method: void BRepAlgoAPI_BooleanOperation::Build() has been modified to use BOPAlgo_Section object II.5. class QANewModTopOpe_Tools method: Standard_Boolean QANewModTopOpe_Tools::HasSameDomain( const BOPAlgo_PBOP& theBuilder, const TopoDS_Shape& theFace) void QANewModTopOpe_Tools::SameDomain( const BOPAlgo_PBOP& theBuilder, const TopoDS_Shape& theFace, TopTools_ListOfShape& theResultList) the type of the parameter <theBuilder> has been modified to use BOPAlgo_Builder* instead of BOPAlgo_BOP* II.6. The method: const TopTools_ListOfShape& BOPAlgo_BOP::Generated (const TopoDS_Shape& theS) has been removed

0025242: Wrong result of cut operation. 1. class BOPDS_Iterator method: void BOPDS_Iterator::Intersect() The ttreatment of solid/* interferences has been added. 2 class BOPAlgo_PaveFiller protected methods: void BOPAlgo_PaveFiller::PerformVZ() void BOPAlgo_PaveFiller::PerformEZ() void BOPAlgo_PaveFiller::PerformFZ() void BOPAlgo_PaveFiller::PerformZZ() has been added. The methods are to Compute Vertex/Solid Edge/Solid Face/Solid Solid/Solid interferences. 3. class BOPAlgo_PaveFiller protected method: void BOPAlgo_PaveFiller::PerformFF() Empty interferences has not been added in the interferences' table 4. class BOPAlgo_CheckerSI protected methods: void BOPAlgo_CheckerSI::PerformVZ() void BOPAlgo_CheckerSI:PerformEZ() void BOPAlgo_CheckerSI::PerformFZ() void BOPAlgo_CheckerSI::PerformZZ() has been removed. 5. class BOPAlgo_BOP protected method: void BOPAlgo_BOP::BuildRC() void BOPAlgo_BOP::BuildSolid() changed to treat non-interferred solids and keep it in the result as they were Test case for issue #25242

0024157: Parallelization of assembly part of BO Patch 06 I.1. class Bnd_Box2d - method: inline Standard_Real Bnd_Box2d::SquareExtent() const has been added. Purpose : The method returns the squared diagonal of the bounding box. I.3. class BOPCol_BoxBndTree has been added. Purpose : The class is the instantiation of the algorithm of unbalanced binary tree of overlapped bounding boxes 3D. I.4. class BOPCol_Box2DBndTree has been added. Purpose : The class is the instantiation of the algorithm of unbalanced binary tree of overlapped bounding boxes 2D. I.5. class BOPAlgo_Algo - method: void BOPAlgo_Algo::SetRunParallel(const Standard_Boolean theFlag) has been added. Purpose: Set the flag of parallel processing if <theFlag> is true the parallel processing is switched on if <theFlag> is false the parallel processing is switched off - method: Standard_Boolean BOPAlgo_Algo::RunParallel()const has been added Purpose: Returns the flag of parallel processing II.1. class BOPAlgo_Builder - method: void BOPAlgo_Builder::SetRunParallel(const Standard_Boolean theFlag) has been removed due to I.5. - method: Standard_Boolean BOPAlgo_Builder::RunParallel()const has been removed due to I.5 II.2. class BOPDS_BoxBndTree has been removed due to I.3 II.3. classes BOPDS_Iterator, BOPDS_IteratorSI, BOPDS_SubIterator BOPAlgo_PaveFiller, BOPAlgo_Builder the calls to BOPDS_BoxBndTree have been changed to the calls to BOPCol_BoxBndTree due to I.3 II.4. class BOPAlgo_BuilderFace - method: void BOPAlgo_BuilderFace::PerformLoops() the changes that provide parallel run the WireSplitter algorithm have been done. - method: void BOPAlgo_BuilderFace::PerformAreas() the classification the grows and holes has been done using the algorithm of unbalanced binary tree of overlapped bounding boxes II.5. class BOPAlgo_WireSplitter - method: void BOPAlgo_WireSplitter::SplitBlock(const TopoDS_Face& myFace, BOPTools_ConnexityBlock& aCB) the method is transferred to the static, the signature of the method have been changed - method: void BOPAlgo_WireSplitter::MakeWires() the changes to provide parallel run the SplitBlock algorithm have been done

0024492: The command bopargcheck produces wrong results for cases. New features: - class BOPDS_InterfVZ has been added. Purpose: The class BOPDS_InterfVZ is is to store the information about the interference of the type vertex/solid. - class BOPDS_InterfEZ has been added. Purpose: The class BOPDS_InterfEZ is is to store the information about the interference of the type edge/solid. - class BOPDS_InterfFZ has been added. Purpose: The class BOPDS_InterfFZ is is to store the information about the interference of the type face/solid. - class BOPDS_InterfFZ has been added. Purpose: The class BOPDS_InterfZZ is is to store the information about the interference of the type solid/solid. - class BOPDS_DS -methods inline BOPDS_VectorOfInterfVZ& BOPDS_DS::InterfVZ() Purpose: Returns the collection of interferences Vertex/Solid inline BOPDS_VectorOfInterfEZ& BOPDS_DS::InterfEZ() Purpose: Returns the collection of interferences Edge/Solid inline BOPDS_VectorOfInterfFZ& BOPDS_DS::InterfFZ() Purpose: Returns the collection of interferences Face/Solid inline BOPDS_VectorOfInterfZZ& BOPDS_DS::InterfZZ() Purpose: Returns the collection of interferences Solid/Solid inline Standard_Integer BOPDS_DS::NbInterfTypes() Purpose: Returns the number of types of the interferences have been added. - class BOPDS_Tools -method inline Standard_Boolean BOPDS_Tools::IsInterfering (const TopAbs_ShapeEnum theT) has been added. Purpose: Returns true if the type <theT> can be participant of an interference - class BOPDS_ShapeInfo -method inline Standard_Boolean BOPDS_ShapeInfo::IsInterfering()const has been added. Purpose: Returns true if the object can be participant of an interference - class BOPDS_ShapeInfo -methods void BOPAlgo_CheckerSI::PerformVZ() Purpose: Computes Vertex/Solid interferences void BOPAlgo_CheckerSI::PerformEZ() Purpose: Computes Edge/Solid interferences void BOPAlgo_CheckerSI::PerformFZ() Purpose: Computes Face/Solid interferences void BOPAlgo_CheckerSI::PerformZZ() Purpose: Computes Solid/Solid interferences have been added Changes: - class BOPDS_DS - method: Standard_Boolean BOPDS_DS::HasInterfShapeSubShapes (const Standard_Integer theI1, const Standard_Integer theI2, const Standard_Boolean theFlag)const has been modified. Purpose: Returns true if the shape with index theI1 is interfered with - at least one sub-shape of the shape with index theI2 (theFlag=true) --all sub-shapes of the shape with index theI2 (theFlag=false) - class BOPDS_Tools - method: inline Standard_Integer BOPDS_Tools::TypeToInteger (const TopAbs_ShapeEnum aType1, const TopAbs_ShapeEnum aType2) The method has been extended to treat */Solid interfertences. - class BOPDS_Iterator - constructors: BOPDS_Iterator::BOPDS_Iterator(); BOPDS_Iterator::BOPDS_Iterator (const Handle(NCollection_BaseAllocator)& theAllocator); - method: void BOPDS_Iterator::Prepare(); The constant number of types of the interferences has been changed by the call: BOPDS_DS::NbInterfTypes(); - class BOPDS_IteratorSI - method: void BOPDS_IteratorSI::UpdateByLevelOfCheck(const Standard_Integer theLevel) The constant number of types of the interferences has been changed by the call: BOPDS_DS::NbInterfTypes(); - method: void BOPDS_IteratorSI::Intersect() The method has been extended to treat */Solid interfertences. - class BOPAlgo_CheckerSI - constructor: BOPAlgo_CheckerSI::BOPAlgo_CheckerSI() The constant number of types of the interferences has been changed by the call: BOPDS_DS::NbInterfTypes(); - method: void BOPAlgo_CheckerSI::SetLevelOfCheck(const Standard_Integer theLevel) The constant number of types of the interferences has been changed by the call: BOPDS_DS::NbInterfTypes(); - methods: void BOPAlgo_CheckerSI::Perform() void BOPAlgo_CheckerSI::PostTreat() The methods have been extended to treat */Solid interfertences. - class BOPAlgo_ArgumentAnalyzer - method: void BOPAlgo_ArgumentAnalyzer::TestSelfInterferences() The method has been extended to treat */Solid interfertences. Added test case bugs/modalg_5/bug24492