1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-18 14:27:39 +03:00

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.
This commit is contained in:
emv
2018-04-26 14:35:35 +03:00
committed by bugmaster
parent 894dba72a3
commit 948fe6ca88
58 changed files with 2139 additions and 1783 deletions

View File

@@ -6876,7 +6876,10 @@ tscale c1 0 0 0 0.5
@subsubsection occt_draw_7_6_1 fuse, cut, common
Syntax:
These commands are no longer supported, so the result may be unpredictable.
Please use the commands bfuse, bcut, bcommon instead.
Syntax:
~~~~~
fuse name shape1 shape2
cut name shape1 shape2
@@ -6912,6 +6915,9 @@ ttranslate s4 0 -40 0
@subsubsection occt_draw_7_6_2 section, psection
These commands are no longer supported, so the result may be unpredictable.
Please use the command bsection instead.
Syntax:
~~~~~
section result shape1 shape2
@@ -6955,187 +6961,15 @@ whatis sr
sr is a shape COMPOUND FORWARD Free Modified
~~~~~
@subsection occt_draw_7_7 New Topological operations
@subsection occt_draw_7_7 New Topological operations
The new algorithm of Boolean operations avoids a large number of weak points and limitations presented in the old Boolean operation algorithm.
It also provides wider range of options and diagnostics.
The algorithms of Boolean component are fully described in the @ref occt_algorithms_1 "Boolean Operations" of boolean operation user guide.
The new algorithm of Boolean operations avoids a large number of weak points and limitations presented in the old boolean operation algorithm.
For the Draw commands to perform operations in Boolean component please read the dedicated section @ref occt_draw_bop "Boolean operations commands"
@subsubsection occt_draw_7_7_1 bparallelmode
* **bparallelmode** enable or disable parallel mode for boolean operations. Sequential computing is used by default.
Syntax:
~~~~~
bparallelmode [1/0]
~~~~~
Without arguments, bparallelmode shows current state of parallel mode for boolean operations.
* *0* Disable parallel mode,
* *1* Enable parallel mode
**Example:**
~~~~~
# Enable parallel mode for boolean operations.
bparallelmode 1
# Show state of parallel mode for boolean operations.
bparallelmode
~~~~~
@subsubsection occt_draw_7_7_2 bop, bopfuse, bopcut, boptuc, bopcommon
* **bop** defines *shape1* and *shape2* subject to ulterior Boolean operations
* **bopfuse** creates a new shape by a boolean operation on two existing shapes. The new shape contains both originals intact.
* **bopcut** creates a new shape which contains all parts of the second shape but only the first shape without the intersection of the two shapes.
* **boptuc** is a reverced **bopcut**.
* **bopcommon** creates a new shape which contains only whatever is in common between the two original shapes in their intersection.
Syntax:
~~~~~
bop shape1 shape2
bopcommon result
bopfuse result
bopcut result
boptuc result
~~~~~
These commands have short variants:
~~~~~
bcommon result shape1 shape2
bfuse result shape1 shape2
bcut result shape1 shape2
~~~~~
**bop** fills data structure (DS) of boolean operation for *shape1* and *shape2*.
**bopcommon, bopfuse, bopcut, boptuc** commands are used after **bop** command. After one **bop** command it is possible to call several commands from the list above. For example:
~~~~~
bop S1 S2
bopfuse R
~~~~~
**Example:**
Let us produce all four boolean operations on a box and a cylinder:
~~~~~
box b 0 -10 5 20 20 10
pcylinder c 5 20
# fills data structure
bop b c
bopfuse s1
ttranslate s1 40 0 0
bopcut s2
ttranslate s2 -40 0 0
boptuc s3
ttranslate s3 0 40 0
bopcommon s4
ttranslate s4 0 -40 0
~~~~~
Now use short variants of the commands:
~~~~~
bfuse s11 b c
ttranslate s11 40 0 100
bcut s12 b c
ttranslate s12 -40 0 100
bcommon s14 b c
ttranslate s14 0 -40 100
~~~~~
@subsubsection occt_draw_7_7_3 bopsection
Syntax:
~~~~~
bop shape1 shape2
bopsection result
~~~~~
* **bopsection** -- creates a compound object consisting of the edges for the intersection curves on the faces of two shapes.
* **bop** -- fills data structure (DS) of boolean operation for *shape1* and *shape2*.
* **bopsection** -- is used after **bop** command.
Short variant syntax:
~~~~~
bsection result shape1 shape2 [-2d/-2d1/-2s2] [-a]
~~~~~
* <i>-2d</i> -- PCurves are computed on both parts.
* <i>-2d1</i> -- PCurves are computed on first part.
* <i>-2d2</i> -- PCurves are computed on second part.
* <i>-a</i> -- built geometries are approximated.
**Example:**
Let us build a section line between a cylinder and a box
~~~~~
pcylinder c 10 20
box b 0 0 5 15 15 15
trotate b 0 0 0 1 1 1 20
bop b c
bopsection s
# Short variant:
bsection s2 b c
~~~~~
@subsubsection occt_draw_7_7_4 bopcheck, bopargshape
Syntax:
~~~~~
bopcheck shape
bopargcheck shape1 [[shape2] [-F/O/C/T/S/U] [/R|F|T|V|E|I|P]] [#BF]
~~~~~
**bopcheck** checks a shape for self-interference.
**bopargcheck** checks the validity of argument(s) for boolean operations.
* Boolean Operation -- (by default a section is made) :
* **F** (fuse)
* **O** (common)
* **C** (cut)
* **T** (cut21)
* **S** (section)
* **U** (unknown)
* Test Options -- (by default all options are enabled) :
* **R** (disable small edges (shrink range) test)
* **F** (disable faces verification test)
* **T** (disable tangent faces searching test)
* **V** (disable test possibility to merge vertices)
* **E** (disable test possibility to merge edges)
* **I** (disable self-interference test)
* **P** (disable shape type test)
* Additional Test Options :
* **B** (stop test on first faulty found) -- by default it is off;
* **F** (full output for faulty shapes) -- by default the output is made in a short format.
**Note** that Boolean Operation and Test Options are used only for a couple of argument shapes, except for <b>I</b> and <b>P</b> options that are always used to test a couple of shapes as well as a single shape.
**Example:**
~~~~~
# checks a shape on self-interference
box b1 0 0 0 1 1 1
bopcheck b1
# checks the validity of argument for boolean cut operations
box b2 0 0 0 10 10 10
bopargcheck b1 b2 -C
~~~~~
@subsection occt_draw_7_8 Drafting and blending
Drafting is creation of a new shape by tilting faces through an angle.
@@ -8051,10 +7885,44 @@ Options:
Draw module for @ref occt_modalg_hist "History Information support" includes the command to save history of modifications performed by Boolean operation or sibling commands into a drawable object and the actual history commands:
* *savehistory*;
* *isdeleted*;
* *modified*;
* *generated*.
* **setfillhistory**;
* **savehistory**;
* **isdeleted**;
* **modified**;
* **generated**.
@subsubsection occt_draw_hist_set setfillhistory
*setfillhistory* command controls if the history is needed to be filled in the supported algorithms and saved into the session after the algorithm is done.
By default it is TRUE, i.e. the history is filled and saved.
Syntax:
~~~~
setfillhistory : Controls the history collection by the algorithms and its saving into the session after algorithm is done.
Usage: setfillhistory [flag]
w/o arguments prints the current state of the option;
flag == 0 - history will not be collected and saved;
flag != 0 - history will be collected and saved into the session (default).
~~~~
Example:
~~~~
box b1 10 10 10
box b2 10 10 10
setfillhistory 0
bfuse r b1 b2
savehistory h
# No history has been prepared yet.
setfillhistory 1
bfuse r b1 b2
savehistory h
dump h
# *********** Dump of h *************
# History contains:
# - 2 Deleted shapes;
# - 52 Modified shapes;
# - 0 Generated shapes.
~~~~
@subsubsection occt_draw_hist_save savehistory
@@ -8195,16 +8063,23 @@ aSplitter.SetNonDestructive(BOPTest_Objects::NonDestructive());
aSplitter.SetGlue(BOPTest_Objects::Glue());
aSplitter.SetCheckInverted(BOPTest_Objects::CheckInverted());
aSplitter.SetUseOBB(BOPTest_Objects::UseOBB());
aSplitter.SetToFillHistory(BRepTest_Objects::IsHistoryNeeded());
// performing operation
aSplitter.Build();
// Store the history for the Objects (overwrites the history in the session)
BRepTest_Objects::SetHistory(BOPTest_Objects::Shapes(), aSplitter);
// Add the history for the Tools
BRepTest_Objects::AddHistory(BOPTest_Objects::Tools(), aSplitter);
if (BRepTest_Objects::IsHistoryNeeded())
{
// Store the history for the Objects (overwrites the history in the session)
BRepTest_Objects::SetHistory(BOPTest_Objects::Shapes(), aSplitter);
// Add the history for the Tools
BRepTest_Objects::AddHistory(BOPTest_Objects::Tools(), aSplitter);
}
~~~~
The method *BRepTest_Objects::IsHistoryNeeded()* controls if the history is needed to be filled in the algorithm and saved into the session after the algorithm is done (*setfillhistory* command controls this option in DRAW).
@subsection occt_draw_7_12 Texture Mapping to a Shape
Texture mapping allows you to map textures on a shape. Textures are texture image files and several are predefined. You can control the number of occurrences of the texture on a face, the position of a texture and the scale factor of the texture.
@@ -8276,39 +8151,467 @@ The defaults are:
* *UScale = VScale = 1* texture covers 100% of the face
@section occt_draw_20 General Fuse Algorithm commands
This chapter describes existing commands of Open CASCADE Draw Test Harness that are used for debugging of General Fuse Algorithm (GFA). It is also applicable for all General Fuse based algorithms such as Boolean Operations Algorithm (BOA), Splitter Algorithm (SPA), Cells Builder Algorithm etc.
@section occt_draw_bop Boolean Operations Commands
This chapter describes existing commands of Open CASCADE Draw Test Harness that are used for performing, analyzing, debugging the algorithm in Boolean Component.
See @ref occt_user_guides__boolean_operations "Boolean operations" user's guide for the description of these algorithms.
@subsection occt_draw_20_1 Definitions
@subsection occt_draw_bop_two Boolean Operations on two operands
The following terms and definitions are used in this document:
* **Objects** -- list of shapes that are arguments of the algorithm.
* **Tools** -- list of shapes that are arguments of the algorithm. Difference between Objects and Tools is defined by specific requirements of the operations (Boolean Operations, Splitting Operation).
All commands in this section perform Boolean operations on two shapes. One of them is considered as object, and the other as a tool.
@subsubsection occt_draw_bop_two_bop bop, bopfuse, bopcut, boptuc, bopcommon, bopsection
These commands perform Boolean operations on two shapes:
* **bop** performs intersection of given shapes and stores the intersection results into internal Data Structure.
* **bopfuse** creates a new shape representing the union of two shapes.
* **bopcut** creates a new shape representing a subtraction of a second argument from the first one.
* **boptuc** creates a new shape representing a subtraction of a first argument from the second one.
* **bopcommon** creates a new shape representing the intersection of two shapes.
* **bopsection** creates a new shape representing the intersection edges and vertices between shapes.
These commands allow intersecting the shapes only once for building all types of Boolean operations. After *bop* command is done, the other commands in this category use the intersection results prepared by *bop*.
It may be very useful as the intersection part is usually most time-consuming part of the operation.
Syntax:
~~~~~
bop shape1 shape2
bopcommon result
bopfuse result
bopcut result
boptuc result
~~~~~
**Example:**
Let's produce all four boolean operations on a box and a cylinder performing intersection only once:
~~~~~
box b 0 -10 5 20 20 10
pcylinder c 5 20
# intersect the shape, storing results into data structure
bop b c
# fuse operation
bopfuse s1
# cut operation
bopcut s2
# opposite cut operation
boptuc s3
# common operation
bopcommon s4
# section operation
bopsection s5
~~~~~
@subsubsection occt_draw_bop_two_bapi bfuse, bcut, btuc, bcommon, bsection
These commands also perform Boolean operations on two shapes. These are the short variants of the bop* commands.
Each of these commands performs both intersection and building the result and may be useful if you need only the result of a single boolean operation.
Syntax:
~~~~~
bcommon result shape1 shape2
bfuse result shape1 shape2
bcut result shape1 shape2
btuc result shape1 shape2
~~~~~
**bection** command has some additional options for faces intersection:
~~~~
bsection result shape1 shape2 [-n2d/-n2d1/-n2d2] [-na]
Where:
result - result of the operation
shape1, shape2 - arguments of the operation
-n2d - disables PCurve construction on both objects
-n2d1 - disables PCurve construction on first object
-n2d2 - disables PCurve construction on second object
-na - disables approximation of the section curves
~~~~
@subsection occt_draw_bop_multi Boolean Operations on multiple arguments
The modern Boolean Operations algorithm available in Open CASCADE Technology is capable of performing a Boolean Operations not only on two shapes, but on arbitrary number of shapes.
In terms of Boolean Operations these arguments are divided on two groups **Objects** and **Tools**. The meaning of these groups is similar to the single object and tool of Boolean Operations on two shapes.
The Boolean operations are based on the General Fuse operation (see @ref occt_algorithms_7 "General Fuse algorithm") which splits all input shapes basing on the intersection results.
Depending on the type of Boolean operation the BOP algorithm choses the necessary splits of the arguments.
@subsection occt_draw_bop_general_com General commands for working with multiple arguments
The algorithms based on General Fuse operation are using the same commands for adding and clearing the arguments list and for performing intersection of these arguments.
@subsubsection occt_draw_bop_general_com_add Adding arguments of operation
The following commands are used to add the objects and tools for Boolean operations:
* **baddobjects** *S1 S2...Sn* -- adds shapes *S1, S2, ... Sn* as Objects;
* **baddtools** *S1 S2...Sn* -- adds shapes *S1, S2, ... Sn* as Tools;
The following commands are used to clear the objects and tools:
* **bclearobjects** -- clears the list of Objects;
* **bcleartools** -- clears the list of Tools;
So, when running subsequent operation in one Draw session, make sure you cleared the Objects and Tools from previous operation. Otherwise, the new arguments will be added to the current ones.
@subsubsection occt_draw_bop_general_com_fill Intersection of the arguments
The command **bfillds** performs intersection of the arguments (**Objects** and **Tools**) and stores the intersection results into internal Data Structure.
@subsection occt_draw_bop_build Building the result of operations
@subsubsection occt_draw_bop_build_BOP Boolean operation
The command **bbop** is used for building the result of Boolean Operation. It has to be used after **bfillds** command.
Syntax:
~~~~
bbop result iOp
Where:
result - result of the operation
iOp - type of Boolean Operation. It could have the following values:
0 - COMMON operation
1 - FUSE operation
2 - CUT operation
3 - CUT21 (opposite CUT, i.e. objects and tools are swapped) operation
4 - SECTION operation
~~~~
**Example**
~~~~
box b1 10 10 10
box b2 5 5 5 10 10 10
box b3 -5 -5 -5 10 10 10
# Clear objects and tools from previous runs
bclearobjects
bcleartools
# add b1 as object
baddobjects b1
# add b2 and b3 as tools
baddtools b2 b3
# perform intersection
bfillds
# build result
bbop rcom 0
bbop rfuse 1
bbop rcut 2
bbop rtuc 3
bbop rsec 4
~~~~
@subsubsection occt_draw_bop_build_GF General Fuse operation
The command **bbuild** is used for building the result of General Fuse Operation. It has to be used after **bfillds** command.
General Fuse operation does not make the difference between Objects and Tools considering both as objects.
Syntax:
~~~~
bbuild result
~~~~
**Example**
~~~~
box b1 10 10 10
box b2 5 5 5 10 10 10
box b3 -5 -5 -5 10 10 10
# Clear objects and tools from previous runs
bclearobjects
bcleartools
# add b1 as object
baddobjects b1
# add b2 and b3 as tools
baddtools b2 b3
# perform intersection
bfillds
# build result
bbuild result
~~~~
@subsubsection occt_draw_bop_build_Split Split operation
Split operation splits the **Objects** by the **Tools**.
The command **bsplit** is used for building the result of Split operation. It has to be used after **bfillds** command.
**Example**
~~~~
box b1 10 10 10
box b2 5 5 5 10 10 10
box b3 -5 -5 -5 10 10 10
# Clear objects and tools from previous runs
bclearobjects
bcleartools
# add b1 as object
baddobjects b1
# add b2 and b3 as tools
baddtools b2 b3
# perform intersection
bfillds
# build result
bsplit result
~~~~
@subsubsection occt_draw_bop_build_CB Cells Builder
Please see the @ref occt_algorithms_10c_Cells_1 "Cells Builder Usage" for the Draw usage of Cells Builder algorithm.
@subsubsection occt_draw_bop_build_API Building result through API
The following commands are used to perform the operation using API implementation of the algorithms:
* **bapibuild** -- to perform API general fuse operation.
* **bapibop** -- to perform API Boolean operation.
* **bapisplit** -- to perform API Split operation.
These commands have the same syntax as the analogical commands described above.
@subsection occt_draw_bop_options Setting options for the operation
The algorithms in Boolean component have a wide range of options.
To see the current state of all option the command **boptions** should be used.
It has the following syntax:
~~~~
boptions [-default]
-default - allows to set all options to default state.
~~~~
To have an effect the options should be set before the operation (before *bfillds* command).
@subsubsection occt_draw_bop_options_par Parallel processing mode
**brunparallel** command enables/disables the parallel processing mode of the operation.
Syntax:
~~~~
brunparallel flag
Where:
flag is the boolean flag controlling the mode:
flag == 0 - parallel processing mode is off.
flag != 0 - parallel processing mode is on.
~~~~
The command is applicable for all commands in the component.
@subsubsection occt_draw_bop_options_safe Safe processing mode
**bnondestructive** command enables/disables the safe processing mode in which the input arguments are protected from modification.
Syntax:
~~~~
bnondestructive flag
Where:
flag is the boolean flag controlling the mode:
flag == 0 - safe processing mode is off.
flag != 0 - safe processing mode is on.
~~~~
The command is applicable for all commands in the component.
@subsubsection occt_draw_bop_options_fuzzy Fuzzy option
**bfuzzyvalue** command sets the additional tolerance for operations.
Syntax:
~~~~
bfuzzyvalue value
~~~~
The command is applicable for all commands in the component.
@subsubsection occt_draw_bop_options_glue Gluing option
**bglue** command sets the gluing mode for the BOP algorithms.
Syntax:
~~~~
bglue 0/1/2
Where:
0 - disables gluing mode.
1 - enables the Shift gluing mode.
2 - enables the Full gluing mode.
~~~~
The command is applicable for all commands in the component.
@subsubsection occt_draw_bop_options_checkinv Check inversion of input solids
**bcheckinverted** command enables/disables the check of the input solids on inverted status in BOP algorithms.
Syntax:
~~~~
bcheckinverted 0 (off) / 1 (on)
~~~~
The command is applicable for all commands in the component.
@subsubsection occt_draw_bop_options_obb OBB usage
**buseobb** commannd enables/disables the usage of OBB in BOP algorithms.
Syntax:
~~~~
buseobb 0 (off) / 1 (on)
~~~~
The command is applicable for all commands in the component.
@subsubsection occt_draw_bop_options_simplify Result simplification
**bsimplify** command enables/disables the result simplification after BOP. The command is applicable only to the API variants of GF, BOP and Split operations.
Syntax:
~~~~
bsimplify [-e 0/1] [-f 0/1] [-a tol]
Where:
-e 0/1 - enables/disables edges unification
-f 0/1 - enables/disables faces unification
-a tol - changes default angular tolerance of unification algo.
~~~~
@subsubsection occt_draw_bop_options_warn Drawing warning shapes
**bdrawwarnshapes** command enables/disables drawing of waring shapes of BOP algorithms.
Syntax:
~~~~
bdrawwarnshapes 0 (do not draw) / 1 (draw warning shapes)
~~~~
The command is applicable for all commands in the component.
@subsection occt_draw_bop_check Check commands
The following commands are analyzing the given shape on the validity of Boolean operation.
@subsubsection occt_draw_bop_check_1 bopcheck
Syntax:
~~~~
bopcheck shape [level of check: 0 - 9]
~~~~
It checks the given shape for self-interference. The optional level of check allows limiting the check to certain intersection types. Here are the types of interferences that will be checked for given level of check:
* 0 - only V/V;
* 1 - V/V and V/E;
* 2 - V/V, V/E and E/E;
* 3 - V/V, V/E, E/E and V/F;
* 4 - V/V, V/E, E/E, V/F and E/F;
* 5 - V/V, V/E, E/E, V/F, E/F and F/F;
* 6 - V/V, V/E, E/E, V/F, E/F, F/F and V/S;
* 7 - V/V, V/E, E/E, V/F, E/F, F/F, V/S and E/S;
* 8 - V/V, V/E, E/E, V/F, E/F, F/F, V/S, E/S and F/S;
* 9 - V/V, V/E, E/E, V/F, E/F, F/F, V/S, E/S, F/S and S/S - all interferences (Default value)
**Example:**
~~~~
box b1 10 10 10
box b2 3 3 3 4 4 4
compound b1 b2 c
bopcheck c
~~~~
In this example one box is completely included into other box. So the output shows that all sub-shapes of b2 interfering with the solid b1.
**bopcheck** command does not modifies the input shape, thus can be safely used.
@subsubsection occt_draw_bop_check_2 bopargcheck
**bopargcheck** syntax:
~~~~
bopargcheck Shape1 [[Shape2] [-F/O/C/T/S/U] [/R|F|T|V|E|I|P|C|S]] [#BF]
-<Boolean Operation>
F (fuse)
O (common)
C (cut)
T (cut21)
S (section)
U (unknown)
For example: "bopargcheck s1 s2 -F" enables checking for Fuse operation
default - section
/<Test Options>
R (disable small edges (shrank range) test)
F (disable faces verification test)
T (disable tangent faces searching test)
V (disable test possibility to merge vertices)
E (disable test possibility to merge edges)
I (disable self-interference test)
P (disable shape type test)
C (disable test for shape continuity)
S (disable curve on surface check)
For example: "bopargcheck s1 s2 /RI" disables small edge detection and self-intersection detection
default - all options are enabled
#<Additional Test Options>
B (stop test on first faulty found); default OFF
F (full output for faulty shapes); default - output in a short format
NOTE: <Boolean Operation> and <Test Options> are used only for couple of argument shapes, except I and P options that are always used for couple of shapes as well as for single shape test.
~~~~
As you can see *bopargcheck* performs more extended check of the given shapes than *bopcheck*.
**Example:**
Let's make an edge with big vertices:
~~~~
vertex v1 0 0 0
settolerance v1 0.5
vertex v2 1 0 0
settolerance v2 0.5
edge e v1 v2
top; don e; fit
tolsphere e
bopargcheck e
~~~~
Here is the output of this command:
~~~~
Made faulty shape: s1si_1
Made faulty shape: s1se_1
Faulties for FIRST shape found : 2
---------------------------------
Shapes are not suppotrted by BOP: NO
Self-Intersections : YES Cases(1) Total shapes(2)
Check for SI has been aborted : NO
Too small edges : YES Cases(1) Total shapes(1)
Bad faces : NO
Too close vertices : DISABLED
Too close edges : DISABLED
Shapes with Continuity C0 : NO
Invalid Curve on Surface : NO
Faulties for SECOND shape found : 0
~~~~
@subsection occt_draw_bop_debug Debug commands
The following terms and definitions are used in this chapter:
* **DS** -- internal data structure used by the algorithm (*BOPDS_DS* object).
* **PaveFiller** -- intersection part of the algorithm (*BOPAlgo_PaveFiller* object).
* **Builder** -- builder part of the algorithm (*BOPAlgo_Builder* object).
* **IDS Index** -- the index of the vector *myLines*.
@subsection occt_draw_20_2 General commands
* **bclearobjects** -- clears the list of Objects;
* **bcleartools** -- clears the list of Tools;
* **baddobjects** *S1 S2...Sn* -- adds shapes *S1, S2, ... Sn* as Objects;
* **baddtools** *S1 S2...Sn* -- adds shapes *S1, S2, ... Sn* as Tools;
* **bfillds** -- performs the Intersection Part of the Algorithm;
* **bbuild** *r* -- performs the Building Part of the Algorithm (General Fuse operation); *r* is the resulting shape;
* **bsplit** *r* -- performs the Splitting operation; *r* is the resulting shape;
* **bbop** *r* *iOp* -- performs the Boolean operation; *r* is the resulting shape; *iOp* - type of the operation (0 - COMMON; 1 - FUSE; 2 - CUT; 3 - CUT21; 4 - SECTION);
* **bcbuild** *rx* -- performs initialization of the *Cells Builder* algorithm (see @ref occt_algorithms_10c_Cells_1 "Usage of the Cells Builder algorithm" for more details).
@subsection occt_draw_20_3 Commands for Intersection Part
@subsubsection occt_draw_bop_debug_int Intersection Part commands
All commands listed below are available when the Intersection Part of the algorithm is done (i.e. after the command *bfillds*).
@subsubsection occt_draw_20_3_1 bopds
**bopds**
Syntax:
~~~~
@@ -8321,12 +8624,11 @@ Displays:
* <i>-e</i> : only edges of arguments that are in the DS;
* <i>-f</i> : only faces of arguments that are in the DS.
@subsubsection occt_draw_20_3_2 bopdsdump
**bopdsdump**
Prints contents of the DS.
Example:
~~~~
Draw[28]> bopdsdump
*** DS ***
@@ -8350,7 +8652,8 @@ Example:
* *SOLID* -- type of the shape;
* <i>{ 1 }</i> -- a DS index of the successors.
@subsubsection occt_draw_20_3_3 bopindex
**bopindex**
Syntax:
~~~~
@@ -8358,7 +8661,8 @@ bopindex S
~~~~
Prints DS index of shape *S*.
@subsubsection occt_draw_20_3_4 bopiterator
**bopiterator**
Syntax:
~~~~~
@@ -8387,7 +8691,7 @@ Example:
* *z58 z12* -- DS indices of intersecting edge and face.
@subsubsection occt_draw_20_3_5 bopinterf
**bopinterf**
Syntax:
~~~~
@@ -8412,7 +8716,8 @@ Here, record <i>(58, 12, 68)</i> means:
* *12* -- a DS index of the face;
* *68* -- a DS index of the new vertex.
@subsubsection occt_draw_20_3_6 bopsp
**bopsp**
Displays split edges.
@@ -8430,7 +8735,7 @@ Example:
* *edge 58* -- 58 is a DS index of the original edge.
* *z58_74 z58_75* -- split edges, where 74, 75 are DS indices of the split edges.
@subsubsection occt_draw_20_3_7 bopcb
**bopcb**
Syntax:
~~~~
@@ -8459,10 +8764,9 @@ This command dumps common blocks for the source edge with index 17.
* *Faces: 36* -- 36 is a DS index of the face the common block belongs to.
@subsubsection occt_draw_20_3_8 bopfin
**bopfin**
Syntax:
~~~~
bopfin nF
~~~~
@@ -8482,7 +8786,7 @@ Example:
* <i>PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }</i> -- information about the Pave Block;
* <i>vrts In ... 18 </i> -- a DS index of the vertex IN the face.
@subsubsection occt_draw_20_3_9 bopfon
**bopfon**
Syntax:
~~~~
@@ -8505,7 +8809,7 @@ Example:
* <i>PB:{ E:72 orE:38 Pave1: { 69 0.000 } Pave2: { 68 10.000 } }</i> -- information about the Pave Block;
* <i>vrts On: ... 68 69 70 71</i> -- DS indices of the vertices ON the face.
@subsubsection occt_draw_20_3_10 bopwho
**bopwho**
Syntax:
~~~~
@@ -8536,7 +8840,7 @@ This means that shape 68 is a result of the following interferences:
* *FF curves: (12, 56)* -- edge from the intersection curve between faces 12 and 56
* *FF curves: (12, 64)* -- edge from the intersection curve between faces 12 and 64
@subsubsection occt_draw_20_3_11 bopnews
**bopnews**
Syntax:
~~~~
@@ -8546,14 +8850,13 @@ bopnews -v [-e]
* <i>-v</i> -- displays all new vertices produced during the operation;
* <i>-e</i> -- displays all new edges produced during the operation.
@subsection occt_draw_20_4 Commands for the Building Part
@subsubsection occt_draw_bop_debug_build Building Part commands
The commands listed below are available when the Building Part of the algorithm is done (i.e. after the command *bbuild*).
@subsubsection occt_draw_20_4_1 bopim
**bopim**
Syntax:
~~~~
bopim S
~~~~