From 6763d3a6e48b6f74d48bca593baa8773897c7220 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 6 Feb 2016 18:54:40 +0100 Subject: [PATCH] + add Puthon binding to AbstractSplitView --- src/Gui/SplitView3DInventor.cpp | 221 ++++++++++++++++++++++++++++++++ src/Gui/SplitView3DInventor.h | 28 +++- 2 files changed, 248 insertions(+), 1 deletion(-) diff --git a/src/Gui/SplitView3DInventor.cpp b/src/Gui/SplitView3DInventor.cpp index 5b7bfe831446..5526c879d13b 100644 --- a/src/Gui/SplitView3DInventor.cpp +++ b/src/Gui/SplitView3DInventor.cpp @@ -367,6 +367,227 @@ void AbstractSplitView::setOverrideCursor(const QCursor& aCursor) //_viewer->getWidget()->setCursor(aCursor); } +PyObject *AbstractSplitView::getPyObject(void) +{ + static bool init = false; + if (!init) { + init = true; + AbstractSplitViewPy::init_type(); + } + + return new AbstractSplitViewPy(this); +} + +void AbstractSplitView::setPyObject(PyObject *) +{ + throw Base::AttributeError("Attribute is read-only"); +} + +// ------------------------------------------------------ + +void AbstractSplitViewPy::init_type() +{ + behaviors().name("AbstractSplitViewPy"); + behaviors().doc("Python binding class for the Inventor viewer class"); + // you must have overwritten the virtual functions + behaviors().supportRepr(); + + add_varargs_method("fitAll",&AbstractSplitViewPy::fitAll,"fitAll()"); + add_varargs_method("viewBottom",&AbstractSplitViewPy::viewBottom,"viewBottom()"); + add_varargs_method("viewFront",&AbstractSplitViewPy::viewFront,"viewFront()"); + add_varargs_method("viewLeft",&AbstractSplitViewPy::viewLeft,"viewLeft()"); + add_varargs_method("viewRear",&AbstractSplitViewPy::viewRear,"viewRear()"); + add_varargs_method("viewRight",&AbstractSplitViewPy::viewRight,"viewRight()"); + add_varargs_method("viewTop",&AbstractSplitViewPy::viewTop,"viewTop()"); + add_varargs_method("viewAxometric",&AbstractSplitViewPy::viewAxometric,"viewAxometric()"); +} + +AbstractSplitViewPy::AbstractSplitViewPy(AbstractSplitView *vi) + : _view(vi) +{ +} + +AbstractSplitViewPy::~AbstractSplitViewPy() +{ +} + +Py::Object AbstractSplitViewPy::repr() +{ + std::string s; + std::ostringstream s_out; + if (!_view) + throw Py::RuntimeError("Cannot print representation of deleted object"); + s_out << "AbstractSplitView"; + return Py::String(s_out.str()); +} + +Py::Object AbstractSplitViewPy::fitAll(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewFit", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewBottom(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewBottom", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewFront(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewFront", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewLeft(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewLeft", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewRear(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewRear", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewRight(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewRight", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewTop(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewTop", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + +Py::Object AbstractSplitViewPy::viewAxometric(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + + try { + _view->onMsg("ViewAxo", 0); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + // ------------------------------------------------------ TYPESYSTEM_SOURCE_ABSTRACT(Gui::SplitView3DInventor, Gui::AbstractSplitView); diff --git a/src/Gui/SplitView3DInventor.h b/src/Gui/SplitView3DInventor.h index bb01c76279d5..d32afd0008db 100644 --- a/src/Gui/SplitView3DInventor.h +++ b/src/Gui/SplitView3DInventor.h @@ -27,6 +27,7 @@ #include "MDIView.h" #include +#include #include namespace Gui { @@ -54,9 +55,11 @@ class GuiExport AbstractSplitView : public MDIView, public ParameterGrp::Observe virtual void deleteSelf(); View3DInventorViewer *getViewer(unsigned int) const; - void setOverrideCursor(const QCursor&); + PyObject *getPyObject(void); + void setPyObject(PyObject *); + protected: void setupSettings(); @@ -66,6 +69,29 @@ class GuiExport AbstractSplitView : public MDIView, public ParameterGrp::Observe std::vector _viewer; }; +class AbstractSplitViewPy : public Py::PythonExtension +{ +public: + static void init_type(void); // announce properties and methods + + AbstractSplitViewPy(AbstractSplitView *vi); + ~AbstractSplitViewPy(); + + Py::Object repr(); + + Py::Object fitAll(const Py::Tuple&); + Py::Object viewBottom(const Py::Tuple&); + Py::Object viewFront(const Py::Tuple&); + Py::Object viewLeft(const Py::Tuple&); + Py::Object viewRear(const Py::Tuple&); + Py::Object viewRight(const Py::Tuple&); + Py::Object viewTop(const Py::Tuple&); + Py::Object viewAxometric(const Py::Tuple&); + +private: + AbstractSplitView* _view; +}; + /** The SplitView3DInventor class allows to create a window with two or more Inventor views. * \author Werner Mayer */