+ add Puthon binding to AbstractSplitView

This commit is contained in:
wmayer 2016-02-06 18:54:40 +01:00
parent c30031f3d2
commit 6763d3a6e4
2 changed files with 248 additions and 1 deletions

View File

@ -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);

View File

@ -27,6 +27,7 @@
#include "MDIView.h"
#include <Base/Parameter.h>
#include <CXX/Extensions.hxx>
#include <vector>
namespace Gui {
@ -54,9 +55,11 @@ public:
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 @@ protected:
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
*/