Skip to content

Commit

Permalink
+ add Puthon binding to AbstractSplitView
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Feb 6, 2016
1 parent c30031f commit 6763d3a
Show file tree
Hide file tree
Showing 2 changed files with 248 additions and 1 deletion.
221 changes: 221 additions & 0 deletions src/Gui/SplitView3DInventor.cpp
Expand Up @@ -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);
Expand Down
28 changes: 27 additions & 1 deletion src/Gui/SplitView3DInventor.h
Expand Up @@ -27,6 +27,7 @@
#include "MDIView.h"

#include <Base/Parameter.h>
#include <CXX/Extensions.hxx>
#include <vector>

namespace Gui {
Expand Down Expand Up @@ -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();

Expand All @@ -66,6 +69,29 @@ class GuiExport AbstractSplitView : public MDIView, public ParameterGrp::Observe
std::vector<View3DInventorViewer*> _viewer;
};

class AbstractSplitViewPy : public Py::PythonExtension<AbstractSplitViewPy>
{
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
*/
Expand Down

0 comments on commit 6763d3a

Please sign in to comment.