diff --git a/src/Mod/Part/App/AppPartPy.cpp b/src/Mod/Part/App/AppPartPy.cpp index 6387e8882a..afffec947d 100644 --- a/src/Mod/Part/App/AppPartPy.cpp +++ b/src/Mod/Part/App/AppPartPy.cpp @@ -89,6 +89,7 @@ # include # include #endif +# include #include #include @@ -455,6 +456,10 @@ public: "Create a ruled surface out of two edges or wires. If wires are used then" "these must have the same number of edges." ); + add_varargs_method("makeShellFromWires",&Module::makeShellFromWires, + "makeShellFromWires(Wires) -- Make a shell from wires.\n" + "The wires must have the same number of edges." + ); add_varargs_method("makeTube",&Module::makeTube, "makeTube(edge,radius,[continuity,max degree,max segments]) -- Create a tube.\n" "continuity is a string which must be 'C0','C1','C2','C3','CN','G1' or 'G1'," @@ -1630,6 +1635,30 @@ private: throw Py::Exception(PartExceptionOCCError, "creation of ruled surface failed"); } } + Py::Object makeShellFromWires(const Py::Tuple& args) + { + PyObject *pylist; + if (!PyArg_ParseTuple(args.ptr(), "O", &pylist)) + throw Py::Exception(); + + try { + BRepFill_Generator fill; + Py::Sequence list(pylist); + for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { + Py::TopoShape shape(*it); + const TopoDS_Shape& s = shape.extensionObject()->getTopoShapePtr()->getShape(); + if (!s.IsNull() && s.ShapeType() == TopAbs_WIRE) { + fill.AddWire(TopoDS::Wire(s)); + } + } + + fill.Perform(); + return Py::asObject(new TopoShapeShellPy(new TopoShape(fill.Shell()))); + } + catch (Standard_Failure&) { + throw Py::Exception(PartExceptionOCCError, "creation of shell failed"); + } + } Py::Object makeTube(const Py::Tuple& args) { PyObject *pshape;