SurfaceOfRevolution and Common operation

Hi guys,

I need to handle some elliptical toroidal surfaces which I create as surface of revolution of an ellipse. The construction works fine, but I am not able to perform a Boolean 'common'-operation between the torus and a usual box.
So I decided to perform the operation in DRAWEXE to check if it works in principle. Well, it doesn't. This is an example:
----------------------------------------
Draw[3]> ellipse ELL 10 0 0 0 1 0 5 3
Draw[4]> revsurf SOR ELL 0 0 0 0 0 1
Draw[5]> box B 0 0 -250 500 500 500
Draw[6]> bcommon RESULT SOR B
Null shapes are not allowed
----------------------------------------

The SurfaceOfRevolution (SOR) is build, the box should be okay, too. But why does bcommon claim that there's a Null shape?
Has anyone any idea?

Thanks in advance,

Dennis

Paul Jimenez's picture

ELL is a curve and SOR is a surface. You need to create a shape from SOR before a boolean operation. I haven't played with surfaces much, but you may want to check in DRAWEXE the functions mkface, mksol and such.

Dennis G.'s picture

Hi Paul,

thank you for the hint. Actually, inside the program I first make a half-space and generate a TopoDS_Solid from it, but forgot to do so while using DRAWEXE.
Back to the DRAWEXE example.

---------------------------------------
Draw[3]> ellipse E 10 0 0 0 1 0 5 3 // make ellipse (curve)
Draw[4]> revsurf Ssurf E 0 0 0 0 0 1 // make surface of revolution from ellipse (surface)
Draw[5]> mkface Tface Ssurf // make a face from surface
Draw[6]> mksol T Tface // make torus solid from face
Draw[7]> box B 0 0 -250 500 500 500 // make box
Draw[8]> bcommon Res B T // perform boolean COMMON operation
not done ErrorStatus()=101
--------------------------------------

Now I use two solids to compute their common volume. This works if I do the 'bcommon' operation with a sphere instead of the elliptical torus (the sphere is constructed in the same way the torus 'T' is) and the box 'B'. So I assume the OCC code cannot handle the 'common' operation on surfaces of revolution (at least not for this special case).
I just found out, that I get a "segmentation violation" when I decrease the size of the box.

--------------------------------------
Draw[67]> box B 0 0 -12 15 15 12
Draw[68]> bcommon Res T B
An exception was caught 0xb6ab6bd1 : OSD_SIGSEGV: SIGSEGV 'segmentation violation' detected. Address 4012d980
** Exception ** 0xb6ab6bd1 : OSD_SIGSEGV: SIGSEGV 'segmentation violation' detected. Address 4012d980
---------------------------------------

I guess, I have to find another way to find the common volume of the torus and any other solid.

Regards,

Dennis

Paul Jimenez's picture

Are you sure the torus you get is what you really intended? I find the shape to be quite "strange".

Dennis G.'s picture

Yes, unfortunately I need to use elliptic tori. I need to handle a model of the ITER tokamak fusion device which is build with these kind of surfaces.
What's "strange" about the shape?

http://mathworld.wolfram.com/EllipticTorus.html

Paul Jimenez's picture

The one I got in DRAWEXE didn't look like that the first time I tried. That's why I said it looked "strange". Now I repeated the process and it looks like it should.

I used bop and bopcommon instead, and I got the box cut by the torus. I expected another result from the common operation, but that's what I got. bcommon gave me the same result also.

Dennis G.'s picture

You don't get an error message? =0

That's just great. Why always me? Okay, thanks for your help, Paul.
I'll experiment a little more and hope that I'll find a solution.

Best Regards,

Dennis