diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp index 591dbdca69e5c103e3aff9b127c84a1c0251da73..144518e2eafce0f7b2812a7347fa7fd65d2017f3 100644 --- a/Geo/GModelIO_OCC.cpp +++ b/Geo/GModelIO_OCC.cpp @@ -1344,8 +1344,8 @@ void OCC_Internals::addThickSolid(int tag, int solidTag, } void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c, - BRepPrimAPI_MakePrism *p, - BRepPrimAPI_MakeRevol *r, + BRepSweep_Prism *p, + BRepSweep_Revol *r, ExtrudeParams *e, double x, double y, double z, double dx, double dy, double dz, @@ -1373,15 +1373,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c, m.source = bot; _meshAttr.Bind(top, m); } - TopoDS_Shape vol; - if(p){ - BRepSweep_Prism prism = p->Prism(); - vol = prism.Shape(face); - } - else{ - BRepSweep_Revol revol = r->Revol(); - vol = revol.Shape(face); - } + TopoDS_Shape vol = p ? p->Shape(face) : r->Shape(face); { ExtrudeParams *ee = new ExtrudeParams(EXTRUDED_ENTITY); ee->fill(p ? TRANSLATE : ROTATE, dx, dy, dz, ax, ay, ax, x, y, z, angle); @@ -1406,15 +1398,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c, m.source = bot; _meshAttr.Bind(top, m); } - TopoDS_Shape sur; - if(p){ - BRepSweep_Prism prism = p->Prism(); - sur = prism.Shape(edge); - } - else{ - BRepSweep_Revol revol = r->Revol(); - sur = revol.Shape(edge); - } + TopoDS_Shape sur = p ? p->Shape(edge) : r->Shape(edge); { ExtrudeParams *ee = new ExtrudeParams(EXTRUDED_ENTITY); ee->fill(p ? TRANSLATE : ROTATE, dx, dy, dz, ax, ay, ax, x, y, z, angle); @@ -1431,15 +1415,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c, TopoDS_Vertex vertex = TopoDS::Vertex(exp0.Current()); TopoDS_Shape bot = p ? p->FirstShape(vertex) : r->FirstShape(vertex); TopoDS_Shape top = p ? p->LastShape(vertex) : r->LastShape(vertex); - TopoDS_Shape lin; - if(p){ - BRepSweep_Prism prism = p->Prism(); - lin = prism.Shape(vertex); - } - else{ - BRepSweep_Revol revol = r->Revol(); - lin = revol.Shape(vertex); - } + TopoDS_Shape lin = p ? p->Shape(vertex) : r->Shape(vertex); { ExtrudeParams *ee = new ExtrudeParams(EXTRUDED_ENTITY); ee->fill(p ? TRANSLATE : ROTATE, dx, dy, dz, ax, ay, ax, x, y, z, angle); @@ -1540,7 +1516,11 @@ void OCC_Internals::_extrude(int mode, return; } result = p.Shape(); - if(e) _setMeshAttr(c, &p, 0, e, 0., 0., 0., dx, dy, dz, 0., 0., 0., 0.); + if(e){ + const BRepSweep_Prism &prism(p.Prism()); + _setMeshAttr(c, (BRepSweep_Prism*)&prism, 0, e, + 0., 0., 0., dx, dy, dz, 0., 0., 0., 0.); + } } else if(mode == 1){ // revolve gp_Ax1 axisOfRevolution(gp_Pnt(x, y, z), gp_Dir(ax, ay, az)); @@ -1551,8 +1531,11 @@ void OCC_Internals::_extrude(int mode, return; } result = r.Shape(); - if(e) - _setMeshAttr(c, 0, &r, e, x, y, z, 0., 0., 0., ax, ay, az, angle); + if(e){ + const BRepSweep_Revol &revol(r.Revol()); + _setMeshAttr(c, 0, (BRepSweep_Revol*)&revol, e, + x, y, z, 0., 0., 0., ax, ay, az, angle); + } } else if(mode == 2){ // pipe if(!_tagWire.IsBound(wireTag)){ diff --git a/Geo/GModelIO_OCC.h b/Geo/GModelIO_OCC.h index e0f8fdb00f88d9b6aca4085617a7bde12eb1b22d..2b06266f1299a90183861b57ec9ccf352d4f2227 100644 --- a/Geo/GModelIO_OCC.h +++ b/Geo/GModelIO_OCC.h @@ -30,8 +30,8 @@ class ExtrudeParams; #include <TopTools_ShapeMapHasher.hxx> #include <NCollection_DataMap.hxx> -class BRepPrimAPI_MakePrism; -class BRepPrimAPI_MakeRevol; +class BRepSweep_Prism; +class BRepSweep_Revol; class BRepBuilderAPI_Transform; class OCC_Internals { @@ -99,8 +99,8 @@ class OCC_Internals { ExtrudeParams *e=0); // set mesh attributes for extruded meshes - void _setMeshAttr(const TopoDS_Compound &c, BRepPrimAPI_MakePrism *p, - BRepPrimAPI_MakeRevol *r, ExtrudeParams *e, + void _setMeshAttr(const TopoDS_Compound &c, BRepSweep_Prism *p, + BRepSweep_Revol *r, ExtrudeParams *e, double x, double y, double z, double dx, double dy, double dz, double ax, double ay, double az, double angle);