From f56df2ebeee528295642a1684c9be53dcaeede69 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Tue, 20 Jun 2017 19:44:05 -0400 Subject: [PATCH] Add viewPartAsSvg in App --- src/Mod/TechDraw/App/AppTechDrawPy.cpp | 83 +++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/src/Mod/TechDraw/App/AppTechDrawPy.cpp b/src/Mod/TechDraw/App/AppTechDrawPy.cpp index fa069be5d1..eedd3fb04d 100644 --- a/src/Mod/TechDraw/App/AppTechDrawPy.cpp +++ b/src/Mod/TechDraw/App/AppTechDrawPy.cpp @@ -68,8 +68,6 @@ using Part::TopoShapePy; using Part::TopoShapeEdgePy; using Part::TopoShapeWirePy; -using Drawing::DXFOutput; - namespace TechDraw { class Module : public Py::ExtensionModule @@ -89,6 +87,9 @@ public: add_varargs_method("viewPartAsDxf",&Module::viewPartAsDxf, "string = viewPartAsDxf(DrawViewPart) -- Return the edges of a DrawViewPart in Dxf format." ); + add_varargs_method("viewPartAsSvg",&Module::viewPartAsSvg, + "string = viewPartAsSvg(DrawViewPart) -- Return the edges of a DrawViewPart in Svg format." + ); initialize("This is a module for making drawings"); // register with Python } virtual ~Module() {} @@ -347,7 +348,7 @@ private: ss << dxfOut.exportEdges(s); } // ss now contains all edges as Dxf - dxfReturn = Py::String(ss.str() + "\n0"); + dxfReturn = Py::String(ss.str()); } } catch (Base::Exception &e) { @@ -357,6 +358,82 @@ private: return dxfReturn; } + Py::Object viewPartAsSvg(const Py::Tuple& args) + { + PyObject *viewObj; + if (!PyArg_ParseTuple(args.ptr(), "O", &viewObj)) { + throw Py::Exception("expected (DrawViewPart)"); + } + Py::String svgReturn; + std::string grpHead1 = "\n"; + std::string grpTail = "\n"; + try { + App::DocumentObject* obj = 0; + TechDraw::DrawViewPart* dvp = 0; + Drawing::SVGOutput svgOut; + std::string svgText; + std::stringstream ss; + if (PyObject_TypeCheck(viewObj, &(TechDraw::DrawViewPartPy::Type))) { + obj = static_cast(viewObj)->getDocumentObjectPtr(); + dvp = static_cast(obj); + TechDrawGeometry::GeometryObject* go = dvp->getGeometryObject(); + //visibile group begin "" + ss << grpHead1; + double thick = dvp->LineWidth.getValue(); + ss << thick; + ss << grpHead2; + TopoDS_Shape s = go->getVisHard(); + ss << svgOut.exportEdges(s); + s = (go->getVisOutline()); + ss << svgOut.exportEdges(s); + if (dvp->SmoothVisible.getValue()) { + s = go->getVisSmooth(); + ss << svgOut.exportEdges(s); + } + if (dvp->SeamVisible.getValue()) { + s = go->getVisSeam(); + ss << svgOut.exportEdges(s); + } + //visible group end "" + ss << grpTail; + + if ( dvp->HardHidden.getValue() || + dvp->SmoothHidden.getValue() || + dvp->SeamHidden.getValue() ) { + //hidden group begin + ss << grpHead1; + thick = dvp->HiddenWidth.getValue(); + ss << thick; + ss << grpHead2; + if (dvp->HardHidden.getValue()) { + s = go->getHidHard(); + ss << svgOut.exportEdges(s); + s = go->getHidOutline(); + ss << svgOut.exportEdges(s); + } + if (dvp->SmoothHidden.getValue()) { + s = go->getHidSmooth(); + ss << svgOut.exportEdges(s); + } + if (dvp->SeamHidden.getValue()) { + s = go->getHidSeam(); + ss << svgOut.exportEdges(s); + } + ss << grpTail; + //hidden group end + } + // ss now contains all edges as Svg + svgReturn = Py::String(ss.str()); + } + } + catch (Base::Exception &e) { + throw Py::Exception(Base::BaseExceptionFreeCADError, e.what()); + } + + return svgReturn; + } + }; PyObject* initModule()