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.
This commit is contained in:
@@ -92,9 +92,9 @@ PyObject * BPy_Interface1D_from_Interface1D( Interface1D& if1D ) {
|
||||
}
|
||||
|
||||
|
||||
PyObject * BPy_SVertex_from_SVertex( SVertex& sv ) {
|
||||
PyObject * BPy_SVertex_from_SVertex_ptr( SVertex *sv ) {
|
||||
PyObject *py_sv = SVertex_Type.tp_new( &SVertex_Type, 0, 0 );
|
||||
((BPy_SVertex *) py_sv)->sv = new SVertex( sv );
|
||||
((BPy_SVertex *) py_sv)->sv = sv;
|
||||
((BPy_SVertex *) py_sv)->py_if0D.if0D = ((BPy_SVertex *) py_sv)->sv;
|
||||
|
||||
return py_sv;
|
||||
@@ -119,18 +119,17 @@ PyObject * BPy_Nature_from_Nature( unsigned short n ) {
|
||||
return py_n;
|
||||
}
|
||||
|
||||
PyObject * BPy_Stroke_from_Stroke( Stroke& s ) {
|
||||
PyObject * BPy_Stroke_from_Stroke_ptr( Stroke* s ) {
|
||||
PyObject *py_s = Stroke_Type.tp_new( &Stroke_Type, 0, 0 );
|
||||
((BPy_Stroke *) py_s)->s = new Stroke( s );
|
||||
((BPy_Stroke *) py_s)->s = s;
|
||||
((BPy_Stroke *) py_s)->py_if1D.if1D = ((BPy_Stroke *) py_s)->s;
|
||||
|
||||
return py_s;
|
||||
}
|
||||
|
||||
PyObject * BPy_StrokeAttribute_from_StrokeAttribute( StrokeAttribute& sa ) {
|
||||
PyObject * BPy_StrokeAttribute_from_StrokeAttribute_ptr( StrokeAttribute *sa ) {
|
||||
PyObject *py_sa = StrokeAttribute_Type.tp_new( &StrokeAttribute_Type, 0, 0 );
|
||||
((BPy_StrokeAttribute *) py_sa)->sa = new StrokeAttribute( sa );
|
||||
|
||||
((BPy_StrokeAttribute *) py_sa)->sa = sa;
|
||||
return py_sa;
|
||||
}
|
||||
|
||||
@@ -145,9 +144,9 @@ PyObject * BPy_MediumType_from_MediumType( int n ) {
|
||||
return py_mt;
|
||||
}
|
||||
|
||||
PyObject * BPy_StrokeVertex_from_StrokeVertex( StrokeVertex& sv ) {
|
||||
PyObject * BPy_StrokeVertex_from_StrokeVertex_ptr( StrokeVertex *sv ) {
|
||||
PyObject *py_sv = StrokeVertex_Type.tp_new( &StrokeVertex_Type, 0, 0 );
|
||||
((BPy_StrokeVertex *) py_sv)->sv = new StrokeVertex( sv );
|
||||
((BPy_StrokeVertex *) py_sv)->sv = sv;
|
||||
((BPy_StrokeVertex *) py_sv)->py_cp.cp = ((BPy_StrokeVertex *) py_sv)->sv;
|
||||
((BPy_StrokeVertex *) py_sv)->py_cp.py_if0D.if0D = ((BPy_StrokeVertex *) py_sv)->sv;
|
||||
|
||||
@@ -169,9 +168,9 @@ PyObject * BPy_BBox_from_BBox( BBox< Vec3r > &bb ) {
|
||||
return py_bb;
|
||||
}
|
||||
|
||||
PyObject * BPy_ViewEdge_from_ViewEdge( ViewEdge& ve ) {
|
||||
PyObject * BPy_ViewEdge_from_ViewEdge_ptr( ViewEdge* ve ) {
|
||||
PyObject *py_ve = ViewEdge_Type.tp_new( &ViewEdge_Type, 0, 0 );
|
||||
((BPy_ViewEdge *) py_ve)->ve = new ViewEdge( ve );
|
||||
((BPy_ViewEdge *) py_ve)->ve = ve;
|
||||
((BPy_ViewEdge *) py_ve)->py_if1D.if1D = ((BPy_ViewEdge *) py_ve)->ve;
|
||||
|
||||
return py_ve;
|
||||
@@ -219,7 +218,7 @@ PyObject * BPy_CurvePoint_from_CurvePoint( CurvePoint& cp ) {
|
||||
PyObject * BPy_directedViewEdge_from_directedViewEdge( ViewVertex::directedViewEdge& dve ) {
|
||||
PyObject *py_dve = PyList_New(2);
|
||||
|
||||
PyList_SetItem( py_dve, 0, BPy_ViewEdge_from_ViewEdge(*(dve.first)) );
|
||||
PyList_SetItem( py_dve, 0, BPy_ViewEdge_from_ViewEdge_ptr(dve.first) );
|
||||
PyList_SetItem( py_dve, 1, PyBool_from_bool(dve.second) );
|
||||
|
||||
return py_dve;
|
||||
@@ -316,7 +315,7 @@ PyObject * BPy_ChainSilhouetteIterator_from_ChainSilhouetteIterator( ChainSilhou
|
||||
//==============================
|
||||
|
||||
bool bool_from_PyBool( PyObject *b ) {
|
||||
return b == Py_True;
|
||||
return (b == Py_True || PyInt_AsLong(b) != 0);
|
||||
}
|
||||
|
||||
IntegrationType IntegrationType_from_BPy_IntegrationType( PyObject* obj ) {
|
||||
|
||||
@@ -82,12 +82,12 @@ PyObject * BPy_FrsMaterial_from_Material( Material& m );
|
||||
PyObject * BPy_Nature_from_Nature( unsigned short n );
|
||||
PyObject * BPy_MediumType_from_MediumType( int n );
|
||||
PyObject * BPy_SShape_from_SShape( SShape& ss );
|
||||
PyObject * BPy_Stroke_from_Stroke( Stroke& s );
|
||||
PyObject * BPy_StrokeAttribute_from_StrokeAttribute( StrokeAttribute& sa );
|
||||
PyObject * BPy_StrokeVertex_from_StrokeVertex( StrokeVertex& sv );
|
||||
PyObject * BPy_SVertex_from_SVertex( SVertex& sv );
|
||||
PyObject * BPy_Stroke_from_Stroke_ptr( Stroke* s );
|
||||
PyObject * BPy_StrokeAttribute_from_StrokeAttribute_ptr( StrokeAttribute *sa );
|
||||
PyObject * BPy_StrokeVertex_from_StrokeVertex_ptr( StrokeVertex *sv );
|
||||
PyObject * BPy_SVertex_from_SVertex_ptr( SVertex *sv );
|
||||
PyObject * BPy_ViewVertex_from_ViewVertex_ptr( ViewVertex *vv );
|
||||
PyObject * BPy_ViewEdge_from_ViewEdge( ViewEdge& ve );
|
||||
PyObject * BPy_ViewEdge_from_ViewEdge_ptr( ViewEdge *ve );
|
||||
PyObject * BPy_ViewShape_from_ViewShape( ViewShape& vs );
|
||||
|
||||
PyObject * BPy_AdjacencyIterator_from_AdjacencyIterator( AdjacencyIterator& a_it );
|
||||
|
||||
@@ -183,12 +183,14 @@ PyMODINIT_FUNC Interface0D_Init( PyObject *module )
|
||||
int Interface0D___init__(BPy_Interface0D *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
self->if0D = new Interface0D();
|
||||
self->if0D->py_if0D = (PyObject *)self;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Interface0D___dealloc__(BPy_Interface0D* self)
|
||||
{
|
||||
delete self->if0D;
|
||||
if( self->if0D->py_if0D )
|
||||
delete self->if0D;
|
||||
self->ob_type->tp_free((PyObject*)self);
|
||||
}
|
||||
|
||||
|
||||
@@ -204,7 +204,8 @@ int Interface1D___init__(BPy_Interface1D *self, PyObject *args, PyObject *kwds)
|
||||
|
||||
void Interface1D___dealloc__(BPy_Interface1D* self)
|
||||
{
|
||||
delete self->if1D;
|
||||
if( self->if1D->py_if1D )
|
||||
delete self->if1D;
|
||||
self->ob_type->tp_free((PyObject*)self);
|
||||
}
|
||||
|
||||
|
||||
@@ -227,10 +227,6 @@ PyObject * Iterator_isEnd(BPy_Iterator* self) {
|
||||
return PyBool_from_bool( self->it->isEnd() );
|
||||
}
|
||||
|
||||
PyObject * Iterator_getObject(BPy_Iterator* self) {
|
||||
return PyBool_from_bool( self->it->isEnd() );
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -24,28 +24,27 @@ static PyObject * Operators_sequentialSplit(BPy_Operators* self, PyObject *args)
|
||||
static PyObject * Operators_recursiveSplit(BPy_Operators* self, PyObject *args);
|
||||
static PyObject * Operators_sort(BPy_Operators* self, PyObject *args);
|
||||
static PyObject * Operators_create(BPy_Operators* self, PyObject *args);
|
||||
static PyObject * Operators_getViewEdgesSize( BPy_Operators* self);
|
||||
static PyObject * Operators_getChainsSize( BPy_Operators* self);
|
||||
static PyObject * Operators_getStrokesSize( BPy_Operators* self);
|
||||
|
||||
/*----------------------Operators instance definitions ----------------------------*/
|
||||
static PyMethodDef BPy_Operators_methods[] = {
|
||||
{"select", ( PyCFunction ) Operators_select, METH_VARARGS | METH_STATIC,
|
||||
"select operator"},
|
||||
|
||||
{"bidirectionalChain", ( PyCFunction ) Operators_bidirectionalChain, METH_VARARGS | METH_STATIC,
|
||||
"select operator"},
|
||||
|
||||
"bidirectionalChain operator"},
|
||||
{"sequentialSplit", ( PyCFunction ) Operators_sequentialSplit, METH_VARARGS | METH_STATIC,
|
||||
"select operator"},
|
||||
|
||||
"sequentialSplit operator"},
|
||||
{"recursiveSplit", ( PyCFunction ) Operators_recursiveSplit, METH_VARARGS | METH_STATIC,
|
||||
"select operator"},
|
||||
|
||||
"recursiveSplit operator"},
|
||||
{"sort", ( PyCFunction ) Operators_sort, METH_VARARGS | METH_STATIC,
|
||||
"select operator"},
|
||||
|
||||
"sort operator"},
|
||||
{"create", ( PyCFunction ) Operators_create, METH_VARARGS | METH_STATIC,
|
||||
"select operator"},
|
||||
|
||||
|
||||
"create operator"},
|
||||
{"getViewEdgesSize", ( PyCFunction ) Operators_getViewEdgesSize, METH_NOARGS | METH_STATIC, ""},
|
||||
{"getChainsSize", ( PyCFunction ) Operators_getChainsSize, METH_NOARGS | METH_STATIC, ""},
|
||||
{"getStrokesSize", ( PyCFunction ) Operators_getStrokesSize, METH_NOARGS | METH_STATIC, ""},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
@@ -322,6 +321,19 @@ PyObject * Operators_create(BPy_Operators* self, PyObject *args)
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyObject * Operators_getViewEdgesSize( BPy_Operators* self) {
|
||||
return PyInt_FromLong( Operators::getViewEdgesSize() );
|
||||
}
|
||||
|
||||
PyObject * Operators_getChainsSize( BPy_Operators* self ) {
|
||||
return PyInt_FromLong( Operators::getChainsSize() );
|
||||
}
|
||||
|
||||
PyObject * Operators_getStrokesSize( BPy_Operators* self) {
|
||||
return PyInt_FromLong( Operators::getStrokesSize() );
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -228,7 +228,7 @@ PyObject * SShape_getVertexList( BPy_SShape *self ) {
|
||||
vector< SVertex * >::iterator it;
|
||||
|
||||
for( it = vertices.begin(); it != vertices.end(); it++ ) {
|
||||
PyList_Append( py_vertices, BPy_SVertex_from_SVertex(*( *it )) );
|
||||
PyList_Append( py_vertices, BPy_SVertex_from_SVertex_ptr(*it) );
|
||||
}
|
||||
|
||||
return py_vertices;
|
||||
|
||||
@@ -199,6 +199,7 @@ int StrokeAttribute___init__(BPy_StrokeAttribute *self, PyObject *args, PyObject
|
||||
return -1;
|
||||
}
|
||||
|
||||
self->sa->py_sa = (PyObject *) self;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -206,7 +207,8 @@ int StrokeAttribute___init__(BPy_StrokeAttribute *self, PyObject *args, PyObject
|
||||
|
||||
void StrokeAttribute___dealloc__(BPy_StrokeAttribute* self)
|
||||
{
|
||||
delete self->sa;
|
||||
if( self->sa->py_sa )
|
||||
delete self->sa;
|
||||
self->ob_type->tp_free((PyObject*)self);
|
||||
}
|
||||
|
||||
@@ -384,7 +386,7 @@ PyObject * StrokeAttribute_setThickness( BPy_StrokeAttribute *self, PyObject *ar
|
||||
PyFloat_AsDouble( PyList_GetItem(obj1, 1) ) );
|
||||
|
||||
self->sa->setThickness( v );
|
||||
|
||||
|
||||
} else if( obj1 && obj2 ){
|
||||
|
||||
self->sa->setThickness( PyFloat_AsDouble(obj1),
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "StrokeShader/BPy_IncreasingThicknessShader.h"
|
||||
#include "StrokeShader/BPy_PolygonalizationShader.h"
|
||||
#include "StrokeShader/BPy_SamplingShader.h"
|
||||
#include "StrokeShader/BPy_SmoothingShader.h"
|
||||
#include "StrokeShader/BPy_SpatialNoiseShader.h"
|
||||
#include "StrokeShader/BPy_streamShader.h"
|
||||
#include "StrokeShader/BPy_StrokeTextureShader.h"
|
||||
@@ -212,6 +213,11 @@ PyMODINIT_FUNC StrokeShader_Init( PyObject *module )
|
||||
Py_INCREF( &SamplingShader_Type );
|
||||
PyModule_AddObject(module, "SamplingShader", (PyObject *)&SamplingShader_Type);
|
||||
|
||||
if( PyType_Ready( &SmoothingShader_Type ) < 0 )
|
||||
return;
|
||||
Py_INCREF( &SmoothingShader_Type );
|
||||
PyModule_AddObject(module, "SmoothingShader", (PyObject *)&SmoothingShader_Type);
|
||||
|
||||
if( PyType_Ready( &SpatialNoiseShader_Type ) < 0 )
|
||||
return;
|
||||
Py_INCREF( &SpatialNoiseShader_Type );
|
||||
|
||||
@@ -174,6 +174,8 @@ PyObject * UnaryPredicate0D___call__( BPy_UnaryPredicate0D *self, PyObject *args
|
||||
|
||||
if( if0D_it )
|
||||
return PyBool_from_bool( self->up0D->operator()(*if0D_it) );
|
||||
else
|
||||
cerr << "ERROR: UnaryPredicate0D___call__ (no Interface0DIterator)" << endl;
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -216,6 +216,8 @@ PyObject * UnaryPredicate1D___call__( BPy_UnaryPredicate1D *self, PyObject *args
|
||||
|
||||
if( if1D )
|
||||
return PyBool_from_bool( self->up1D->operator()(*if1D) );
|
||||
else
|
||||
cerr << "ERROR: UnaryPredicate1D___call__ (no Interface1D)" << endl;
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ PyObject * ViewMap_getClosestViewEdge( BPy_ViewMap *self , PyObject *args) {
|
||||
|
||||
ViewEdge *ve = const_cast<ViewEdge *>( self->vm->getClosestViewEdge(x,y) );
|
||||
if( ve )
|
||||
return BPy_ViewEdge_from_ViewEdge(*ve);
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr(ve);
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ PyObject * ViewShape_edges( BPy_ViewShape *self ) {
|
||||
vector< ViewEdge * >::iterator it;
|
||||
|
||||
for( it = edges.begin(); it != edges.end(); it++ ) {
|
||||
PyList_Append( py_edges, BPy_ViewEdge_from_ViewEdge(*( *it )) );
|
||||
PyList_Append( py_edges, BPy_ViewEdge_from_ViewEdge_ptr(*it) );
|
||||
}
|
||||
|
||||
return py_edges;
|
||||
|
||||
@@ -13,6 +13,11 @@
|
||||
#include "BPy_StrokeShader.h"
|
||||
#include "Iterator/BPy_ChainingIterator.h"
|
||||
#include "Iterator/BPy_Interface0DIterator.h"
|
||||
#include "Interface0D/BPy_SVertex.h"
|
||||
#include "Interface0D/BPy_ViewVertex.h"
|
||||
#include "Interface0D/ViewVertex/BPy_NonTVertex.h"
|
||||
#include "Interface0D/ViewVertex/BPy_TVertex.h"
|
||||
#include "Interface1D/BPy_FEdge.h"
|
||||
#include "Interface1D/BPy_Stroke.h"
|
||||
#include "Interface1D/BPy_ViewEdge.h"
|
||||
#include "BPy_ViewShape.h"
|
||||
@@ -28,6 +33,15 @@
|
||||
#include "UnaryFunction0D/BPy_UnaryFunction0DVectorViewShape.h"
|
||||
#include "UnaryFunction0D/BPy_UnaryFunction0DViewShape.h"
|
||||
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DDouble.h"
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DEdgeNature.h"
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DFloat.h"
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DUnsigned.h"
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DVec2f.h"
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DVec3f.h"
|
||||
#include "UnaryFunction1D/BPy_UnaryFunction1DVectorViewShape.h"
|
||||
|
||||
|
||||
// BinaryPredicate0D: __call__
|
||||
bool Director_BPy_BinaryPredicate0D___call__( PyObject *obj, Interface0D& i1, Interface0D& i2) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "__call__", "OO", BPy_Interface0D_from_Interface0D(i1), BPy_Interface0D_from_Interface0D(i2) );
|
||||
@@ -62,7 +76,7 @@ bool Director_BPy_UnaryPredicate1D___call__( PyObject *obj, Interface1D& if1D) {
|
||||
|
||||
// StrokeShader: shade
|
||||
void Director_BPy_StrokeShader_shade( PyObject *obj, Stroke& s) {
|
||||
PyObject_CallMethod( obj, "shade", "O", BPy_Stroke_from_Stroke(s) );
|
||||
PyObject_CallMethod( obj, "shade", "O", BPy_Stroke_from_Stroke_ptr(&s) );
|
||||
}
|
||||
|
||||
// ChainingIterator: init, traverse
|
||||
@@ -89,7 +103,6 @@ void Director_BPy_UnaryFunction0D___call__( void *uf0D, PyObject *obj, Interface
|
||||
((UnaryFunction0D<Nature::EdgeNature> *) uf0D)->result = EdgeNature_from_BPy_Nature(result);
|
||||
|
||||
} else if ( BPy_UnaryFunction0DFloat_Check(obj) ) {
|
||||
|
||||
((UnaryFunction0D<float> *) uf0D)->result = PyFloat_AsDouble(result);
|
||||
|
||||
} else if ( BPy_UnaryFunction0DId_Check(obj) ) {
|
||||
@@ -129,20 +142,45 @@ void Director_BPy_UnaryFunction0D___call__( void *uf0D, PyObject *obj, Interface
|
||||
|
||||
void Director_BPy_UnaryFunction1D___call__( void *uf1D, PyObject *obj, Interface1D& if1D) {
|
||||
|
||||
// BPy_UnaryFunction1DDouble
|
||||
// BPy_UnaryFunction1DEdgeNature
|
||||
// BPy_UnaryFunction1DFloat
|
||||
// BPy_UnaryFunction1DUnsigned
|
||||
// BPy_UnaryFunction1DVec2f
|
||||
// BPy_UnaryFunction1DVec3f
|
||||
// BPy_UnaryFunction1DVectorViewShape
|
||||
// BPy_UnaryFunction1DVoid
|
||||
PyObject *result = PyObject_CallMethod( obj, "__call__", "O", BPy_Interface1D_from_Interface1D(if1D) );
|
||||
|
||||
if( BPy_UnaryFunction1DDouble_Check(obj) ) {
|
||||
((UnaryFunction1D<double> *) uf1D)->result = PyFloat_AsDouble(result);
|
||||
|
||||
} else if ( BPy_UnaryFunction1DEdgeNature_Check(obj) ) {
|
||||
((UnaryFunction1D<Nature::EdgeNature> *) uf1D)->result = EdgeNature_from_BPy_Nature(result);
|
||||
|
||||
} else if ( BPy_UnaryFunction1DFloat_Check(obj) ) {
|
||||
((UnaryFunction1D<float> *) uf1D)->result = PyFloat_AsDouble(result);
|
||||
|
||||
} else if ( BPy_UnaryFunction1DUnsigned_Check(obj) ) {
|
||||
((UnaryFunction1D<unsigned> *) uf1D)->result = PyInt_AsLong(result);
|
||||
|
||||
} else if ( BPy_UnaryFunction1DVec2f_Check(obj) ) {
|
||||
Vec2f *v = Vec2f_ptr_from_Vector( result );
|
||||
((UnaryFunction1D<Vec2f> *) uf1D)->result = *v;
|
||||
delete v;
|
||||
|
||||
} else if ( BPy_UnaryFunction1DVec3f_Check(obj) ) {
|
||||
Vec3f *v = Vec3f_ptr_from_Vector( result );
|
||||
((UnaryFunction1D<Vec3f> *) uf1D)->result = *v;
|
||||
delete v;
|
||||
|
||||
} else if ( BPy_UnaryFunction1DVectorViewShape_Check(obj) ) {
|
||||
vector<ViewShape*> vec;
|
||||
for( int i = 1; i < PyList_Size(result); i++) {
|
||||
ViewShape *b = ( (BPy_ViewShape *) PyList_GetItem(result, i) )->vs;
|
||||
vec.push_back( b );
|
||||
}
|
||||
|
||||
((UnaryFunction1D< vector<ViewShape*> > *) uf1D)->result = vec;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// BPy_Iterator: increment, decrement, isBegin, isEnd
|
||||
// Iterator: increment, decrement, isBegin, isEnd
|
||||
void Director_BPy_Iterator_increment( PyObject *obj ) {
|
||||
PyObject_CallMethod( obj, "increment", "", 0 );
|
||||
}
|
||||
@@ -163,7 +201,106 @@ bool Director_BPy_Iterator_isEnd( PyObject *obj ) {
|
||||
return bool_from_PyBool(result);
|
||||
}
|
||||
|
||||
// BPy_Interface1D: verticesBegin, verticesEnd, pointsBegin, pointsEnd
|
||||
// Interface0D: getX, getY, getZ, getPoint3D, getProjectedX, getProjectedY, getProjectedZ, getPoint2D, getFEdge, getId, getNature, castToSVertex, castToViewVertex, castToNonTVertex, castToTVertex
|
||||
double Director_BPy_Interface0D_getX( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getX", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
double Director_BPy_Interface0D_getY( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getY", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
double Director_BPy_Interface0D_getZ( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getZ", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
Geometry::Vec3f Director_BPy_Interface0D_getPoint3D( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getPoint3D", "", 0 );
|
||||
|
||||
Geometry::Vec3f *v_ref = Vec3f_ptr_from_Vector( result );
|
||||
Geometry::Vec3f v(*v_ref);
|
||||
delete v_ref;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
double Director_BPy_Interface0D_getProjectedX( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getProjectedX", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
double Director_BPy_Interface0D_getProjectedY( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getProjectedY", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
double Director_BPy_Interface0D_getProjectedZ( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getProjectedZ", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
Geometry::Vec2f Director_BPy_Interface0D_getPoint2D( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getPoint2D", "", 0 );
|
||||
|
||||
Geometry::Vec2f *v_ref = Vec2f_ptr_from_Vector( result );
|
||||
Geometry::Vec2f v(*v_ref);
|
||||
delete v_ref;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
FEdge * Director_BPy_Interface0D_getFEdge( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getFEdge", "", 0 );
|
||||
|
||||
return ((BPy_FEdge *) result)->fe;
|
||||
}
|
||||
|
||||
Id Director_BPy_Interface0D_getId( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getId", "", 0 );
|
||||
|
||||
return *( ((BPy_Id *) result)->id );
|
||||
}
|
||||
|
||||
Nature::EdgeNature Director_BPy_Interface0D_getNature( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getNature", "", 0 );
|
||||
|
||||
return EdgeNature_from_BPy_Nature(result);
|
||||
}
|
||||
|
||||
SVertex * Director_BPy_Interface0D_castToSVertex( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "castToSVertex", "", 0 );
|
||||
|
||||
return ((BPy_SVertex *) result)->sv;
|
||||
}
|
||||
|
||||
ViewVertex * Director_BPy_Interface0D_castToViewVertex( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "castToViewVertex", "", 0 );
|
||||
|
||||
return ((BPy_ViewVertex *) result)->vv;
|
||||
}
|
||||
|
||||
NonTVertex * Director_BPy_Interface0D_castToNonTVertex( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "castToNonTVertex", "", 0 );
|
||||
|
||||
return ((BPy_NonTVertex *) result)->ntv;
|
||||
}
|
||||
|
||||
TVertex * Director_BPy_Interface0D_castToTVertex( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "castToTVertex", "", 0 );
|
||||
|
||||
return ((BPy_TVertex *) result)->tv;
|
||||
}
|
||||
|
||||
// Interface1D: verticesBegin, verticesEnd, pointsBegin, pointsEnd
|
||||
Interface0DIterator Director_BPy_Interface1D_verticesBegin( PyObject *obj ){
|
||||
PyObject *result = PyObject_CallMethod( obj, "verticesBegin", "", 0 );
|
||||
|
||||
@@ -188,3 +325,20 @@ Interface0DIterator Director_BPy_Interface1D_pointsEnd( PyObject *obj ){
|
||||
return *( ((BPy_Interface0DIterator *) result)->if0D_it );
|
||||
}
|
||||
|
||||
double Director_BPy_Interface1D_getLength2D( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getLength2D", "", 0 );
|
||||
|
||||
return PyFloat_AsDouble(result);
|
||||
}
|
||||
|
||||
Id Director_BPy_Interface1D_getId( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getId", "", 0 );
|
||||
|
||||
return *( ((BPy_Id *) result)->id );
|
||||
}
|
||||
|
||||
Nature::EdgeNature Director_BPy_Interface1D_getNature( PyObject *obj ) {
|
||||
PyObject *result = PyObject_CallMethod( obj, "getNature", "", 0 );
|
||||
|
||||
return EdgeNature_from_BPy_Nature( result );
|
||||
}
|
||||
@@ -1,12 +1,22 @@
|
||||
#ifndef FREESTYLE_PYTHON_DIRECTOR
|
||||
# define FREESTYLE_PYTHON_DIRECTOR
|
||||
|
||||
#include "../geometry/Geom.h"
|
||||
#include "../winged_edge/Nature.h"
|
||||
|
||||
class AdjacencyIterator;
|
||||
class FEdge;
|
||||
class Id;
|
||||
class Interface0D;
|
||||
class Interface1D;
|
||||
class Interface0DIterator;
|
||||
class NonTVertex;
|
||||
class Stroke;
|
||||
class AdjacencyIterator;
|
||||
class SVertex;
|
||||
class TVertex;
|
||||
class ViewEdge;
|
||||
class ViewVertex;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -24,6 +34,36 @@ bool Director_BPy_BinaryPredicate0D___call__( PyObject *obj, Interface0D& i1, In
|
||||
// BinaryPredicate1D: __call__
|
||||
bool Director_BPy_BinaryPredicate1D___call__( PyObject *obj, Interface1D& i1, Interface1D& i2);
|
||||
|
||||
// Interface0D: getX, getY, getZ, getPoint3D, getProjectedX, getProjectedY, getProjectedZ, getPoint2D, getFEdge, getId, getNature, castToSVertex, castToViewVertex, castToNonTVertex, castToTVertex
|
||||
double Director_BPy_Interface0D_getX( PyObject *obj );
|
||||
double Director_BPy_Interface0D_getY( PyObject *obj );
|
||||
double Director_BPy_Interface0D_getZ( PyObject *obj );
|
||||
Geometry::Vec3f Director_BPy_Interface0D_getPoint3D( PyObject *obj );
|
||||
double Director_BPy_Interface0D_getProjectedX( PyObject *obj );
|
||||
double Director_BPy_Interface0D_getProjectedY( PyObject *obj );
|
||||
double Director_BPy_Interface0D_getProjectedZ( PyObject *obj );
|
||||
Geometry::Vec2f Director_BPy_Interface0D_getPoint2D( PyObject *obj );
|
||||
FEdge * Director_BPy_Interface0D_getFEdge( PyObject *obj );
|
||||
Id Director_BPy_Interface0D_getId( PyObject *obj );
|
||||
Nature::EdgeNature Director_BPy_Interface0D_getNature( PyObject *obj );
|
||||
SVertex * Director_BPy_Interface0D_castToSVertex( PyObject *obj );
|
||||
ViewVertex * Director_BPy_Interface0D_castToViewVertex( PyObject *obj );
|
||||
NonTVertex * Director_BPy_Interface0D_castToNonTVertex( PyObject *obj );
|
||||
TVertex * Director_BPy_Interface0D_castToTVertex( PyObject *obj );
|
||||
|
||||
// Interface1D: verticesBegin, verticesEnd, pointsBegin, pointsEnd, getLength2D, getId, getNature
|
||||
Interface0DIterator Director_BPy_Interface1D_verticesBegin( PyObject *obj );
|
||||
Interface0DIterator Director_BPy_Interface1D_verticesEnd( PyObject *obj );
|
||||
Interface0DIterator Director_BPy_Interface1D_pointsBegin( PyObject *obj );
|
||||
Interface0DIterator Director_BPy_Interface1D_pointsEnd( PyObject *obj );
|
||||
double Director_BPy_Interface1D_getLength2D( PyObject *obj );
|
||||
Id Director_BPy_Interface1D_getId( PyObject *obj );
|
||||
Nature::EdgeNature Director_BPy_Interface1D_getNature( PyObject *obj );
|
||||
|
||||
// UnaryFunction{0D,1D}: __call__
|
||||
void Director_BPy_UnaryFunction0D___call__( void *uf0D, PyObject *obj, Interface0DIterator& if0D_it);
|
||||
void Director_BPy_UnaryFunction1D___call__( void *uf1D, PyObject *obj, Interface1D& if1D);
|
||||
|
||||
// UnaryPredicate0D: __call__
|
||||
bool Director_BPy_UnaryPredicate0D___call__( PyObject *obj, Interface0DIterator& if0D_it);
|
||||
|
||||
@@ -33,25 +73,17 @@ bool Director_BPy_UnaryPredicate1D___call__( PyObject *obj, Interface1D& if1D);
|
||||
// StrokeShader: shade
|
||||
void Director_BPy_StrokeShader_shade( PyObject *obj, Stroke& s);
|
||||
|
||||
// ChainingIterator: init, traverse
|
||||
void Director_BPy_ChainingIterator_init( PyObject *obj );
|
||||
ViewEdge * Director_BPy_ChainingIterator_traverse( PyObject *obj, AdjacencyIterator& a_it );
|
||||
|
||||
// BPy_UnaryFunction{0D,1D}: __call__
|
||||
void Director_BPy_UnaryFunction0D___call__( void *uf0D, PyObject *obj, Interface0DIterator& if0D_it);
|
||||
void Director_BPy_UnaryFunction1D___call__( void *uf1D, PyObject *obj, Interface1D& if1D);
|
||||
|
||||
// BPy_Iterator: increment, decrement, isBegin, isEnd
|
||||
// Iterator: increment, decrement, isBegin, isEnd
|
||||
void Director_BPy_Iterator_increment( PyObject *obj );
|
||||
void Director_BPy_Iterator_decrement( PyObject *obj );
|
||||
bool Director_BPy_Iterator_isBegin( PyObject *obj );
|
||||
bool Director_BPy_Iterator_isEnd( PyObject *obj );
|
||||
|
||||
// BPy_Interface1D: verticesBegin, verticesEnd, pointsBegin, pointsEnd
|
||||
Interface0DIterator Director_BPy_Interface1D_verticesBegin( PyObject *obj );
|
||||
Interface0DIterator Director_BPy_Interface1D_verticesEnd( PyObject *obj );
|
||||
Interface0DIterator Director_BPy_Interface1D_pointsBegin( PyObject *obj );
|
||||
Interface0DIterator Director_BPy_Interface1D_pointsEnd( PyObject *obj );
|
||||
// ChainingIterator: init, traverse
|
||||
void Director_BPy_ChainingIterator_init( PyObject *obj );
|
||||
ViewEdge * Director_BPy_ChainingIterator_traverse( PyObject *obj, AdjacencyIterator& a_it );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -167,14 +167,14 @@ PyObject * CurvePoint___copy__( BPy_CurvePoint *self ) {
|
||||
|
||||
PyObject * CurvePoint_A( BPy_CurvePoint *self ) {
|
||||
if( SVertex *A = self->cp->A() )
|
||||
return BPy_SVertex_from_SVertex( *A );
|
||||
return BPy_SVertex_from_SVertex_ptr( A );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyObject * CurvePoint_B( BPy_CurvePoint *self ) {
|
||||
if( SVertex *B = self->cp->B() )
|
||||
return BPy_SVertex_from_SVertex( *B );
|
||||
return BPy_SVertex_from_SVertex_ptr( B );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -183,8 +183,7 @@ PyObject * StrokeVertex_getPoint( BPy_StrokeVertex *self ) {
|
||||
}
|
||||
|
||||
PyObject * StrokeVertex_attribute( BPy_StrokeVertex *self ) {
|
||||
StrokeAttribute sa( self->sv->attribute() );
|
||||
return BPy_StrokeAttribute_from_StrokeAttribute( sa );
|
||||
return BPy_StrokeAttribute_from_StrokeAttribute_ptr( &(self->sv->attribute()) );
|
||||
}
|
||||
|
||||
PyObject * StrokeVertex_curvilinearAbscissa( BPy_StrokeVertex *self ) {
|
||||
|
||||
@@ -165,7 +165,7 @@ PyObject * NonTVertex_castToNonTVertex( BPy_NonTVertex *self ) {
|
||||
|
||||
PyObject * NonTVertex_svertex( BPy_NonTVertex *self ) {
|
||||
if( self->ntv->svertex() ){
|
||||
return BPy_SVertex_from_SVertex(*( self->ntv->svertex() ));
|
||||
return BPy_SVertex_from_SVertex_ptr( self->ntv->svertex() );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
|
||||
@@ -155,7 +155,7 @@ PyObject * TVertex_castToTVertex( BPy_TVertex *self ) {
|
||||
|
||||
PyObject * TVertex_frontSVertex( BPy_TVertex *self ) {
|
||||
if( self->tv->frontSVertex() ){
|
||||
return BPy_SVertex_from_SVertex(*( self->tv->frontSVertex() ));
|
||||
return BPy_SVertex_from_SVertex_ptr( self->tv->frontSVertex() );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
@@ -163,7 +163,7 @@ PyObject * TVertex_frontSVertex( BPy_TVertex *self ) {
|
||||
|
||||
PyObject * TVertex_backSVertex( BPy_TVertex *self ) {
|
||||
if( self->tv->backSVertex() ){
|
||||
return BPy_SVertex_from_SVertex(*( self->tv->backSVertex() ));
|
||||
return BPy_SVertex_from_SVertex_ptr( self->tv->backSVertex() );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
@@ -219,7 +219,7 @@ PyObject * TVertex_getSVertex( BPy_TVertex *self, PyObject *args) {
|
||||
|
||||
SVertex *sv = self->tv->getSVertex( ((BPy_FEdge *) py_fe)->fe );
|
||||
if( sv ){
|
||||
return BPy_SVertex_from_SVertex(*( sv ));
|
||||
return BPy_SVertex_from_SVertex_ptr( sv );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
@@ -235,7 +235,7 @@ PyObject * TVertex_mate( BPy_TVertex *self, PyObject *args) {
|
||||
|
||||
ViewEdge *ve = self->tv->mate( ((BPy_ViewEdge *) py_ve)->ve );
|
||||
if( ve ){
|
||||
return BPy_ViewEdge_from_ViewEdge(*( ve ));
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( ve );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
|
||||
@@ -185,7 +185,7 @@ PyObject * FEdge___copy__( BPy_FEdge *self ) {
|
||||
|
||||
PyObject * FEdge_vertexA( BPy_FEdge *self ) {
|
||||
if( self->fe->vertexA() ){
|
||||
return BPy_SVertex_from_SVertex( *(self->fe->vertexA()) );
|
||||
return BPy_SVertex_from_SVertex_ptr( self->fe->vertexA() );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
@@ -193,7 +193,7 @@ PyObject * FEdge_vertexA( BPy_FEdge *self ) {
|
||||
|
||||
PyObject * FEdge_vertexB( BPy_FEdge *self ) {
|
||||
if( self->fe->vertexB() ){
|
||||
return BPy_SVertex_from_SVertex( *(self->fe->vertexB()) );
|
||||
return BPy_SVertex_from_SVertex_ptr( self->fe->vertexB() );
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
@@ -209,7 +209,7 @@ PyObject * FEdge___getitem__( BPy_FEdge *self, PyObject *args ) {
|
||||
}
|
||||
|
||||
if( SVertex *v = self->fe->operator[](i) )
|
||||
return BPy_SVertex_from_SVertex( *v );
|
||||
return BPy_SVertex_from_SVertex_ptr( v );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@@ -230,7 +230,7 @@ PyObject * FEdge_previousEdge( BPy_FEdge *self ) {
|
||||
|
||||
PyObject * FEdge_viewedge( BPy_FEdge *self ) {
|
||||
if( ViewEdge *ve = self->fe->viewedge() )
|
||||
return BPy_ViewEdge_from_ViewEdge( *ve );
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( ve );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ PyObject * AdjacencyIterator_getObject(BPy_AdjacencyIterator *self) {
|
||||
|
||||
ViewEdge *ve = self->a_it->operator*();
|
||||
if( ve )
|
||||
return BPy_ViewEdge_from_ViewEdge( *ve );
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( ve );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ PyObject * ChainingIterator_getObject( BPy_ChainingIterator *self) {
|
||||
|
||||
ViewEdge *ve = self->c_it->operator*();
|
||||
if( ve )
|
||||
return BPy_ViewEdge_from_ViewEdge( *ve );
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( ve );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -160,7 +160,12 @@ PyObject * SVertexIterator_u( BPy_SVertexIterator *self ) {
|
||||
}
|
||||
|
||||
PyObject * SVertexIterator_getObject( BPy_SVertexIterator *self) {
|
||||
return BPy_SVertex_from_SVertex( self->sv_it->operator*() );
|
||||
SVertex *sv = self->sv_it->operator->();
|
||||
|
||||
if( sv )
|
||||
return BPy_SVertex_from_SVertex_ptr( sv );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -155,7 +155,11 @@ PyObject * StrokeVertexIterator_castToInterface0DIterator( BPy_StrokeVertexItera
|
||||
}
|
||||
|
||||
PyObject * StrokeVertexIterator_getObject( BPy_StrokeVertexIterator *self) {
|
||||
return BPy_StrokeVertex_from_StrokeVertex( self->sv_it->operator*() );
|
||||
StrokeVertex *sv = self->sv_it->operator->();
|
||||
if( sv )
|
||||
return BPy_StrokeVertex_from_StrokeVertex_ptr( sv );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ int ViewEdgeIterator___init__(BPy_ViewEdgeIterator *self, PyObject *args )
|
||||
|
||||
PyObject *ViewEdgeIterator_getCurrentEdge( BPy_ViewEdgeIterator *self ) {
|
||||
if( self->ve_it->getCurrentEdge() )
|
||||
return BPy_ViewEdge_from_ViewEdge(*( self->ve_it->getCurrentEdge() ));
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( self->ve_it->getCurrentEdge() );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@@ -171,7 +171,7 @@ PyObject *ViewEdgeIterator_setCurrentEdge( BPy_ViewEdgeIterator *self, PyObject
|
||||
|
||||
PyObject *ViewEdgeIterator_getBegin( BPy_ViewEdgeIterator *self ) {
|
||||
if( self->ve_it->getBegin() )
|
||||
return BPy_ViewEdge_from_ViewEdge(*( self->ve_it->getBegin() ));
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( self->ve_it->getBegin() );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@@ -216,7 +216,7 @@ PyObject * ViewEdgeIterator_getObject( BPy_ViewEdgeIterator *self) {
|
||||
|
||||
ViewEdge *ve = self->ve_it->operator*();
|
||||
if( ve )
|
||||
return BPy_ViewEdge_from_ViewEdge( *ve );
|
||||
return BPy_ViewEdge_from_ViewEdge_ptr( ve );
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
#include "BPy_SmoothingShader.h"
|
||||
|
||||
#include "../../stroke/AdvancedStrokeShaders.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*--------------- Python API function prototypes for SmoothingShader instance -----------*/
|
||||
static int SmoothingShader___init__( BPy_SmoothingShader* self, PyObject *args);
|
||||
|
||||
/*-----------------------BPy_SmoothingShader type definition ------------------------------*/
|
||||
|
||||
PyTypeObject SmoothingShader_Type = {
|
||||
PyObject_HEAD_INIT( NULL )
|
||||
0, /* ob_size */
|
||||
"SmoothingShader", /* tp_name */
|
||||
sizeof( BPy_SmoothingShader ), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
|
||||
/* methods */
|
||||
NULL, /* tp_dealloc */
|
||||
NULL, /* printfunc tp_print; */
|
||||
NULL, /* getattrfunc tp_getattr; */
|
||||
NULL, /* setattrfunc tp_setattr; */
|
||||
NULL, /* tp_compare */
|
||||
NULL, /* tp_repr */
|
||||
|
||||
/* Method suites for standard classes */
|
||||
|
||||
NULL, /* PyNumberMethods *tp_as_number; */
|
||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||
|
||||
/* More standard operations (here for binary compatibility) */
|
||||
|
||||
NULL, /* hashfunc tp_hash; */
|
||||
NULL, /* ternaryfunc tp_call; */
|
||||
NULL, /* reprfunc tp_str; */
|
||||
NULL, /* getattrofunc tp_getattro; */
|
||||
NULL, /* setattrofunc tp_setattro; */
|
||||
|
||||
/* Functions to access object as input/output buffer */
|
||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||
|
||||
/*** Flags to define presence of optional/expanded features ***/
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||
|
||||
NULL, /* char *tp_doc; Documentation string */
|
||||
/*** Assigned meaning in release 2.0 ***/
|
||||
/* call function for all accessible objects */
|
||||
NULL, /* traverseproc tp_traverse; */
|
||||
|
||||
/* delete references to contained objects */
|
||||
NULL, /* inquiry tp_clear; */
|
||||
|
||||
/*** Assigned meaning in release 2.1 ***/
|
||||
/*** rich comparisons ***/
|
||||
NULL, /* richcmpfunc tp_richcompare; */
|
||||
|
||||
/*** weak reference enabler ***/
|
||||
0, /* long tp_weaklistoffset; */
|
||||
|
||||
/*** Added in release 2.2 ***/
|
||||
/* Iterators */
|
||||
NULL, /* getiterfunc tp_iter; */
|
||||
NULL, /* iternextfunc tp_iternext; */
|
||||
|
||||
/*** Attribute descriptor and subclassing stuff ***/
|
||||
NULL, /* struct PyMethodDef *tp_methods; */
|
||||
NULL, /* struct PyMemberDef *tp_members; */
|
||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||
&StrokeShader_Type, /* struct _typeobject *tp_base; */
|
||||
NULL, /* PyObject *tp_dict; */
|
||||
NULL, /* descrgetfunc tp_descr_get; */
|
||||
NULL, /* descrsetfunc tp_descr_set; */
|
||||
0, /* long tp_dictoffset; */
|
||||
(initproc)SmoothingShader___init__, /* initproc tp_init; */
|
||||
NULL, /* allocfunc tp_alloc; */
|
||||
NULL, /* newfunc tp_new; */
|
||||
|
||||
/* Low-level free-memory routine */
|
||||
NULL, /* freefunc tp_free; */
|
||||
|
||||
/* For PyObject_IS_GC */
|
||||
NULL, /* inquiry tp_is_gc; */
|
||||
NULL, /* PyObject *tp_bases; */
|
||||
|
||||
/* method resolution order */
|
||||
NULL, /* PyObject *tp_mro; */
|
||||
NULL, /* PyObject *tp_cache; */
|
||||
NULL, /* PyObject *tp_subclasses; */
|
||||
NULL, /* PyObject *tp_weaklist; */
|
||||
NULL
|
||||
};
|
||||
|
||||
//------------------------INSTANCE METHODS ----------------------------------
|
||||
|
||||
int SmoothingShader___init__( BPy_SmoothingShader* self, PyObject *args)
|
||||
{
|
||||
int i1;
|
||||
double d2, d3, d4, d5, d6, d7, d8;
|
||||
|
||||
if(!( PyArg_ParseTuple(args, "iddddddd", &i1, &d2, &d3, &d4, &d5, &d6, &d7, &d8) )) {
|
||||
cout << "ERROR: SmoothingShader___init__" << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
self->py_ss.ss = new SmoothingShader::SmoothingShader(i1, d2, d3, d4, d5, d6, d7, d8);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef FREESTYLE_PYTHONSMOOTHINGSHADER_H
|
||||
#define FREESTYLE_PYTHONSMOOTHINGSHADER_H
|
||||
|
||||
#include "../BPy_StrokeShader.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <Python.h>
|
||||
|
||||
extern PyTypeObject SmoothingShader_Type;
|
||||
|
||||
#define BPy_SmoothingShader_Check(v) ( PyObject_IsInstance( (PyObject *) v, (PyObject *) &SmoothingShader_Type) )
|
||||
|
||||
/*---------------------------Python BPy_SmoothingShader structure definition----------*/
|
||||
typedef struct {
|
||||
BPy_StrokeShader py_ss;
|
||||
} BPy_SmoothingShader;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* FREESTYLE_PYTHONSMOOTHINGSHADER_H */
|
||||
@@ -107,7 +107,7 @@ int SpatialNoiseShader___init__( BPy_SpatialNoiseShader* self, PyObject *args)
|
||||
|
||||
|
||||
if(!( PyArg_ParseTuple(args, "ffiOO", &f1, &f2, &i3, &obj4, &obj5)
|
||||
&& PyList_Check(obj4) && PyBool_Check(obj5) )) {
|
||||
&& PyBool_Check(obj4) && PyBool_Check(obj5) )) {
|
||||
cout << "ERROR: SpatialNoiseShader___init__" << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ int StrokeTextureShader___init__( BPy_StrokeTextureShader* self, PyObject *args)
|
||||
const char *s1;
|
||||
PyObject *obj2 = 0, *obj3 = 0;
|
||||
|
||||
if(!( PyArg_ParseTuple(args, "s|00", &s1, &obj2, &obj3) )) {
|
||||
if(!( PyArg_ParseTuple(args, "s|OO", &s1, &obj2, &obj3) )) {
|
||||
cout << "ERROR: StrokeTextureShader___init__" << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -126,6 +126,11 @@ namespace StrokeShaders {
|
||||
}
|
||||
/*! Destructor.*/
|
||||
virtual ~IncreasingThicknessShader() {}
|
||||
|
||||
virtual string getName() const {
|
||||
return "IncreasingThicknessShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
|
||||
@@ -165,6 +170,11 @@ namespace StrokeShaders {
|
||||
}
|
||||
/*! Destructor.*/
|
||||
virtual ~ConstrainedIncreasingThicknessShader() {}
|
||||
|
||||
virtual string getName() const {
|
||||
return "ConstrainedIncreasingThicknessShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -192,6 +202,10 @@ namespace StrokeShaders {
|
||||
}
|
||||
virtual ~LengthDependingThicknessShader() {}
|
||||
|
||||
virtual string getName() const {
|
||||
return "LengthDependingThicknessShader";
|
||||
}
|
||||
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
|
||||
@@ -228,6 +242,11 @@ namespace StrokeShaders {
|
||||
_aThickness = 0;
|
||||
}
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "ThicknessVariationPatternShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
|
||||
@@ -258,6 +277,11 @@ namespace StrokeShaders {
|
||||
* The period of the noise signal
|
||||
*/
|
||||
ThicknessNoiseShader(float iAmplitude, float iPeriod);
|
||||
|
||||
virtual string getName() const {
|
||||
return "ThicknessNoiseShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -347,6 +371,11 @@ namespace StrokeShaders {
|
||||
_colorMax[2] = iBM;
|
||||
_colorMax[3] = iAlphaM;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "IncreasingColorShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -376,6 +405,11 @@ namespace StrokeShaders {
|
||||
_aVariation = 0;
|
||||
}
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "ColorVariationPatternShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
|
||||
@@ -400,6 +434,10 @@ namespace StrokeShaders {
|
||||
: StrokeShader()
|
||||
{_coefficient=coeff;}
|
||||
|
||||
virtual string getName() const {
|
||||
return "MaterialColorShader";
|
||||
}
|
||||
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
|
||||
@@ -416,6 +454,11 @@ namespace StrokeShaders {
|
||||
_orientation=iOrientation;
|
||||
_orientation.normalize();
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "CalligraphicColorShader";
|
||||
}
|
||||
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
|
||||
};
|
||||
@@ -438,6 +481,11 @@ namespace StrokeShaders {
|
||||
* The period of the noise signal
|
||||
*/
|
||||
ColorNoiseShader(float iAmplitude, float iPeriod);
|
||||
|
||||
virtual string getName() const {
|
||||
return "ColorNoiseShader";
|
||||
}
|
||||
|
||||
/*! The shading method. */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -477,6 +525,11 @@ namespace StrokeShaders {
|
||||
{
|
||||
_textureId = id;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "TextureAssignerShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
|
||||
@@ -526,6 +579,11 @@ namespace StrokeShaders {
|
||||
_mediumType = mediumType;
|
||||
_tips = iTips;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "StrokeTextureShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
|
||||
@@ -554,6 +612,11 @@ namespace StrokeShaders {
|
||||
{
|
||||
_amount = iAmount;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "BackboneStretcherShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -577,6 +640,11 @@ namespace StrokeShaders {
|
||||
{
|
||||
_sampling = sampling;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "SamplingShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -593,6 +661,10 @@ namespace StrokeShaders {
|
||||
_amount = iAmount;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "ExternalContourStretcherShader";
|
||||
}
|
||||
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
|
||||
@@ -604,6 +676,10 @@ namespace StrokeShaders {
|
||||
: StrokeShader()
|
||||
{}
|
||||
|
||||
virtual string getName() const {
|
||||
return "BSplineShader";
|
||||
}
|
||||
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
|
||||
@@ -630,6 +706,10 @@ namespace StrokeShaders {
|
||||
: StrokeShader()
|
||||
{_error=error;}
|
||||
|
||||
virtual string getName() const {
|
||||
return "BezierCurveShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -661,6 +741,11 @@ namespace StrokeShaders {
|
||||
_amount = iAmount;
|
||||
_curvatureThreshold = iThreshold;
|
||||
}
|
||||
|
||||
virtual string getName() const {
|
||||
return "InflateShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -690,6 +775,11 @@ namespace StrokeShaders {
|
||||
*/
|
||||
PolygonalizationShader(float iError) : StrokeShader()
|
||||
{_error = iError;}
|
||||
|
||||
virtual string getName() const {
|
||||
return "PolygonalizationShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -720,6 +810,11 @@ namespace StrokeShaders {
|
||||
*/
|
||||
GuidingLinesShader(float iOffset) : StrokeShader()
|
||||
{_offset = iOffset;}
|
||||
|
||||
virtual string getName() const {
|
||||
return "GuidingLinesShader";
|
||||
}
|
||||
|
||||
/*! The shading method */
|
||||
virtual void shade(Stroke& stroke) const;
|
||||
};
|
||||
@@ -739,6 +834,10 @@ namespace StrokeShaders {
|
||||
/*! Destructor. */
|
||||
virtual ~TipRemoverShader () {}
|
||||
/*! The shading method */
|
||||
virtual string getName() const {
|
||||
return "TipRemoverShader";
|
||||
}
|
||||
|
||||
virtual void shade(Stroke &stroke) const;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -814,10 +814,14 @@ Stroke* createStroke(Interface1D& inter) {
|
||||
|
||||
|
||||
inline void applyShading(Stroke& stroke, vector<StrokeShader*>& shaders) {
|
||||
for (vector<StrokeShader*>::iterator it = shaders.begin();
|
||||
it != shaders.end();
|
||||
++it)
|
||||
(*it)->shade(stroke);
|
||||
for (vector<StrokeShader*>::iterator it = shaders.begin(); it != shaders.end(); ++it) {
|
||||
StrokeShader *ss = *it;
|
||||
string name( ss->py_ss ? PyString_AsString(PyObject_CallMethod(ss->py_ss, "getName", "")) : ss->getName() );
|
||||
|
||||
cout << "Shading: " << name << endl;
|
||||
(*it)->shade(stroke);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -832,7 +836,8 @@ void Operators::create(UnaryPredicate1D& pred, vector<StrokeShader*> shaders) {
|
||||
++it) {
|
||||
if (!pred(**it))
|
||||
continue;
|
||||
Stroke* stroke = createStroke(**it);
|
||||
|
||||
Stroke* stroke = createStroke(**it);
|
||||
if (stroke) {
|
||||
applyShading(*stroke, shaders);
|
||||
canvas->RenderStroke(stroke);
|
||||
|
||||
@@ -45,6 +45,9 @@ StrokeAttribute::StrokeAttribute()
|
||||
_userAttributesVec2f = 0;
|
||||
_userAttributesVec3f = 0;
|
||||
_visible = true;
|
||||
|
||||
py_sa = 0;
|
||||
|
||||
}
|
||||
StrokeAttribute::StrokeAttribute(const StrokeAttribute& iBrother)
|
||||
{
|
||||
@@ -66,6 +69,10 @@ StrokeAttribute::StrokeAttribute(const StrokeAttribute& iBrother)
|
||||
_userAttributesVec3f = new Vec3fMap(*iBrother._userAttributesVec3f);
|
||||
else
|
||||
_userAttributesVec3f = 0;
|
||||
|
||||
py_sa = 0;
|
||||
|
||||
|
||||
}
|
||||
StrokeAttribute::StrokeAttribute( float iRColor, float iGColor, float iBColor,
|
||||
float iAlpha,
|
||||
@@ -85,6 +92,9 @@ StrokeAttribute::StrokeAttribute( float iRColor, float iGColor, float iBColor,
|
||||
_userAttributesReal = 0;
|
||||
_userAttributesVec2f = 0;
|
||||
_userAttributesVec3f = 0;
|
||||
|
||||
py_sa = 0;
|
||||
|
||||
}
|
||||
StrokeAttribute::StrokeAttribute(const StrokeAttribute& a1, const StrokeAttribute& a2, float t)
|
||||
|
||||
@@ -136,7 +146,9 @@ StrokeAttribute::StrokeAttribute(const StrokeAttribute& a1, const StrokeAttribut
|
||||
_userAttributesVec3f = 0;
|
||||
}
|
||||
|
||||
py_sa = 0;
|
||||
}
|
||||
|
||||
StrokeAttribute::~StrokeAttribute()
|
||||
{
|
||||
if(_userAttributesReal){
|
||||
@@ -404,11 +416,8 @@ Stroke::Stroke(const Stroke& iBrother)
|
||||
_mediumType = iBrother._mediumType;
|
||||
_textureId = iBrother._textureId;
|
||||
_tips = iBrother._tips;
|
||||
_rep = new StrokeRep(*(iBrother._rep));
|
||||
|
||||
if( iBrother._rep )
|
||||
_rep = new StrokeRep(*(iBrother._rep));
|
||||
else
|
||||
_rep = new StrokeRep(this);
|
||||
}
|
||||
|
||||
Stroke::~Stroke()
|
||||
|
||||
@@ -52,6 +52,8 @@ class LIB_STROKE_EXPORT StrokeAttribute
|
||||
{
|
||||
public:
|
||||
|
||||
PyObject *py_sa;
|
||||
|
||||
/*! default constructor */
|
||||
StrokeAttribute();
|
||||
/*! Copy constructor */
|
||||
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
* shader's name.
|
||||
*/
|
||||
virtual string getName() const {
|
||||
return "StrokeShader";
|
||||
return "StrokeShader";
|
||||
}
|
||||
/*! The shading method. This method must
|
||||
* be overloaded by inherited classes.
|
||||
@@ -119,7 +119,7 @@ public:
|
||||
string name( py_ss ? PyString_AsString(PyObject_CallMethod(py_ss, "getName", "")) : getName() );
|
||||
|
||||
if( py_ss && PyObject_HasAttrString(py_ss, "shade") ) {
|
||||
return Director_BPy_StrokeShader_shade(py_ss, ioStroke);
|
||||
Director_BPy_StrokeShader_shade(py_ss, ioStroke);
|
||||
} else {
|
||||
cerr << "Warning: " << name << " method shade() not implemented" << endl;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -212,22 +212,41 @@ public:
|
||||
|
||||
/*! Returns the 2D length of the 1D element. */
|
||||
virtual real getLength2D() const {
|
||||
cerr << "Warning: method getLength2D() not implemented" << endl;
|
||||
return 0;
|
||||
string name( py_if1D ? PyString_AsString(PyObject_CallMethod(py_if1D, "getExactTypeName", "")) : getExactTypeName() );
|
||||
|
||||
if( py_if1D && PyObject_HasAttrString(py_if1D, "getLength2D") ) {
|
||||
return Director_BPy_Interface1D_getLength2D(py_if1D);
|
||||
} else {
|
||||
cerr << "Warning: " << name << " getLength2D() not implemented" << endl;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*! Returns the Id of the 1D element .*/
|
||||
virtual Id getId() const {
|
||||
cerr << "Warning: method getId() not implemented" << endl;
|
||||
return Id(0, 0);
|
||||
}
|
||||
string name( py_if1D ? PyString_AsString(PyObject_CallMethod(py_if1D, "getExactTypeName", "")) : getExactTypeName() );
|
||||
|
||||
if( py_if1D && PyObject_HasAttrString(py_if1D, "getId") ) {
|
||||
return Director_BPy_Interface1D_getId(py_if1D);
|
||||
} else {
|
||||
cerr << "Warning: " << name << " getId() not implemented" << endl;
|
||||
return Id(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FIXME: ce truc n'a rien a faire la...(c une requete complexe qui doit etre ds les Function1D)
|
||||
/*! Returns the nature of the 1D element. */
|
||||
virtual Nature::EdgeNature getNature() const {
|
||||
cerr << "Warning: method getNature() not implemented" << endl;
|
||||
return Nature::NO_FEATURE;
|
||||
}
|
||||
string name( py_if1D ? PyString_AsString(PyObject_CallMethod(py_if1D, "getExactTypeName", "")) : getExactTypeName() );
|
||||
|
||||
if( py_if1D && PyObject_HasAttrString(py_if1D, "getNature") ) {
|
||||
return Director_BPy_Interface1D_getNature(py_if1D);
|
||||
} else {
|
||||
cerr << "Warning: " << name << " getNature() not implemented" << endl;
|
||||
return Nature::NO_FEATURE;
|
||||
}
|
||||
}
|
||||
|
||||
/*! Returns the time stamp of the 1D element. Mainly used for selection. */
|
||||
virtual unsigned getTimeStamp() const {
|
||||
|
||||
@@ -37,6 +37,8 @@ class pyChainSilhouetteIterator(ChainingIterator):
|
||||
ChainingIterator.__init__(self, stayInSelection, 1,None,1)
|
||||
def getExactTypeName(self):
|
||||
return "pyChainSilhouetteIterator"
|
||||
def init(self):
|
||||
pass
|
||||
def traverse(self, iter):
|
||||
winner = None
|
||||
it = AdjacencyIterator(iter)
|
||||
@@ -88,6 +90,8 @@ class pyChainSilhouetteGenericIterator(ChainingIterator):
|
||||
ChainingIterator.__init__(self, stayInSelection, stayInUnvisited,None,1)
|
||||
def getExactTypeName(self):
|
||||
return "pyChainSilhouetteGenericIterator"
|
||||
def init(self):
|
||||
pass
|
||||
def traverse(self, iter):
|
||||
winner = None
|
||||
it = AdjacencyIterator(iter)
|
||||
@@ -384,6 +388,8 @@ class pyFillOcclusionsAbsoluteChainingIterator(ChainingIterator):
|
||||
self._length = float(length)
|
||||
def getExactTypeName(self):
|
||||
return "pySmallFillOcclusionsChainingIterator"
|
||||
def init(self):
|
||||
pass
|
||||
def traverse(self, iter):
|
||||
winner = None
|
||||
winnerOrientation = 0
|
||||
@@ -665,6 +671,8 @@ class pyNoIdChainSilhouetteIterator(ChainingIterator):
|
||||
ChainingIterator.__init__(self, stayInSelection, 1,None,1)
|
||||
def getExactTypeName(self):
|
||||
return "pyChainSilhouetteIterator"
|
||||
def init(self):
|
||||
pass
|
||||
def traverse(self, iter):
|
||||
winner = None
|
||||
it = AdjacencyIterator(iter)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from Blender.Mathutils import Vector
|
||||
import Blender.Freestyle
|
||||
|
||||
class BBox(Blender.Freestyle.BBox):
|
||||
@@ -174,6 +175,9 @@ class PolygonalizationShader(Blender.Freestyle.PolygonalizationShader):
|
||||
class SamplingShader(Blender.Freestyle.SamplingShader):
|
||||
pass
|
||||
|
||||
class SmoothingShader(Blender.Freestyle.SmoothingShader):
|
||||
pass
|
||||
|
||||
class SpatialNoiseShader(Blender.Freestyle.SpatialNoiseShader):
|
||||
pass
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ from PredicatesB1D import *
|
||||
from Functions0D import *
|
||||
from shaders import *
|
||||
|
||||
|
||||
Operators.select(QuantitativeInvisibilityUP1D(0))
|
||||
Operators.bidirectionalChain(ChainSilhouetteIterator(),NotUP1D(QuantitativeInvisibilityUP1D(0)))
|
||||
## Splits strokes at points of highest 2D curavture
|
||||
@@ -48,11 +47,13 @@ shaders_list = [
|
||||
pySamplingShader(10),
|
||||
BezierCurveShader(30),
|
||||
SamplingShader(50),
|
||||
ConstantThicknessShader(10),
|
||||
pyNonLinearVaryingThicknessShader(4,25, 0.6),
|
||||
TextureAssignerShader(6),
|
||||
ConstantColorShader(0.2, 0.2, 0.2,1.0),
|
||||
TipRemoverShader(10)
|
||||
]
|
||||
|
||||
## Use the causal density to avoid cluttering
|
||||
Operators.create(pyDensityUP1D(8,0.4, IntegrationType.MEAN), shaders_list)
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ Operators.select(upred)
|
||||
Operators.bidirectionalChain(ChainSilhouetteIterator(), NotUP1D(upred))
|
||||
shaders_list = [
|
||||
SamplingShader(4),
|
||||
SpatialNoiseShader(4, 150, 2, 1, 1),
|
||||
SpatialNoiseShader(4, 150, 2, True, True),
|
||||
IncreasingThicknessShader(2, 5),
|
||||
BackboneStretcherShader(20),
|
||||
IncreasingColorShader(1,0,0,1,0,1,0,1),
|
||||
|
||||
@@ -55,11 +55,11 @@ upred = QuantitativeInvisibilityUP1D(0)
|
||||
Operators.select(upred)
|
||||
Operators.bidirectionalChain(ChainSilhouetteIterator(), NotUP1D(upred))
|
||||
## starting and stopping predicates:
|
||||
start = pyVertexNatureUP0D(Nature.NON_Nature.T_VERTEX)
|
||||
start = pyVertexNatureUP0D(Nature.NON_T_VERTEX)
|
||||
stop = pyBackTVertexUP0D()
|
||||
Operators.sequentialSplit(start, stop, 10)
|
||||
shaders_list = [
|
||||
SpatialNoiseShader(7, 120, 2, 1, 1),
|
||||
SpatialNoiseShader(7, 120, 2, True, True),
|
||||
IncreasingThicknessShader(5, 8),
|
||||
ConstantColorShader(0.2, 0.2, 0.2, 1),
|
||||
TextureAssignerShader(4)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
from freestyle_init import *
|
||||
from logical_operators import *
|
||||
from PredicatesU0D import *
|
||||
from PredicatesU1D import *
|
||||
from Functions0D import *
|
||||
|
||||
|
||||
Reference in New Issue
Block a user