Our Solutions

Need professional assistance?
Consider our:

Support Offerings


Need to speed up your development?
Have a look at our:

Samples & Tools


Need some functionality extending standard OCCT capabilities?
Check out our:

Adv. Components

Boolean operation hang on OCC 6.5.3

Jayesh Salvi's picture

I am trying to evaluate OCC for performing complex boolean operations. I've put together following simple cpp program that demonstrates a possible bug in OCC which leads to perpetual hang with 90% CPU usage by the process.

The program attached is single cpp file, with compilation instructions. Just replace $OCC_INSTALL_DIR by the path in which you have OCC 6.5.3 (or any older version) installed. On successful build and run, it will generate an STL at /tmp/0.stl. If you change the value of TOTAL to be greater than 10, you may see the perpetual hang I am talking about. I can get this program to work for all values of TOTAL 10 that I've tried.

I've compiled and run this program on older versions of OCC (6.5.0, 6.3.0) and I see failures of different kind. Sometimes I get Standard_ConstructionError and other times it hangs as described above. Strangely enough when I run an equivalent program written on top of PythonOCC (which I believe uses same 6.3.0 libraries I used with native program), it runs successfully.

You can also see the code at the link https://gist.github.com/3606545


Forum supervisor's picture

Dear Jayesh Salvi,
I would like to inform you that the reported issue was checked.
The problem is not in Boolean operations, but rather in your code.
Which value of the 'step' do you expect if TOTAL > 10 ?
float step = 10/TOTAL;
I guess it will be => 0;
I suggest you to use:
float step = 10.0/TOTAL;


Jayesh Salvi's picture

Thanks for pointing that out. After making the change it doesn't hang any more.

I am surprised however that I didn't get an exception or a crash, because I was effectively passing r=0 to MakeCylinder. Instead the library went on executing infinitely.

Forum supervisor's picture

On Windows platform it leads to crash.
In any case before using Boolean it is better to check
arguments for validity. It will allow you to avoid unexpected behavior
in the future.