The test case model consists of three objects: block B1 and cone C1 (which intersect in a plane at the bottom of the cone), and toroid T1 (which intersects C1 in a line - a circle).

These are the parameters and order of creation.

gobj = gobj_block( [-.5], [.5], [-.5], [.5], [-.5], [.5], 'B1' );
gobj = gobj_cone( [0 0 .5], [0.5], [0.25], [1], [0 0 1], 'C1' );
gobj = gobj_torus( [0 0 1.7], [0.25], [0.2], [0 0 1], 'T1' );

It can be constructed and stored in MATLAB variable "g5" by executing:

build_block_cone_toroid.mHere is what is looks like before the combine:

Two objects result from the Combine operation: CJ2 and CJ3

I expected the result of adding the three objects to be a single object as in the following slightly modified case where the toroid is located 0.00001 below the original T1:

gobj = gobj_block( [-.5], [.5], [-.5], [.5], [-.5], [.5], 'B1' );
gobj = gobj_cone( [0 0 .5], [0.5], [0.25], [1], [0 0 1], 'C1' );
gobj = gobj_torus( [0 0 1.69999], [0.25], [0.2], [0 0 1], 'T1' );

... and where the sum B1+C1+T1

... does produce a single combined single object, CJ2:

Perhaps in the first case -

gobj = gobj_torus( [0 0 1.7], [0.25], [0.2], [0 0 1], 'T1' )

- the toroid does NOT intersect/touch the cone along the circumference of the cone's upper end, as it appears. But then if that were the case, I would expect geomtool to refuse the operation.

Hope this is helpful,

-Randal