help with understanding bopcheck output


can someone please explain the output of the bopcheck command performed on the attached shape?

Draw[11]> restore 042-cutOff.in2-burner-block.brep o2
Draw[12]> bopcheck o2
V/V: x6 x7
V/V: x6 x9
V/V: x6 x11
V/V: x6 x16
V/V: x6 x18
V/V: x6 x30
V/V: x6 x32
V/V: x6 x43
V/V: x6 x54
V/V: x7 x9
V/V: x7 x11
V/V: x7 x16
V/V: x7 x18
V/V: x7 x30
V/V: x7 x32
V/V: x7 x43
V/V: x7 x54
V/V: x9 x11
V/V: x9 x16
V/V: x9 x18
V/V: x9 x30
V/V: x9 x32
V/V: x9 x43
V/V: x9 x54
V/V: x11 x16
V/V: x11 x18
V/V: x11 x30
V/V: x11 x32
V/V: x11 x43
V/V: x11 x54
V/V: x16 x18
V/V: x16 x30
V/V: x16 x32
V/V: x16 x43
V/V: x16 x54
V/V: x18 x30
V/V: x18 x32
V/V: x18 x43
V/V: x18 x54
V/V: x30 x32
V/V: x30 x43
V/V: x30 x54
V/V: x32 x43
V/V: x32 x54
V/V: x43 x54

I thought that each V/V line represents interferencing vertices of the shape, so I checked the first pair:

Draw[14]> distmini d x6 x7
"distmini" command returns:
d_val d
Output is complete.

Draw[15]> dump d_val

*********** Dump of d_val *************

According to the dump of both vertices x6 and x7 their tolerance value is:

Draw[16]> dump x6


TShape # 1 : VERTEX    0101101 0x26d96f0
    Tolerance : 0.0005001

As the tolerance is much smaller than the distance between these two vertices (5e-4 + 5e-4 < 0.629) I do not understand what the bopcheck is reporting here. Can someone please explain it? What am I missing or misunderstand?


Eugeny's picture


The problem is that some of the vertices of your shape has a huge tolerance - check f.e. x16:

> tolerance x16

VERTEX  : MAX=0.20755791529705001

This vertex interferes both with x6 and x7 vertices (and with many others as well). That's why this (x6, x7) intersection is created.

Best regards,

Petr Matousek's picture

Hello Eugeny,

thank you very much for your answer. Maybe you (or someone else?) can help me to trace where this huge tolerance come from?

You can find the shape state when it was created in the new attachment 003-merge.out-burner-block.brep. This original shape has no iterferences:

Draw[19]> restore 003-merge.out-burner-block.brep s
Draw[20]> checkshape s
This shape seems to be valid

Then the shape was used as an argument to several boolean operations (common, cut), also its bounding box was calculated using BRepBndLib and it was triangulated for it. Then as a result exactly the same TopoDS_Shape has the form of 042-cutOff.in2-burner-block.brep. Does it mean that the arguments of the boolean operation or BRepBndLib can be modified as a side-effect of the operation? Fuzzy boolean operations with fuzzyValue=5e-4 were used in this case.

And one more question: is there some DRAW command/script for checking the "diff" of such two shapes as in my case to see what has changed?


Eugeny's picture

Hello Petr,

The arguments of Boolean operation can really be modified during operation. But if you want them to be untouched, there is a way to do it. You should use the non-destructive mode of BOP - see the header of BOPAlgo_PaveFiller class.

This non-destructive mode does not work with fuzzy option, but there is an issue in OCCT mantis to make Fuzzy Booleans non-destructive also -

I do not know about such command as "diff" of two shapes.


Petr Matousek's picture

Hello Eugeny,

thank you for additional information. I have troubles to find any info about the non-destructive mode of BOP. I have looked into the BOPAlgo_PaveFiller.hxx as you recommended but with no success. Can you please name the method or symbol from the BOPAlgo_PaveFiller class that I should look at. I just found the bnondestructive command of the DRAWEXE but I would like to set the mode directly within my C++ code.


Robert W.'s picture

You can always make 2 copies of the BREP files and view them in winmerge or some other diff tool.. It wont say what has changed visualy but it can always give you some informations... At least thats what i am doing right now.

Eugeny's picture


The following piece of code is taken from DRAW command "bop":

  BOPAlgo_PaveFiller aPF;


Petr Matousek's picture

Hello Eugeny, thank you. The SetNonDestructive(bool) method was introduced in the 7.0.0 that is why I have not seen it in the 6.9.1 source tree. Petr