2008-07-23 07:56:08 +00:00
|
|
|
#include "BPy_StrokeVertex.h"
|
2008-07-21 21:24:37 +00:00
|
|
|
|
2008-07-23 07:56:08 +00:00
|
|
|
#include "../../BPy_Convert.h"
|
|
|
|
|
#include "../../BPy_StrokeAttribute.h"
|
2008-07-24 20:39:13 +00:00
|
|
|
#include "../../Interface0D/BPy_SVertex.h"
|
2008-07-21 21:24:37 +00:00
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
//------------------------INSTANCE METHODS ----------------------------------
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex___doc__[] =
|
2010-08-12 12:17:47 +00:00
|
|
|
"Class hierarchy: :class:`Interface0D` > :class:`CurvePoint` > :class:`StrokeVertex`\n"
|
|
|
|
|
"\n"
|
2010-04-17 23:47:47 +00:00
|
|
|
"Class to define a stroke vertex.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
".. method:: __init__()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Default constructor.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
".. method:: __init__(iBrother)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Copy constructor.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iBrother: A StrokeVertex object.\n"
|
|
|
|
|
" :type iBrother: :class:`StrokeVertex`\n"
|
|
|
|
|
"\n"
|
|
|
|
|
".. method:: __init__(iA, iB, t3)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Builds a stroke vertex from 2 stroke vertices and an interpolation\n"
|
|
|
|
|
" parameter.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iA: The first StrokeVertex.\n"
|
|
|
|
|
" :type iA: :class:`StrokeVertex`\n"
|
|
|
|
|
" :arg iB: The second StrokeVertex.\n"
|
|
|
|
|
" :type iB: :class:`StrokeVertex`\n"
|
|
|
|
|
" :arg t3: An interpolation parameter.\n"
|
|
|
|
|
" :type t3: float\n"
|
|
|
|
|
"\n"
|
|
|
|
|
".. method:: __init__(iPoint)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Builds a stroke vertex from a CurvePoint\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iPoint: A CurvePoint object.\n"
|
|
|
|
|
" :type iPoint: :class:`CurvePoint`\n"
|
|
|
|
|
"\n"
|
|
|
|
|
".. method:: __init__(iSVertex)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Builds a stroke vertex from a SVertex\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iSVertex: An SVertex object.\n"
|
|
|
|
|
" :type iSVertex: :class:`SVertex`\n"
|
|
|
|
|
"\n"
|
|
|
|
|
".. method:: __init__(iSVertex, iAttribute)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Builds a stroke vertex from an SVertex and a StrokeAttribute object.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iSVertex: An SVertex object.\n"
|
|
|
|
|
" :type iSVertex: :class:`SVertex`\n"
|
|
|
|
|
" :arg iAttribute: A StrokeAttribute object.\n"
|
|
|
|
|
" :type iAttribute: :class:`StrokeAttribute`\n";
|
|
|
|
|
|
|
|
|
|
static int StrokeVertex___init__(BPy_StrokeVertex *self, PyObject *args, PyObject *kwds)
|
2008-07-21 21:24:37 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
PyObject *obj1 = 0, *obj2 = 0 , *obj3 = 0;
|
|
|
|
|
|
2009-08-02 22:39:21 +00:00
|
|
|
if (! PyArg_ParseTuple(args, "|OOO!", &obj1, &obj2, &PyFloat_Type, &obj3) )
|
2008-07-21 21:24:37 +00:00
|
|
|
return -1;
|
|
|
|
|
|
2009-08-02 22:39:21 +00:00
|
|
|
if( !obj1 ){
|
2008-07-22 08:15:21 +00:00
|
|
|
self->sv = new StrokeVertex();
|
|
|
|
|
|
2009-08-02 22:39:21 +00:00
|
|
|
} else if( !obj2 && BPy_StrokeVertex_Check(obj1) && ((BPy_StrokeVertex *) obj1)->sv ) {
|
|
|
|
|
self->sv = new StrokeVertex( *(((BPy_StrokeVertex *) obj1)->sv) );
|
|
|
|
|
|
|
|
|
|
} else if( !obj2 && BPy_CurvePoint_Check(obj1) && ((BPy_CurvePoint *) obj1)->cp ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
self->sv = new StrokeVertex( ((BPy_CurvePoint *) obj1)->cp );
|
|
|
|
|
|
2009-08-02 22:39:21 +00:00
|
|
|
} else if( !obj2 && BPy_SVertex_Check(obj1) && ((BPy_SVertex *) obj1)->sv ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
self->sv = new StrokeVertex( ((BPy_SVertex *) obj1)->sv );
|
|
|
|
|
|
2009-08-02 22:39:21 +00:00
|
|
|
} else if( obj3 && BPy_StrokeVertex_Check(obj1) && BPy_StrokeVertex_Check(obj2) ) {
|
|
|
|
|
StrokeVertex *sv1 = ((BPy_StrokeVertex *) obj1)->sv;
|
|
|
|
|
StrokeVertex *sv2 = ((BPy_StrokeVertex *) obj2)->sv;
|
|
|
|
|
if( !sv1 || ( sv1->A() == 0 && sv1->B() == 0 ) ) {
|
|
|
|
|
PyErr_SetString(PyExc_TypeError, "argument 1 is an invalid StrokeVertex object");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if( !sv2 || ( sv2->A() == 0 && sv2->B() == 0 ) ) {
|
|
|
|
|
PyErr_SetString(PyExc_TypeError, "argument 2 is an invalid StrokeVertex object");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
self->sv = new StrokeVertex( sv1, sv2, PyFloat_AsDouble( obj3 ) );
|
|
|
|
|
|
2008-07-21 21:24:37 +00:00
|
|
|
} else {
|
2009-03-29 21:50:10 +00:00
|
|
|
PyErr_SetString(PyExc_TypeError, "invalid argument(s)");
|
2008-07-21 21:24:37 +00:00
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
2008-07-22 08:15:21 +00:00
|
|
|
self->py_cp.cp = self->sv;
|
|
|
|
|
self->py_cp.py_if0D.if0D = self->sv;
|
SWIG/directors dependency removal (cont'd)
* Added to python/BPy_Convert.{cpp,h} 4 utility converters below for
better introspection-based automatic type conversion.
PyObject * Any_BPy_Interface0D_from_Interface0D( Interface0D& if0D );
PyObject * Any_BPy_Interface1D_from_Interface1D( Interface1D& if1D );
PyObject * Any_BPy_FEdge_from_FEdge( FEdge& fe );
PyObject * Any_BPy_ViewVertex_from_ViewVertex( ViewVertex& vv );
There are 4 corresponding converters without the "Any_" prefix. All
calls of them in the code base were replaced with these new converters
so that the introspection-based automatic conversion would take place
universally.
* python/BPy_Convert.{cpp,h}: Those C++ to Python converters having
had a "_ptr" suffix were renamed to a name without the suffix, and
their arguments were changed so as to take a reference (e.g.,
ViewVertex&) instead of a pointer (e.g., ViewVertex *). The changed
converters and their new function prototypes are listed below. These
converters now return a Python wrapper object that retains the passed
reference, instead of retaining a newly created C++ object by the
converters.
// Interface0D converters
PyObject * BPy_Interface0D_from_Interface0D( Interface0D& if0D );
PyObject * BPy_CurvePoint_from_CurvePoint( CurvePoint& cp );
PyObject * BPy_StrokeVertex_from_StrokeVertex( StrokeVertex& sv );
PyObject * BPy_SVertex_from_SVertex( SVertex& sv );
PyObject * BPy_ViewVertex_from_ViewVertex( ViewVertex& vv );
PyObject * BPy_TVertex_from_TVertex( TVertex& tv );
PyObject * BPy_NonTVertex_from_NonTVertex( NonTVertex& ntv );
// Interface1D converters
PyObject * BPy_Interface1D_from_Interface1D( Interface1D& if1D );
PyObject * BPy_Chain_from_Chain( Chain& c );
PyObject * BPy_FEdge_from_FEdge( FEdge& fe );
PyObject * BPy_FEdgeSharp_from_FEdgeSharp( FEdgeSharp& fes );
PyObject * BPy_FEdgeSmooth_from_FEdgeSmooth( FEdgeSmooth& fes );
PyObject * BPy_Stroke_from_Stroke( Stroke& s );
PyObject * BPy_ViewEdge_from_ViewEdge( ViewEdge& ve );
PyObject * BPy_directedViewEdge_from_directedViewEdge( ViewVertex::directedViewEdge& dve );
// some other converters
PyObject * BPy_ViewShape_from_ViewShape( ViewShape& vs );
PyObject * BPy_SShape_from_SShape( SShape& ss );
PyObject * BPy_FrsMaterial_from_FrsMaterial( FrsMaterial& m );
PyObject * BPy_StrokeAttribute_from_StrokeAttribute( StrokeAttribute& sa );
* Added a "borrowed" flag to the definitions of Python types being
used to wrap C++ components of Freestyle's internal data structures.
The flag indicates whether or not a Python wrapper object has a
reference to a C++ object that comprises the internal data structures.
The deallocation routines of the Python types check this flag and
release a wrapped C++ object only when it is not part of the internal
data structures. The following files were modified:
python/BPy_FrsMaterial.{cpp,h}
python/BPy_Interface0D.{cpp,h}
python/BPy_Interface1D.{cpp,h}
python/BPy_SShape.{cpp,h}
python/BPy_StrokeAttribute.{cpp,h}
python/BPy_ViewShape.{cpp,h}
python/Interface0D/BPy_CurvePoint.cpp
python/Interface0D/BPy_SVertex.cpp
python/Interface0D/BPy_ViewVertex.cpp
python/Interface0D/CurvePoint/BPy_StrokeVertex.cpp
python/Interface0D/ViewVertex/BPy_NonTVertex.cpp
python/Interface0D/ViewVertex/BPy_TVertex.cpp
python/Interface1D/BPy_FEdge.cpp
python/Interface1D/BPy_FrsCurve.cpp
python/Interface1D/BPy_Stroke.cpp
python/Interface1D/BPy_ViewEdge.cpp
python/Interface1D/Curve/BPy_Chain.cpp
python/Interface1D/FEdge/BPy_FEdgeSharp.cpp
python/Interface1D/FEdge/BPy_FEdgeSmooth.cpp
* view_map/Interface[01]D.h, python/BPy_Interface[01]D.cpp: Removed
from the Interface0D and Interface1D C++ classes a back pointer to a
Python wrapper object and all "director" calls. These classes (and
their subclasses) are used to build Freestyle's main data structures
(such as a view map and strokes) and their class hierarchy is static.
Python wrappers of these C++ classes are only used to access the data
structures from the Python layer, and not intended to extend the data
structures by subclassing the Python wrappers. Without the necessity
of subclassing in the Python layer, the back pointer to a wrapping
Python object and "director" calls would be useless (actually they
were not used at all), so they were all removed.
* python/Director.{cpp,h}: Removed the definitions of directors that
were no longer used.
* stroke/Stroke.{cpp,h}: Removed an (unused) back pointer to a Python
wrapper object.
* python/BPy_ViewMap.cpp: Fixed a possible null pointer reference.
* python/Interface1D/BPy_FEdge.cpp: Fixed parameter checking in
FEdge___init__().
2009-08-02 16:23:18 +00:00
|
|
|
self->py_cp.py_if0D.borrowed = 0;
|
2008-07-21 21:24:37 +00:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_x___doc__[] =
|
|
|
|
|
".. method:: x()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the 2D point X coordinate.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The X coordinate.\n"
|
|
|
|
|
" :rtype: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_x( BPy_StrokeVertex *self ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
return PyFloat_FromDouble( self->sv->x() );
|
|
|
|
|
}
|
2008-07-21 21:24:37 +00:00
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_y___doc__[] =
|
|
|
|
|
".. method:: y()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the 2D point Y coordinate.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The Y coordinate.\n"
|
|
|
|
|
" :rtype: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_y( BPy_StrokeVertex *self ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
return PyFloat_FromDouble( self->sv->y() );
|
|
|
|
|
}
|
2008-07-21 21:24:37 +00:00
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_getPoint___doc__[] =
|
|
|
|
|
".. method:: getPoint()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the 2D point coordinates as a two-dimensional vector.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The 2D coordinates.\n"
|
2010-04-18 02:03:19 +00:00
|
|
|
" :rtype: :class:`mathutils.Vector`\n";
|
2010-04-17 23:47:47 +00:00
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_getPoint( BPy_StrokeVertex *self ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
Vec2f v( self->sv->getPoint() );
|
|
|
|
|
return Vector_from_Vec2f( v );
|
|
|
|
|
}
|
2008-07-21 21:24:37 +00:00
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_attribute___doc__[] =
|
|
|
|
|
".. method:: attribute()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the StrokeAttribute for this StrokeVertex.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The StrokeAttribute object.\n"
|
|
|
|
|
" :rtype: :class:`StrokeAttribute`\n";
|
|
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_attribute( BPy_StrokeVertex *self ) {
|
SWIG/directors dependency removal (cont'd)
* Added to python/BPy_Convert.{cpp,h} 4 utility converters below for
better introspection-based automatic type conversion.
PyObject * Any_BPy_Interface0D_from_Interface0D( Interface0D& if0D );
PyObject * Any_BPy_Interface1D_from_Interface1D( Interface1D& if1D );
PyObject * Any_BPy_FEdge_from_FEdge( FEdge& fe );
PyObject * Any_BPy_ViewVertex_from_ViewVertex( ViewVertex& vv );
There are 4 corresponding converters without the "Any_" prefix. All
calls of them in the code base were replaced with these new converters
so that the introspection-based automatic conversion would take place
universally.
* python/BPy_Convert.{cpp,h}: Those C++ to Python converters having
had a "_ptr" suffix were renamed to a name without the suffix, and
their arguments were changed so as to take a reference (e.g.,
ViewVertex&) instead of a pointer (e.g., ViewVertex *). The changed
converters and their new function prototypes are listed below. These
converters now return a Python wrapper object that retains the passed
reference, instead of retaining a newly created C++ object by the
converters.
// Interface0D converters
PyObject * BPy_Interface0D_from_Interface0D( Interface0D& if0D );
PyObject * BPy_CurvePoint_from_CurvePoint( CurvePoint& cp );
PyObject * BPy_StrokeVertex_from_StrokeVertex( StrokeVertex& sv );
PyObject * BPy_SVertex_from_SVertex( SVertex& sv );
PyObject * BPy_ViewVertex_from_ViewVertex( ViewVertex& vv );
PyObject * BPy_TVertex_from_TVertex( TVertex& tv );
PyObject * BPy_NonTVertex_from_NonTVertex( NonTVertex& ntv );
// Interface1D converters
PyObject * BPy_Interface1D_from_Interface1D( Interface1D& if1D );
PyObject * BPy_Chain_from_Chain( Chain& c );
PyObject * BPy_FEdge_from_FEdge( FEdge& fe );
PyObject * BPy_FEdgeSharp_from_FEdgeSharp( FEdgeSharp& fes );
PyObject * BPy_FEdgeSmooth_from_FEdgeSmooth( FEdgeSmooth& fes );
PyObject * BPy_Stroke_from_Stroke( Stroke& s );
PyObject * BPy_ViewEdge_from_ViewEdge( ViewEdge& ve );
PyObject * BPy_directedViewEdge_from_directedViewEdge( ViewVertex::directedViewEdge& dve );
// some other converters
PyObject * BPy_ViewShape_from_ViewShape( ViewShape& vs );
PyObject * BPy_SShape_from_SShape( SShape& ss );
PyObject * BPy_FrsMaterial_from_FrsMaterial( FrsMaterial& m );
PyObject * BPy_StrokeAttribute_from_StrokeAttribute( StrokeAttribute& sa );
* Added a "borrowed" flag to the definitions of Python types being
used to wrap C++ components of Freestyle's internal data structures.
The flag indicates whether or not a Python wrapper object has a
reference to a C++ object that comprises the internal data structures.
The deallocation routines of the Python types check this flag and
release a wrapped C++ object only when it is not part of the internal
data structures. The following files were modified:
python/BPy_FrsMaterial.{cpp,h}
python/BPy_Interface0D.{cpp,h}
python/BPy_Interface1D.{cpp,h}
python/BPy_SShape.{cpp,h}
python/BPy_StrokeAttribute.{cpp,h}
python/BPy_ViewShape.{cpp,h}
python/Interface0D/BPy_CurvePoint.cpp
python/Interface0D/BPy_SVertex.cpp
python/Interface0D/BPy_ViewVertex.cpp
python/Interface0D/CurvePoint/BPy_StrokeVertex.cpp
python/Interface0D/ViewVertex/BPy_NonTVertex.cpp
python/Interface0D/ViewVertex/BPy_TVertex.cpp
python/Interface1D/BPy_FEdge.cpp
python/Interface1D/BPy_FrsCurve.cpp
python/Interface1D/BPy_Stroke.cpp
python/Interface1D/BPy_ViewEdge.cpp
python/Interface1D/Curve/BPy_Chain.cpp
python/Interface1D/FEdge/BPy_FEdgeSharp.cpp
python/Interface1D/FEdge/BPy_FEdgeSmooth.cpp
* view_map/Interface[01]D.h, python/BPy_Interface[01]D.cpp: Removed
from the Interface0D and Interface1D C++ classes a back pointer to a
Python wrapper object and all "director" calls. These classes (and
their subclasses) are used to build Freestyle's main data structures
(such as a view map and strokes) and their class hierarchy is static.
Python wrappers of these C++ classes are only used to access the data
structures from the Python layer, and not intended to extend the data
structures by subclassing the Python wrappers. Without the necessity
of subclassing in the Python layer, the back pointer to a wrapping
Python object and "director" calls would be useless (actually they
were not used at all), so they were all removed.
* python/Director.{cpp,h}: Removed the definitions of directors that
were no longer used.
* stroke/Stroke.{cpp,h}: Removed an (unused) back pointer to a Python
wrapper object.
* python/BPy_ViewMap.cpp: Fixed a possible null pointer reference.
* python/Interface1D/BPy_FEdge.cpp: Fixed parameter checking in
FEdge___init__().
2009-08-02 16:23:18 +00:00
|
|
|
return BPy_StrokeAttribute_from_StrokeAttribute( self->sv->attribute() );
|
2008-07-21 21:24:37 +00:00
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_curvilinearAbscissa___doc__[] =
|
|
|
|
|
".. method:: curvilinearAbscissa()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the curvilinear abscissa.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The curvilinear abscissa.\n"
|
|
|
|
|
" :rtype: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_curvilinearAbscissa( BPy_StrokeVertex *self ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
return PyFloat_FromDouble( self->sv->curvilinearAbscissa() );
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_strokeLength___doc__[] =
|
|
|
|
|
".. method:: strokeLength()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the length of the Stroke to which this StrokeVertex belongs\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The stroke length.\n"
|
|
|
|
|
" :rtype: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_strokeLength( BPy_StrokeVertex *self ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
return PyFloat_FromDouble( self->sv->strokeLength() );
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_u___doc__[] =
|
|
|
|
|
".. method:: u()\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Returns the curvilinear abscissa of this StrokeVertex in the Stroke\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :return: The curvilinear abscissa.\n"
|
|
|
|
|
" :rtype: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject * StrokeVertex_u( BPy_StrokeVertex *self ) {
|
2008-07-22 08:15:21 +00:00
|
|
|
return PyFloat_FromDouble( self->sv->u() );
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_setX___doc__[] =
|
|
|
|
|
".. method:: setX(x)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Sets the 2D point X coordinate.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg x: The X coordinate.\n"
|
|
|
|
|
" :type x: float\n";
|
2008-07-22 08:15:21 +00:00
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static PyObject *StrokeVertex_setX( BPy_StrokeVertex *self , PyObject *args) {
|
2008-07-22 08:15:21 +00:00
|
|
|
double r;
|
|
|
|
|
|
2009-03-29 21:50:10 +00:00
|
|
|
if(!( PyArg_ParseTuple(args, "d", &r) ))
|
|
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
|
|
|
|
|
self->sv->setX( r );
|
|
|
|
|
|
|
|
|
|
Py_RETURN_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_setY___doc__[] =
|
|
|
|
|
".. method:: setY(y)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Sets the 2D point Y coordinate.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg y: The Y coordinate.\n"
|
|
|
|
|
" :type y: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject *StrokeVertex_setY( BPy_StrokeVertex *self , PyObject *args) {
|
2008-07-22 08:15:21 +00:00
|
|
|
double r;
|
|
|
|
|
|
2009-03-29 21:50:10 +00:00
|
|
|
if(!( PyArg_ParseTuple(args, "d", &r) ))
|
|
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
|
|
|
|
|
self->sv->setY( r );
|
|
|
|
|
|
|
|
|
|
Py_RETURN_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_setPoint___doc__[] =
|
|
|
|
|
".. method:: setPoint(x, y)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Sets the 2D point X and Y coordinates.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg x: The X coordinate.\n"
|
|
|
|
|
" :type x: float\n"
|
|
|
|
|
" :arg y: The Y coordinate.\n"
|
|
|
|
|
" :type y: float\n"
|
|
|
|
|
"\n"
|
2011-02-22 01:43:08 +00:00
|
|
|
".. method:: setPoint(p)\n"
|
2010-04-17 23:47:47 +00:00
|
|
|
"\n"
|
|
|
|
|
" Sets the 2D point X and Y coordinates.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg p: A two-dimensional vector.\n"
|
2010-04-18 02:03:19 +00:00
|
|
|
" :type p: :class:`mathutils.Vector`, list or tuple of 2 real numbers\n";
|
2010-04-17 23:47:47 +00:00
|
|
|
|
|
|
|
|
static PyObject *StrokeVertex_setPoint( BPy_StrokeVertex *self , PyObject *args) {
|
2008-07-22 08:15:21 +00:00
|
|
|
PyObject *obj1 = 0, *obj2 = 0;
|
2008-07-21 21:24:37 +00:00
|
|
|
|
2009-03-29 21:50:10 +00:00
|
|
|
if(!( PyArg_ParseTuple(args, "O|O", &obj1, &obj2) ))
|
|
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
|
2009-07-25 11:27:18 +00:00
|
|
|
if( obj1 && !obj2 ){
|
|
|
|
|
Vec2f *v = Vec2f_ptr_from_PyObject(obj1);
|
|
|
|
|
if( !v ) {
|
|
|
|
|
PyErr_SetString(PyExc_TypeError, "argument 1 must be a 2D vector (either a list of 2 elements or Vector)");
|
2009-03-29 21:50:10 +00:00
|
|
|
return NULL;
|
2009-03-14 13:11:34 +00:00
|
|
|
}
|
|
|
|
|
self->sv->setPoint( *v );
|
|
|
|
|
delete v;
|
2009-03-29 21:50:10 +00:00
|
|
|
} else if( PyFloat_Check(obj1) && obj2 && PyFloat_Check(obj2) ){
|
2008-07-22 08:15:21 +00:00
|
|
|
self->sv->setPoint( PyFloat_AsDouble(obj1), PyFloat_AsDouble(obj2) );
|
2009-03-14 13:11:34 +00:00
|
|
|
} else {
|
2009-07-25 11:27:18 +00:00
|
|
|
PyErr_SetString(PyExc_TypeError, "invalid arguments");
|
2009-03-29 21:50:10 +00:00
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Py_RETURN_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_setAttribute___doc__[] =
|
|
|
|
|
".. method:: setAttribute(iAttribute)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Sets the attribute.\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iAttribute: A StrokeAttribute object.\n"
|
|
|
|
|
" :type iAttribute: :class:`StrokeAttribute`\n";
|
|
|
|
|
|
|
|
|
|
static PyObject *StrokeVertex_setAttribute( BPy_StrokeVertex *self , PyObject *args) {
|
2008-07-22 08:15:21 +00:00
|
|
|
PyObject *py_sa;
|
|
|
|
|
|
2009-03-29 21:50:10 +00:00
|
|
|
if(!( PyArg_ParseTuple(args, "O!", &StrokeAttribute_Type, &py_sa) ))
|
|
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
|
|
|
|
|
self->sv->setAttribute(*( ((BPy_StrokeAttribute *) py_sa)->sa ));
|
|
|
|
|
|
|
|
|
|
Py_RETURN_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_setCurvilinearAbscissa___doc__[] =
|
|
|
|
|
".. method:: setCurvilinearAbscissa(iAbscissa)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Sets the curvilinear abscissa of this StrokeVertex in the Stroke\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iAbscissa: The curvilinear abscissa.\n"
|
|
|
|
|
" :type iAbscissa: float\n";
|
|
|
|
|
|
|
|
|
|
static PyObject *StrokeVertex_setCurvilinearAbscissa( BPy_StrokeVertex *self , PyObject *args) {
|
2008-07-22 08:15:21 +00:00
|
|
|
double r;
|
|
|
|
|
|
2009-03-29 21:50:10 +00:00
|
|
|
if(!( PyArg_ParseTuple(args, "d", &r) ))
|
|
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
|
|
|
|
|
self->sv->setCurvilinearAbscissa( r );
|
2008-07-09 08:24:13 +00:00
|
|
|
|
2008-07-22 08:15:21 +00:00
|
|
|
Py_RETURN_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static char StrokeVertex_setStrokeLength___doc__[] =
|
|
|
|
|
".. method:: setStrokeLength(iLength)\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" Sets the stroke length (it is only a value retained by the\n"
|
|
|
|
|
" StrokeVertex, and it won't change the real stroke length).\n"
|
|
|
|
|
"\n"
|
|
|
|
|
" :arg iLength: The stroke length.\n"
|
|
|
|
|
" :type iLength: float\n";
|
2008-07-22 08:15:21 +00:00
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
static PyObject *StrokeVertex_setStrokeLength( BPy_StrokeVertex *self , PyObject *args) {
|
2008-07-22 08:15:21 +00:00
|
|
|
double r;
|
|
|
|
|
|
2009-03-29 21:50:10 +00:00
|
|
|
if(!( PyArg_ParseTuple(args, "d", &r) ))
|
|
|
|
|
return NULL;
|
2008-07-22 08:15:21 +00:00
|
|
|
|
|
|
|
|
self->sv->setStrokeLength( r );
|
|
|
|
|
|
|
|
|
|
Py_RETURN_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// real operator[] (const int i) const
|
|
|
|
|
// real & operator[] (const int i)
|
|
|
|
|
|
2010-04-17 23:47:47 +00:00
|
|
|
/*----------------------StrokeVertex instance definitions ----------------------------*/
|
|
|
|
|
static PyMethodDef BPy_StrokeVertex_methods[] = {
|
|
|
|
|
{"x", ( PyCFunction ) StrokeVertex_x, METH_NOARGS, StrokeVertex_x___doc__},
|
|
|
|
|
{"y", ( PyCFunction ) StrokeVertex_y, METH_NOARGS, StrokeVertex_y___doc__},
|
|
|
|
|
{"getPoint", ( PyCFunction ) StrokeVertex_getPoint, METH_NOARGS, StrokeVertex_getPoint___doc__},
|
|
|
|
|
{"attribute", ( PyCFunction ) StrokeVertex_attribute, METH_NOARGS, StrokeVertex_attribute___doc__},
|
|
|
|
|
{"curvilinearAbscissa", ( PyCFunction ) StrokeVertex_curvilinearAbscissa, METH_NOARGS, StrokeVertex_curvilinearAbscissa___doc__},
|
|
|
|
|
{"strokeLength", ( PyCFunction ) StrokeVertex_strokeLength, METH_NOARGS, StrokeVertex_strokeLength___doc__},
|
|
|
|
|
{"u", ( PyCFunction ) StrokeVertex_u, METH_NOARGS, StrokeVertex_u___doc__},
|
|
|
|
|
{"setX", ( PyCFunction ) StrokeVertex_setX, METH_VARARGS, StrokeVertex_setX___doc__},
|
|
|
|
|
{"setY", ( PyCFunction ) StrokeVertex_setY, METH_VARARGS, StrokeVertex_setY___doc__},
|
|
|
|
|
{"setPoint", ( PyCFunction ) StrokeVertex_setPoint, METH_VARARGS, StrokeVertex_setPoint___doc__},
|
|
|
|
|
{"setAttribute", ( PyCFunction ) StrokeVertex_setAttribute, METH_VARARGS, StrokeVertex_setAttribute___doc__},
|
|
|
|
|
{"setCurvilinearAbscissa", ( PyCFunction ) StrokeVertex_setCurvilinearAbscissa, METH_VARARGS, StrokeVertex_setCurvilinearAbscissa___doc__},
|
|
|
|
|
{"setStrokeLength", ( PyCFunction ) StrokeVertex_setStrokeLength, METH_VARARGS, StrokeVertex_setStrokeLength___doc__},
|
|
|
|
|
{NULL, NULL, 0, NULL}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*-----------------------BPy_StrokeVertex type definition ------------------------------*/
|
|
|
|
|
PyTypeObject StrokeVertex_Type = {
|
|
|
|
|
PyVarObject_HEAD_INIT(NULL, 0)
|
|
|
|
|
"StrokeVertex", /* tp_name */
|
|
|
|
|
sizeof(BPy_StrokeVertex), /* tp_basicsize */
|
|
|
|
|
0, /* tp_itemsize */
|
|
|
|
|
0, /* tp_dealloc */
|
|
|
|
|
0, /* tp_print */
|
|
|
|
|
0, /* tp_getattr */
|
|
|
|
|
0, /* tp_setattr */
|
|
|
|
|
0, /* tp_reserved */
|
|
|
|
|
0, /* tp_repr */
|
|
|
|
|
0, /* tp_as_number */
|
|
|
|
|
0, /* tp_as_sequence */
|
|
|
|
|
0, /* tp_as_mapping */
|
|
|
|
|
0, /* tp_hash */
|
|
|
|
|
0, /* tp_call */
|
|
|
|
|
0, /* tp_str */
|
|
|
|
|
0, /* tp_getattro */
|
|
|
|
|
0, /* tp_setattro */
|
|
|
|
|
0, /* tp_as_buffer */
|
|
|
|
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
|
|
|
|
|
StrokeVertex___doc__, /* tp_doc */
|
|
|
|
|
0, /* tp_traverse */
|
|
|
|
|
0, /* tp_clear */
|
|
|
|
|
0, /* tp_richcompare */
|
|
|
|
|
0, /* tp_weaklistoffset */
|
|
|
|
|
0, /* tp_iter */
|
|
|
|
|
0, /* tp_iternext */
|
|
|
|
|
BPy_StrokeVertex_methods, /* tp_methods */
|
|
|
|
|
0, /* tp_members */
|
|
|
|
|
0, /* tp_getset */
|
|
|
|
|
&CurvePoint_Type, /* tp_base */
|
|
|
|
|
0, /* tp_dict */
|
|
|
|
|
0, /* tp_descr_get */
|
|
|
|
|
0, /* tp_descr_set */
|
|
|
|
|
0, /* tp_dictoffset */
|
|
|
|
|
(initproc)StrokeVertex___init__, /* tp_init */
|
|
|
|
|
0, /* tp_alloc */
|
|
|
|
|
0, /* tp_new */
|
|
|
|
|
};
|
|
|
|
|
|
2008-07-22 08:15:21 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|