From e385d69580de32df6dcfd009853ddd4eb8a3191e Mon Sep 17 00:00:00 2001 From: Maxime Curioni Date: Sat, 2 Aug 2008 07:39:49 +0000 Subject: soc-2008-mxcurioni: Made crucial corrections to stabilize the system. Most of the original styles are supported: stroke attributes are correctly taken into account, Python shaders are supported. Added SamplingShader. --- .../freestyle/intern/view_map/Interface0D.h | 162 +++++++++++++++++---- 1 file changed, 130 insertions(+), 32 deletions(-) (limited to 'source/blender/freestyle/intern/view_map/Interface0D.h') diff --git a/source/blender/freestyle/intern/view_map/Interface0D.h b/source/blender/freestyle/intern/view_map/Interface0D.h index eaa6d31829b..89d8f606264 100755 --- a/source/blender/freestyle/intern/view_map/Interface0D.h +++ b/source/blender/freestyle/intern/view_map/Interface0D.h @@ -40,6 +40,7 @@ using namespace std; #include "../system/Iterator.h" //soc +#include "../python/Director.h" // // Interface0D @@ -56,6 +57,10 @@ class Interface0D { public: + PyObject *py_if0D; + + /*! Default constructor */ + Interface0D() { py_if0D = 0; } virtual ~Interface0D() {}; //soc /*! Returns the string "Interface0D".*/ @@ -67,94 +72,187 @@ public: /*! Returns the 3D x coordinate of the point. */ virtual real getX() const { - cerr << "Warning: method getX() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getX") ) { + return Director_BPy_Interface0D_getX(py_if0D); + } else { + cerr << "Warning: " << name << " getX() not implemented" << endl; + return 0; + } } + /*! Returns the 3D y coordinate of the point. */ virtual real getY() const { - cerr << "Warning: method getY() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getY") ) { + return Director_BPy_Interface0D_getY(py_if0D); + } else { + cerr << "Warning: " << name << " getY() not implemented" << endl; + return 0; + } } /*! Returns the 3D z coordinate of the point. */ virtual real getZ() const { - cerr << "Warning: method getZ() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getZ") ) { + return Director_BPy_Interface0D_getZ(py_if0D); + } else { + cerr << "Warning: " << name << " getZ() not implemented" << endl; + return 0; + } } /*! Returns the 3D point. */ virtual Geometry::Vec3f getPoint3D() const { - cerr << "Warning: method getPoint3D() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getPoint3D") ) { + return Director_BPy_Interface0D_getPoint3D(py_if0D); + } else { + cerr << "Warning: " << name << " getPoint3D() not implemented" << endl; + return 0; + } } /*! Returns the 2D x coordinate of the point. */ virtual real getProjectedX() const { - cerr << "Warning: method getProjectedX() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getProjectedX") ) { + return Director_BPy_Interface0D_getProjectedX(py_if0D); + } else { + cerr << "Warning: " << name << " getProjectedX() not implemented" << endl; + return 0; + } } /*! Returns the 2D y coordinate of the point. */ virtual real getProjectedY() const { - cerr << "Warning: method getProjectedY() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getProjectedY") ) { + return Director_BPy_Interface0D_getProjectedY(py_if0D); + } else { + cerr << "Warning: " << name << " getProjectedY() not implemented" << endl; + return 0; + } } /*! Returns the 2D z coordinate of the point. */ virtual real getProjectedZ() const { - cerr << "Warning: method getProjectedZ() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getProjectedZ") ) { + return Director_BPy_Interface0D_getProjectedZ(py_if0D); + } else { + cerr << "Warning: " << name << " getProjectedZ() not implemented" << endl; + return 0; + } } /*! Returns the 2D point. */ virtual Geometry::Vec2f getPoint2D() const { - cerr << "Warning: method getPoint2D() not implemented" << endl; - return 0; - } + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + if( py_if0D && PyObject_HasAttrString(py_if0D, "getPoint2D") ) { + return Director_BPy_Interface0D_getPoint2D(py_if0D); + } else { + cerr << "Warning: " << name << " getPoint2D() not implemented" << endl; + return 0; + } + } + /*! Returns the FEdge that lies between this Interface0D and the * Interface0D given as argument. */ virtual FEdge* getFEdge(Interface0D&) { - cerr << "Warning: method getFEdge() not implemented" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getFEdge") ) { + return Director_BPy_Interface0D_getFEdge(py_if0D); + } else { + cerr << "Warning: " << name << " getFEdge() not implemented" << endl; + return 0; + } } /*! Returns the Id of the point. */ virtual Id getId() const { - cerr << "Warning: method getId() not implemented" << endl; - return Id(0, 0); + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getId") ) { + return Director_BPy_Interface0D_getId(py_if0D); + } else { + cerr << "Warning: " << name << " getId() not implemented" << endl; + return 0; + } } /*! Returns the nature of the point. */ virtual Nature::VertexNature getNature() const { - cerr << "Warning: method getNature() not implemented" << endl; - return Nature::POINT; - } + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "getNature") ) { + return Director_BPy_Interface0D_getNature(py_if0D); + } else { + cerr << "Warning: " << name << " getNature() not implemented" << endl; + return Nature::POINT; + } + } + /*! Cast the Interface0D in SVertex if it can be. */ virtual SVertex * castToSVertex(){ - cerr << "Warning: can't cast this Interface0D in SVertex" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "castToSVertex") ) { + return Director_BPy_Interface0D_castToSVertex(py_if0D); + } else { + cerr << "Warning: " << name << " castToSVertex() not implemented" << endl; + return 0; + } } /*! Cast the Interface0D in ViewVertex if it can be. */ virtual ViewVertex * castToViewVertex(){ - cerr << "Warning: can't cast this Interface0D in ViewVertex" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "castToViewVertex") ) { + return Director_BPy_Interface0D_castToViewVertex(py_if0D); + } else { + cerr << "Warning: " << name << " castToViewVertex() not implemented" << endl; + return 0; + } } /*! Cast the Interface0D in NonTVertex if it can be. */ virtual NonTVertex * castToNonTVertex(){ - cerr << "Warning: can't cast this Interface0D in NonTVertex" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "castToNonTVertex") ) { + return Director_BPy_Interface0D_castToNonTVertex(py_if0D); + } else { + cerr << "Warning: " << name << " castToNonTVertex() not implemented" << endl; + return 0; + } } /*! Cast the Interface0D in TVertex if it can be. */ virtual TVertex * castToTVertex(){ - cerr << "Warning: can't cast this Interface0D in TVertex" << endl; - return 0; + string name( py_if0D ? PyString_AsString(PyObject_CallMethod(py_if0D, "getExactTypeName", "")) : getExactTypeName() ); + + if( py_if0D && PyObject_HasAttrString(py_if0D, "castToTVertex") ) { + return Director_BPy_Interface0D_castToTVertex(py_if0D); + } else { + cerr << "Warning: " << name << " castToTVertex() not implemented" << endl; + return 0; + } } + }; -- cgit v1.2.3