From 481008629bb574bfd513b88ae2dccb8b18c5ee77 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Sun, 27 Aug 2017 20:43:09 -0400 Subject: [PATCH] Add dumpSymbol method to DrawViewSymbol based classes - this is mainly for debugging output from Arch/Draft --- src/Mod/TechDraw/App/DrawViewSymbol.cpp | 11 ++++++- src/Mod/TechDraw/App/DrawViewSymbol.h | 3 ++ src/Mod/TechDraw/App/DrawViewSymbolPy.xml | 5 ++++ src/Mod/TechDraw/App/DrawViewSymbolPyImp.cpp | 30 ++++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/Mod/TechDraw/App/DrawViewSymbol.cpp b/src/Mod/TechDraw/App/DrawViewSymbol.cpp index eab6f6fc41..d84cf12561 100644 --- a/src/Mod/TechDraw/App/DrawViewSymbol.cpp +++ b/src/Mod/TechDraw/App/DrawViewSymbol.cpp @@ -38,6 +38,8 @@ #include "DrawPage.h" #include "DrawViewSymbol.h" +#include // generated from DrawViewSymbolPy.xml + using namespace TechDraw; using namespace std; @@ -158,7 +160,14 @@ bool DrawViewSymbol::checkFit(TechDraw::DrawPage* p) const return result; } - +PyObject *DrawViewSymbol::getPyObject(void) +{ + if (PythonObject.is(Py::_None())) { + // ref counter is set to 1 + PythonObject = Py::Object(new DrawViewSymbolPy(this),true); + } + return Py::new_reference_to(PythonObject); +} // Python Drawing feature --------------------------------------------------------- diff --git a/src/Mod/TechDraw/App/DrawViewSymbol.h b/src/Mod/TechDraw/App/DrawViewSymbol.h index 73b2fbc395..05c1282f54 100644 --- a/src/Mod/TechDraw/App/DrawViewSymbol.h +++ b/src/Mod/TechDraw/App/DrawViewSymbol.h @@ -60,6 +60,9 @@ public: virtual QRectF getRect() const override; virtual bool checkFit(TechDraw::DrawPage* p) const override; + //return PyObject as DrawViewSymbolPy + virtual PyObject *getPyObject(void); + protected: virtual void onChanged(const App::Property* prop) override; diff --git a/src/Mod/TechDraw/App/DrawViewSymbolPy.xml b/src/Mod/TechDraw/App/DrawViewSymbolPy.xml index 794e7271e1..fac8392dd3 100644 --- a/src/Mod/TechDraw/App/DrawViewSymbolPy.xml +++ b/src/Mod/TechDraw/App/DrawViewSymbolPy.xml @@ -13,6 +13,11 @@ Feature for creating and manipulating Drawing SVG Symbol Views + + + dumpSymbol(fileSpec) - dump the contents of Symbol to a file + + diff --git a/src/Mod/TechDraw/App/DrawViewSymbolPyImp.cpp b/src/Mod/TechDraw/App/DrawViewSymbolPyImp.cpp index d07a36cad1..16ea2dff3f 100644 --- a/src/Mod/TechDraw/App/DrawViewSymbolPyImp.cpp +++ b/src/Mod/TechDraw/App/DrawViewSymbolPyImp.cpp @@ -1,6 +1,10 @@ #include "PreCompiled.h" +#include +#include +#include + #include "DrawViewSymbol.h" #include "DrawView.h" @@ -17,6 +21,32 @@ std::string DrawViewSymbolPy::representation(void) const return std::string(""); } +PyObject* DrawViewSymbolPy::dumpSymbol(PyObject *args) +{ + const char* fileSpec; + if (!PyArg_ParseTuple(args, "s", &fileSpec)) { + throw Py::TypeError("** dumpSymbol bad args."); + } + auto dvs = getDrawViewSymbolPtr(); + std::string symbolRepr; + if (dvs != nullptr) { + symbolRepr = dvs->Symbol.getValue(); + } + + Base::FileInfo fi(fileSpec); + std::ofstream outfile; + outfile.open(fi.filePath()); + outfile.write (symbolRepr.c_str(),symbolRepr.size()); + outfile.close(); + if (outfile.good()) { + outfile.close(); + } else { + std::string error = std::string("Can't write "); + error += fileSpec; + throw Py::Exception(error); + } + Py_Return; +} PyObject *DrawViewSymbolPy::getCustomAttributes(const char* /*attr*/) const {