diff --git a/CMakeLists.txt b/CMakeLists.txt index ed87f343d9dbed09de24413dcac5e9f23129f933..02683c25f566cc0131e9724ba52b95645b8344c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ include (plugin) -openflipper_plugin (DIRS Snappy - TYPES SPLATCLOUD TRIANGLEMESH POLYMESH ) +openflipper_plugin (PYTHONINTERFACE + DIRS Snappy + TYPES SPLATCLOUD TRIANGLEMESH POLYMESH ) diff --git a/PythonInterface/Python.cc b/PythonInterface/Python.cc new file mode 100644 index 0000000000000000000000000000000000000000..c8225290960b5e0a92827daff1b1e27ad66cd2f9 --- /dev/null +++ b/PythonInterface/Python.cc @@ -0,0 +1,98 @@ + +/*===========================================================================*\ +* * +* OpenFlipper * + * Copyright (c) 2001-2015, RWTH-Aachen University * + * Department of Computer Graphics and Multimedia * + * All rights reserved. * + * www.openflipper.org * + * * + *---------------------------------------------------------------------------* + * This file is part of OpenFlipper. * + *---------------------------------------------------------------------------* + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * + * 1. Redistributions of source code must retain the above copyright notice, * + * this list of conditions and the following disclaimer. * + * * + * 2. Redistributions in binary form must reproduce the above copyright * + * notice, this list of conditions and the following disclaimer in the * + * documentation and/or other materials provided with the distribution. * + * * + * 3. Neither the name of the copyright holder nor the names of its * + * contributors may be used to endorse or promote products derived from * + * this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER * + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * +* * +\*===========================================================================*/ + +#include +#include + + +#include +#include +#include +#include + +#include +#include + + + +namespace py = pybind11; + + + +PYBIND11_EMBEDDED_MODULE(FilePTS, m) { + + QObject* pluginPointer = getPluginPointer("FilePTS"); + + if (!pluginPointer) { + std::cerr << "Error Getting plugin pointer for Plugin-FilePTS" << std::endl; + return; + } + + FilePTSPlugin* plugin = qobject_cast(pluginPointer); + + if (!plugin) { + std::cerr << "Error converting plugin pointer for Plugin-FilePTS" << std::endl; + return; + } + + // Export our core. Make sure that the c++ worlds core object is not deleted if + // the python side gets deleted!! + py::class_< FilePTSPlugin,std::unique_ptr > pts(m, "FilePTS"); + + // On the c++ side we will just return the existing core instance + // and prevent the system to recreate a new core as we need + // to work on the existing one. + pts.def(py::init([plugin]() { return plugin; })); + + + + pts.def("loadObject", static_cast( &FilePTSPlugin::loadObject), + QCoreApplication::translate("PythonDocFilePTS","Loads an object and returns its id").toLatin1().data(), + py::arg(QCoreApplication::translate("PythonDocFilePTS","Filename").toLatin1().data()) ); + + pts.def("saveObject", &FilePTSPlugin::saveObject, + QCoreApplication::translate("PythonDocFilePTS","saves a given object to a file").toLatin1().data(), + py::arg(QCoreApplication::translate("PythonDocFilePTS","Object id to save").toLatin1().data()), + py::arg(QCoreApplication::translate("PythonDocFilePTS","Filename").toLatin1().data()) ); + + +}