// Copyright (C) 2002-2003 Gideon May (gideon@computer.org) // // Permission to copy, use, sell and distribute this software is granted // provided this copyright notice appears in all copies. // Permission to modify the code and to distribute modified code is granted // provided this copyright notice appears in all copies, and a notice // that the code was modified is included with the copyright notice. // // This software is provided "as is" without express or implied warranty, // and with no claim as to its suitability for any purpose. #ifdef __USE_OSX_IMPLEMENTATION__ #include #include "missing.hpp" #include #undef check #endif #include #include #include #include #include #include "held_ptr.hpp" using namespace boost::python; namespace { void print (osgProducer::OsgSceneHandler * self) { std::cerr << self << std::endl; } osgProducer::OsgSceneHandler * asOsgSceneHandler(Producer::Camera::SceneHandler * sh) { return dynamic_cast(sh); } class Callback : public osgProducer::OsgSceneHandler::Callback { public: Callback(PyObject * p) : _self(p) { Py_XINCREF(_self); } ~Callback() { Py_XDECREF(_self); } virtual void operator()(osgProducer::OsgSceneHandler &sh, Producer::Camera& cam) { try { call_method(_self, "apply", ptr(&sh), ptr(&cam)); } catch(...) { handle_exception(); PyErr_Print(); throw_error_already_set(); } } protected: PyObject * _self; }; } namespace PyOSG { void init_OsgSceneHandler() { def("asOsgSceneHandler", &asOsgSceneHandler, return_internal_reference<>()); class_, bases, boost::noncopyable > scene_handler("OsgSceneHandler", no_init); scope scene_handler_scope(scene_handler); scene_handler .def(init()) .def(init<>()) .def("setSceneView", &osgProducer::OsgSceneHandler::setSceneView) .def("getSceneView", (osgUtil::SceneView *(osgProducer::OsgSceneHandler::*)()) &osgProducer::OsgSceneHandler::getSceneView, return_internal_reference<>()) .def("init", &osgProducer::OsgSceneHandler::init) .def("clear", &osgProducer::OsgSceneHandler::clear) .def("clearImplementation", &osgProducer::OsgSceneHandler::clearImplementation) .def("setClearCallback", &osgProducer::OsgSceneHandler::setClearCallback) .def("cull", &osgProducer::OsgSceneHandler::cull) .def("cullImplementation", &osgProducer::OsgSceneHandler::cullImplementation) .def("setCullCallback", &osgProducer::OsgSceneHandler::setCullCallback) .def("draw", &osgProducer::OsgSceneHandler::draw) .def("drawImplementation", &osgProducer::OsgSceneHandler::drawImplementation) .def("setDrawCallback", &osgProducer::OsgSceneHandler::setDrawCallback) .def("setContextID", &osgProducer::OsgSceneHandler::setContextID) ; class_, bases, boost::noncopyable > callback("Callback", no_init); callback. def(init<>()) ; } } //namespace PyOSG