diff --git a/src/Mod/Part/App/PrimitiveFeature.cpp b/src/Mod/Part/App/PrimitiveFeature.cpp index e6978e712b..e958ec30ec 100644 --- a/src/Mod/Part/App/PrimitiveFeature.cpp +++ b/src/Mod/Part/App/PrimitiveFeature.cpp @@ -27,6 +27,7 @@ # include # include # include +# include # include # include # include @@ -34,6 +35,7 @@ # include # include # include +# include # include # include # include @@ -421,13 +423,30 @@ App::DocumentObjectExecReturn *Torus::execute(void) if (Radius2.getValue() < Precision::Confusion()) return new App::DocumentObjectExecReturn("Radius of torus too small"); try { +#if 1 // Build a torus + gp_Circ circle; + circle.SetRadius(Radius2.getValue()); + gp_Pnt pos(Radius1.getValue(),0,0); + gp_Dir dir(0,1,0); + circle.SetAxis(gp_Ax1(pos, dir)); + + BRepBuilderAPI_MakeEdge mkEdge(circle, Base::toRadians(Angle1.getValue()+180.0f), + Base::toRadians(Angle2.getValue()+180.0f)); + BRepBuilderAPI_MakeWire mkWire; + mkWire.Add(mkEdge.Edge()); + BRepBuilderAPI_MakeFace mkFace(mkWire.Wire()); + BRepPrimAPI_MakeRevol mkRevol(mkFace.Face(), gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), + Base::toRadians(Angle3.getValue()), Standard_True); + TopoDS_Shape ResultShape = mkRevol.Shape(); +#else BRepPrimAPI_MakeTorus mkTorus(Radius1.getValue(), Radius2.getValue(), Angle1.getValue()/180.0f*Standard_PI, Angle2.getValue()/180.0f*Standard_PI, Angle3.getValue()/180.0f*Standard_PI); const TopoDS_Solid& ResultShape = mkTorus.Solid(); +#endif this->Shape.setValue(ResultShape); } catch (Standard_Failure) {