thick solid from shell

Case:
Has anyone made a thick solid from a shell containing many faces, all faces touch each other C0 but are not necessarily continuous nor tangent to each other.

do any of the BRepOffset_MakeOffset, BRepOffsetAPI_MakeThickSolid classes deal with this case.

Supporting Documents:
I have attached a shell iges made from extruding a polyline made of straight segments bezier curves and arcs, i would like to make it a thick solid surface as shown in the second attachment.

both iges files were produced in rhino 4, by creating a polyline and extruding it, the second file by offsetting the surface as a solid, Catia can also do this with ease.

Results so far:
I have been able to make a single curved face thick, with and without holes, however as soon as there are more than one face, the function IsConnectedShell inside BRepOffset_MakeOffset raises a Standard_ConstructionError.

observation:
I am curious how is it that in the makebottle tutorial the body of the bottle is joined to a cylinder, and the BRepOffsetAPI_MakeThickSolid does not complain. shouldn't the intersection between the cylinder head and the prism body raise the same error since they are not continuous?

Attempts Ive made with these classes:
1- I tried BRepOffsetAPI_MakeThickSolid:

BRepOffsetAPI_MakeThickSolid doesnt seem to like open shells, it prefers closed solids. I have been giving it an empty list of faces to remove, however only a surface offset appears not a solid.

2- BRepOffset_MakeOffset:

BRepOffset_MakeOffset: needs to be initialized with true in thickening argument. and returns a thick solid. however only single faces, not on shells with more than one face.

Sample Code:

//this is the code I am calling to compute the thicksolid, this code works for single face, but //not for multiple faces:

TopoDS_Shape curimport = imported Iges surface...

BRep_Builder B;
TopoDS_Shell sh;
B.MakeShell(sh);

TopExp_Explorer anExp (curimport, TopAbs_FACE);
for (; anExp.More(); anExp.Next()) {
B.Add(sh,anExp.Current());
}

BRepOffset_MakeOffset myOffsetShape;

try
{
myOffsetShape.Initialize(sh,-5,Precision::Confusion(),BRepOffset_Mode::BRepOffset_Skin,false,true,GeomAbs_Intersection,true);
myOffsetShape.MakeOffsetShape();
if (!myOffsetShape.IsDone()) return;
offsetshape = myOffsetShape.Shape();

Handle_AIS_ColoredShape aBox2 = new AIS_ColoredShape(offsetshape);
getContext()->Display(aBox2);
myaismap->insert(aBox2,QString("importedshape2"));
} catch (Standard_ConstructionError)
qDebug() }

any ideas.

Regards,

Attachments: 
Andrey Pozdeev's picture

screen capture of the thick shell

Attachments: 
Andrey Pozdeev's picture

catia thicksurface showing the same sample provided.

ideally if we could reproduce this with any available occ class would be great.
as it can be seen from the image, there are 5 shells, which touch each other but are not continuous in curvature or tangency.

they have been joined, and then a thicksurface operation added in a body.

could this be replicated in OCC.

Regards,

Alex

Attachments: 
Andrey Pozdeev's picture

result from catia as step file.