diff options
author | Joseph Gilbert <ascotan@gmail.com> | 2005-03-19 06:24:00 +0300 |
---|---|---|
committer | Joseph Gilbert <ascotan@gmail.com> | 2005-03-19 06:24:00 +0300 |
commit | cbbe236f9237cd7a942e250493b6c7402300deb7 (patch) | |
tree | ccdfdfe9d008dc0f5be4a5d1d649a60eaba40cb9 /source/blender/python/api2_2x/Text3d.c | |
parent | f61c5b1eecea8140366f6258eebb244bdbd3b87c (diff) |
- patch submitted by guitargeek
-includes:
*Text3d accessors - ablity to manipulate FONT objects through python
*update to Object.link - calls text_to_curve upon ob_font link for drawing
*update to constant.h - constant type checking define
*update to curve.c - clamp values on getters/setters
*clean up of Text3d module
Diffstat (limited to 'source/blender/python/api2_2x/Text3d.c')
-rw-r--r-- | source/blender/python/api2_2x/Text3d.c | 604 |
1 files changed, 543 insertions, 61 deletions
diff --git a/source/blender/python/api2_2x/Text3d.c b/source/blender/python/api2_2x/Text3d.c index 59e62c644b7..c8f834852a2 100644 --- a/source/blender/python/api2_2x/Text3d.c +++ b/source/blender/python/api2_2x/Text3d.c @@ -26,6 +26,7 @@ * This is a new part of Blender. * * Contributor(s): Joilnen Leite + * Johnny Matthews * * ***** END GPL/BL DUAL LICENSE BLOCK ***** */ @@ -33,63 +34,94 @@ #include "DNA_scene_types.h" #include "DNA_view3d_types.h" #include "DNA_vfont_types.h" - #include "MEM_guardedalloc.h" - #include "BKE_object.h" #include "BDR_editobject.h" #include "BKE_displist.h" #include "MEM_guardedalloc.h" - +#include "mydevice.h" #include "blendef.h" #include "Text3d.h" +#include "Curve.h" +#include "constant.h" +#include "Types.h" -#include "mydevice.h" - -/* -fixme hackage warning: -this decl is copied from source/blender/src/editfont.c -it belongs in a .h file! -*/ -VFont *get_builtin_font(void); - -extern PyObject *Curve_getName( BPy_Text3d * self ); -extern PyObject *Curve_setName( BPy_Text3d * self, PyObject * args ); +//no prototypes declared in header files - external linkage outside of python +extern VFont *get_builtin_font(void); +extern void freedisplist(struct ListBase *lb); /*****************************************************************************/ -/* Python API function prototypes for the Effect module. */ +/* Python API function prototypes for the Text3D module. */ /*****************************************************************************/ static PyObject *M_Text3d_New( PyObject * self, PyObject * args ); static PyObject *M_Text3d_Get( PyObject * self, PyObject * args ); /*****************************************************************************/ -/* Python BPy_Text3d methods declarations: */ +/* Python callback function prototypes for the Text3D module. /*****************************************************************************/ -/*PyObject *Text3d_getType(BPy_Text3d *self);*/ +static PyObject *return_ModuleConstant( char *constant_name); +static PyObject *generate_ModuleIntConstant(char *name, int value); /*****************************************************************************/ -/* Python Text3d_Type callback function prototypes: */ +/* Python method structure definition for Blender.Text3d module: */ /*****************************************************************************/ +struct PyMethodDef M_Text3d_methods[] = { + {"New", ( PyCFunction ) M_Text3d_New, METH_VARARGS, NULL}, + {"Get", ( PyCFunction ) M_Text3d_Get, METH_VARARGS, NULL}, + {NULL, NULL, 0, NULL} +}; - -void Text3dDeAlloc( BPy_Text3d * msh ); +/*****************************************************************************/ +/* Python Text3d_Type callback function prototypes: */ +/*****************************************************************************/ /* int Text3dPrint (BPy_Text3d *msh, FILE *fp, int flags); */ -int Text3dSetAttr( BPy_Text3d * msh, char *name, PyObject * v ); -PyObject *Text3dGetAttr( BPy_Text3d * msh, char *name ); -PyObject *Text3dRepr( BPy_Text3d * msh ); -PyObject *Text3dCreatePyObject( Text3d *text3d ); -int Text3dCheckPyObject( PyObject * py_obj ); -struct Text3d *Text3dFromPyObject( PyObject * py_obj ); +static void Text3dDeAlloc( BPy_Text3d * self ); +static int Text3dSetAttr( BPy_Text3d * self, char *name, PyObject * value ); +static PyObject *Text3dGetAttr( BPy_Text3d * self, char *name ); +static PyObject *Text3dRepr( BPy_Text3d * self ); +/*****************************************************************************/ +/* Python BPy_Text3d methods declarations: */ +/*****************************************************************************/ +/*PyObject *Text3d_getType(BPy_Text3d *self);*/ static PyObject *Text3d_getName( BPy_Text3d * self ); static PyObject *Text3d_setName( BPy_Text3d * self, PyObject * args ); static PyObject *Text3d_setText( BPy_Text3d * self, PyObject * args ); static PyObject *Text3d_getText( BPy_Text3d * self ); +static PyObject *Text3d_getDrawMode( BPy_Text3d * self ); +static PyObject *Text3d_setDrawMode( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getUVorco( BPy_Text3d * self ); +static PyObject *Text3d_setUVorco( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getBevelAmount( BPy_Text3d * self ); +static PyObject *Text3d_setBevelAmount( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getDefaultResolution( BPy_Text3d * self ); +static PyObject *Text3d_setDefaultResolution( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getWidth( BPy_Text3d * self ); +static PyObject *Text3d_setWidth( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getExtrudeDepth( BPy_Text3d * self ); +static PyObject *Text3d_setExtrudeDepth( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getExtrudeBevelDepth( BPy_Text3d * self ); +static PyObject *Text3d_setExtrudeBevelDepth( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getShear( BPy_Text3d * self ); +static PyObject *Text3d_setShear( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getSize( BPy_Text3d * self ); +static PyObject *Text3d_setSize( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getLineSeparation( BPy_Text3d * self ); +static PyObject *Text3d_setLineSeparation( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getSpacing( BPy_Text3d * self ); +static PyObject *Text3d_setSpacing( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getXoffset( BPy_Text3d * self ); +static PyObject *Text3d_setXoffset( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getYoffset( BPy_Text3d * self ); +static PyObject *Text3d_setYoffset( BPy_Text3d * self, PyObject * args ); +static PyObject *Text3d_getAlignment( BPy_Text3d * self ); +static PyObject *Text3d_setAlignment( BPy_Text3d * self, PyObject * args ); /*****************************************************************************/ /* Python BPy_Text3d methods table: */ /*****************************************************************************/ -static char text2text3_doc[] = "(str) - set Text3d string"; +char M_Text3D_doc[] = "The Blender Text3D module\n\n\ + This module provides control over Text Curve objects in Blender.\n"; static PyMethodDef BPy_Text3d_methods[] = { {"getName", ( PyCFunction ) Text3d_getName, @@ -99,8 +131,64 @@ static PyMethodDef BPy_Text3d_methods[] = { {"setText", ( PyCFunction ) Text3d_setText, METH_VARARGS, "() - Sets Text3d Data"}, {"getText", ( PyCFunction ) Text3d_getText, - METH_NOARGS, "() - Gets Text3d Data"}, - {NULL, NULL, 0, NULL} + METH_NOARGS, "() - Gets Text3d Data"}, + {"getDrawMode", ( PyCFunction ) Text3d_getDrawMode, + METH_NOARGS, "() - Return the font drawing mode"}, + {"setDrawMode", ( PyCFunction ) Text3d_setDrawMode, + METH_VARARGS, "(int) - Set the font drawing mode"}, + {"getUVorco", ( PyCFunction ) Text3d_getUVorco, + METH_NOARGS, "() - Return wether UV coords are used for Texture mapping"}, + {"setUVorco", ( PyCFunction ) Text3d_setUVorco, + METH_VARARGS, "() - Set the font to use UV coords for Texture mapping"}, + {"getBevelAmount", ( PyCFunction ) Text3d_getBevelAmount, + METH_NOARGS, "() - Return bevel resolution"}, + {"setBevelAmount", ( PyCFunction ) Text3d_setBevelAmount, + METH_VARARGS, "() - Sets bevel resolution"}, + {"getDefaultResolution", ( PyCFunction ) Text3d_getDefaultResolution, + METH_NOARGS, "() - Return Default text resolution"}, + {"setDefaultResolution", ( PyCFunction ) Text3d_setDefaultResolution, + METH_VARARGS, "() - Sets Default text Resolution"}, + {"getWidth", ( PyCFunction ) Text3d_getWidth, + METH_NOARGS, "() - Return curve width"}, + {"setWidth", ( PyCFunction ) Text3d_setWidth, + METH_VARARGS, "(int) - Sets curve width"}, + {"getExtrudeDepth", ( PyCFunction ) Text3d_getExtrudeDepth, + METH_NOARGS, "() - Gets Text3d ExtrudeDepth"}, + {"setExtrudeDepth", ( PyCFunction ) Text3d_setExtrudeDepth, + METH_VARARGS, "() - Sets Text3d ExtrudeDepth"}, + {"getExtrudeBevelDepth", ( PyCFunction ) Text3d_getExtrudeBevelDepth, + METH_NOARGS, "() - Gets Text3d ExtrudeBevelDepth"}, + {"setExtrudeBevelDepth", ( PyCFunction ) Text3d_setExtrudeBevelDepth, + METH_VARARGS, "() - Sets Text3d ExtrudeBevelDepth"}, + {"getShear", ( PyCFunction ) Text3d_getShear, + METH_NOARGS, "() - Gets Text3d Shear Data"}, + {"setShear", ( PyCFunction ) Text3d_setShear, + METH_VARARGS, "() - Sets Text3d Shear Data"}, + {"getSize", ( PyCFunction ) Text3d_getSize, + METH_NOARGS, "() - Gets Text3d Size Data"}, + {"setSize", ( PyCFunction ) Text3d_setSize, + METH_VARARGS, "() - Sets Text3d Size Data"}, + {"getLineSeparation", ( PyCFunction ) Text3d_getLineSeparation, + METH_NOARGS, "() - Gets Text3d LineSeparation Data"}, + {"setLineSeparation", ( PyCFunction ) Text3d_setLineSeparation, + METH_VARARGS, "() - Sets Text3d LineSeparation Data"}, + {"getSpacing", ( PyCFunction ) Text3d_getSpacing, + METH_NOARGS, "() - Gets Text3d letter spacing"}, + {"setSpacing", ( PyCFunction ) Text3d_setSpacing, + METH_VARARGS, "() - Sets Text3d letter spacing"}, + {"getXoffset", ( PyCFunction ) Text3d_getXoffset, + METH_NOARGS, "() - Gets Text3d Xoffset Data"}, + {"setXoffset", ( PyCFunction ) Text3d_setXoffset, + METH_VARARGS, "() - Sets Text3d Xoffset Data"}, + {"getYoffset", ( PyCFunction ) Text3d_getYoffset, + METH_NOARGS, "() - Gets Text3d Yoffset Data"}, + {"setYoffset", ( PyCFunction ) Text3d_setYoffset, + METH_VARARGS, "() - Sets Text3d Yoffset Data"}, + {"getAlignment", ( PyCFunction ) Text3d_getAlignment, + METH_NOARGS, "() - Gets Text3d Alignment Data"}, + {"setAlignment", ( PyCFunction ) Text3d_setAlignment, + METH_VARARGS, "() - Sets Text3d Alignment Data"}, + {NULL, NULL, 0, NULL} }; /*****************************************************************************/ @@ -130,27 +218,6 @@ PyTypeObject Text3d_Type = { 0, /* tp_members */ }; -/*****************************************************************************/ -/* Python method structure definition for Blender.Text3d module: */ -/*****************************************************************************/ -struct PyMethodDef M_Text3d_methods[] = { - {"New", ( PyCFunction ) M_Text3d_New, METH_VARARGS, NULL}, - {"Get", M_Text3d_Get, METH_VARARGS, NULL}, - {"get", M_Text3d_Get, METH_VARARGS, NULL}, - {NULL, NULL, 0, NULL} -}; - -/*****************************************************************************/ -/* Python BPy_Text3d methods declarations: */ -/* extern prototypes */ -/*****************************************************************************/ -/*static PyObject *Text2Text3d( BPy_Text3d * self, PyObject * args );*/ /*unused nor defined*/ -extern void freedisplist(struct ListBase *lb); -extern VFont *get_builtin_font(void); -int Text3d_CheckPyObject( PyObject * py_obj ); -struct Text3d *Text3d_FromPyObject( PyObject * py_obj ); - - /* * Text3d_update( ) * method to update display list for a Curve. @@ -163,7 +230,6 @@ static PyObject *Text3d_update( BPy_Text3d * self ) return Py_None; } - /*****************************************************************************/ /* Function: M_Text3d_New */ /* Python equivalent: Blender.Text3d.New */ @@ -272,17 +338,51 @@ PyObject *M_Text3d_Get( PyObject * self, PyObject * args ) } } +static PyObject *generate_ModuleIntConstant(char *name, int value) +{ + PyObject *constant = M_constant_New(); + + constant_insert((BPy_constant*)constant, + "value", PyInt_FromLong(value)); + constant_insert((BPy_constant*)constant, + "name", PyString_FromString(name)); + + Py_INCREF(constant); + return constant; +} + PyObject *Text3d_Init( void ) { + //module PyObject *submodule; + //add module... Text3d_Type.ob_type = &PyType_Type; + submodule = Py_InitModule3( "Blender.Text3d", M_Text3d_methods, + M_Text3D_doc); + + //add constants to module... + PyModule_AddObject( submodule, "LEFT", + generate_ModuleIntConstant("Text3d.LEFT", CU_LEFT)); + PyModule_AddObject( submodule, "MIDDLE", + generate_ModuleIntConstant("Text3d.MIDDLE", CU_MIDDLE)); + PyModule_AddObject( submodule, "RIGHT", + generate_ModuleIntConstant("Text3d.RIGHT", CU_RIGHT)); + PyModule_AddObject( submodule, "FLUSH", + generate_ModuleIntConstant("Text3d.FLUSH", CU_FLUSH)); + PyModule_AddObject( submodule, "DRAW3D", + generate_ModuleIntConstant("Text3d.DRAW3D", CU_3D)); + PyModule_AddObject( submodule, "DRAWFRONT", + generate_ModuleIntConstant("Text3d.DRAWFRONT", CU_FRONT)); + PyModule_AddObject( submodule, "DRAWBACK", + generate_ModuleIntConstant("Text3d.DRAWBACK", CU_BACK)); + PyModule_AddObject( submodule, "UVORCO", + generate_ModuleIntConstant("Text3d.UVORCO", CU_UV_ORCO)); - submodule = Py_InitModule3( "Blender.Text3d", M_Text3d_methods, 0 ); return ( submodule ); } -void Text3dDeAlloc( BPy_Text3d * self ) +static void Text3dDeAlloc( BPy_Text3d * self ) { PyObject_DEL( self ); } @@ -293,9 +393,7 @@ void Text3dDeAlloc( BPy_Text3d * self ) /* the function that accesses BPy_Text3d "member variables" and */ /* methods. */ /*****************************************************************************/ - - -PyObject *Text3dGetAttr( BPy_Text3d * self, char *name ) +static PyObject *Text3dGetAttr( BPy_Text3d * self, char *name ) { return Py_FindMethod( BPy_Text3d_methods, ( PyObject * ) self, name ); } @@ -305,8 +403,7 @@ PyObject *Text3dGetAttr( BPy_Text3d * self, char *name ) /* Description: This is a callback function for the BPy_Effect type. It */ /* sets Effect Data attributes (member variables). */ /*****************************************************************************/ - -int Text3dSetAttr( BPy_Text3d * self, char *name, PyObject * value ) +static int Text3dSetAttr( BPy_Text3d * self, char *name, PyObject * value ) { return 0; /* normal exit */ } @@ -317,12 +414,14 @@ int Text3dSetAttr( BPy_Text3d * self, char *name, PyObject * value ) /* builds a meaninful string to represent effcte objects. */ /*****************************************************************************/ -PyObject *Text3dRepr( BPy_Text3d * self ) +static PyObject *Text3dRepr( BPy_Text3d * self ) { char *str = ""; return PyString_FromString( str ); } + + int Text3d_CheckPyObject( PyObject * py_obj ) { return ( py_obj->ob_type == &Text3d_Type ); @@ -336,14 +435,34 @@ struct Text3d *Text3d_FromPyObject( PyObject * py_obj ) return ((struct Text3d*) blen_obj->curve ); } +static PyObject *return_ModuleConstant( char *constant_name){ + + PyObject *module = NULL, *dict = NULL, *constant = NULL;; + + module = PyImport_AddModule("Blender.Text3d"); + if(!module){ //null = error returning module + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "error encountered with returning module constant..." ) ); + } + dict = PyModule_GetDict(module); //never fails + + constant = PyDict_GetItemString(dict, constant_name); + if(!constant){ //null = key not found + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "error encountered with returning module constant..." ) ); + } + + return EXPP_incr_ret( constant ); +} + static PyObject *Text3d_getName( BPy_Text3d * self ) { - return Curve_getName( self ); + return Curve_getName( (BPy_Curve*)self ); } static PyObject *Text3d_setName( BPy_Text3d * self, PyObject * args ) { - return Curve_setName( self,args ); + return Curve_setName( (BPy_Curve*)self,args ); } static PyObject *Text3d_setText( BPy_Text3d * self, PyObject * args ) @@ -370,3 +489,366 @@ static PyObject *Text3d_getText( BPy_Text3d * self ) return Py_None; } +static PyObject* Text3d_getDrawMode(BPy_Text3d* self) +{ + PyObject *tuple = NULL; + int size = 0, pos = 0; + + //get the tuple size + if(self->curve->flag & CU_3D) + size++; + if (self->curve->flag & CU_FRONT) + size++; + if (self->curve->flag & CU_BACK) + size++; + + //generate tuple + tuple = PyTuple_New(size); + + //load tuple + if(self->curve->flag & CU_3D){ + PyTuple_SET_ITEM( tuple, pos, return_ModuleConstant("DRAW3D")); + pos++; + } + if (self->curve->flag & CU_FRONT){ + PyTuple_SET_ITEM( tuple, pos, return_ModuleConstant("DRAWFRONT")); + pos++; + } + if (self->curve->flag & CU_BACK){ + PyTuple_SET_ITEM( tuple, pos, return_ModuleConstant("DRAWBACK")); + pos++; + } + + return tuple; +} + +static PyObject* Text3d_setDrawMode(BPy_Text3d* self,PyObject* args) +{ + PyObject *listObject = NULL; + int size, i; + short temp; + + size = PySequence_Length(args); + if ( size == 1 ) { + listObject = PySequence_GetItem(args, 0); + if ( PySequence_Check(listObject) ) { + size = PySequence_Length(listObject); + }else{ //not a sequence but maybe a single constant + Py_INCREF(args); + listObject = args; + } + } else { //a list of objects (non-sequence) + Py_INCREF(args); + listObject = args; + } + if ( size > 3 || size < 1 ) { + //bad number of arguments + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "too many parameters - expects 1 - 3 constants" ) ); + } + //clear bits + temp = self->curve->flag; //in case of failure + if(self->curve->flag & CU_3D) + self->curve->flag &= ~CU_3D; + if(self->curve->flag & CU_FRONT) + self->curve->flag &= ~CU_FRONT; + if(self->curve->flag & CU_BACK) + self->curve->flag &= ~CU_BACK; + + //parse and set bits + for (i = 0; i < size; i++) { + PyObject *v; + BPy_constant *constant; + int value; + + v = PySequence_GetItem(listObject, i); + if (v == NULL) { //unable to return item - null = failure + Py_DECREF(listObject); + self->curve->flag = temp; + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "unable to parse list" ) ); + } + if( !BPy_Constant_Check(v)){ + Py_DECREF(listObject); + Py_DECREF(v); + self->curve->flag = temp; + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "bad argument types - expects module constants" ) ); + } + value = PyInt_AS_LONG(PyDict_GetItemString( + ((BPy_constant*)v)->dict, "value")); + self->curve->flag |= (short)value; + Py_DECREF(v); + } + Py_DECREF(listObject); + return EXPP_incr_ret( Py_None ); +} + +static PyObject* Text3d_getUVorco(BPy_Text3d* self) +{ + if(self->curve->flag & CU_UV_ORCO) + return EXPP_incr_ret_True(); + else + return EXPP_incr_ret_False(); +} + +static PyObject* Text3d_setUVorco(BPy_Text3d* self,PyObject* args) +{ + int flag; + + if( !PyArg_ParseTuple( args, "i", &flag ) ) + return EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected TRUE or FALSE (1 or 0)" ); + + if( flag < 0 || flag > 1 ) + return EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected TRUE or FALSE (1 or 0)" ); + + if( flag ) + self->curve->flag |= CU_UV_ORCO; + else + self->curve->flag &= ~CU_UV_ORCO; + + return EXPP_incr_ret( Py_None ); +} + +static PyObject* Text3d_getBevelAmount(BPy_Text3d* self) +{ + return Curve_getBevresol((BPy_Curve*)self); +} + +static PyObject* Text3d_setBevelAmount(BPy_Text3d* self,PyObject* args) +{ + return Curve_setBevresol((BPy_Curve*)self,args); +} + +static PyObject *Text3d_getDefaultResolution( BPy_Text3d * self ) +{ + return Curve_getResolu( (BPy_Curve*)self ); +} + +static PyObject *Text3d_setDefaultResolution( BPy_Text3d * self, PyObject * args ) +{ + return Curve_setResolu( (BPy_Curve*)self,args ); +} + +static PyObject *Text3d_getWidth( BPy_Text3d * self ) +{ + return Curve_getWidth( (BPy_Curve*)self ); +} + +static PyObject *Text3d_setWidth( BPy_Text3d * self, PyObject * args ) +{ + return Curve_setWidth( (BPy_Curve*)self,args ); +} + +static PyObject *Text3d_getExtrudeDepth( BPy_Text3d * self ) +{ + return Curve_getExt1( (BPy_Curve*)self ); +} + +static PyObject *Text3d_setExtrudeDepth( BPy_Text3d * self, PyObject * args ) +{ + return Curve_setExt1( (BPy_Curve*)self,args ); +} + +static PyObject *Text3d_getExtrudeBevelDepth( BPy_Text3d * self ) +{ + return Curve_getExt2( (BPy_Curve*)self ); +} + +static PyObject *Text3d_setExtrudeBevelDepth( BPy_Text3d * self, PyObject * args ) +{ + return Curve_setExt2( (BPy_Curve*)self,args ); +} + +static PyObject *Text3d_getShear( BPy_Text3d * self ) +{ + PyObject *attr = PyFloat_FromDouble( (double) self->curve->shear ); + + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.shear attribute" ) ); +} + +static PyObject *Text3d_setShear( BPy_Text3d * self, PyObject * args ) +{ + float value; + + if( !PyArg_ParseTuple( args, "f", &value ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected float argument" ) ); + + if(value > 1.0f || value < -1.0f) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "acceptable values are between 1.0 and -1.0" ) ); + self->curve->shear = value; + + return EXPP_incr_ret( Py_None ); +} + +static PyObject *Text3d_getSize( BPy_Text3d * self ) +{ + PyObject *attr = PyFloat_FromDouble( (double) self->curve->fsize ); + + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.fsize attribute" ) ); +} + +static PyObject *Text3d_setSize( BPy_Text3d * self, PyObject * args ) +{ + float value; + + if( !PyArg_ParseTuple( args, "f", &value ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected float argument" ) ); + + if(value > 10.0f || value < 0.1f) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "acceptable values are between 10.0 and 0.1" ) ); + self->curve->fsize = value; + + return EXPP_incr_ret( Py_None ); +} + +static PyObject *Text3d_getLineSeparation( BPy_Text3d * self ) +{ + PyObject *attr = PyFloat_FromDouble( (double) self->curve->linedist ); + + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.linedist attribute" ) ); +} + +static PyObject *Text3d_setLineSeparation( BPy_Text3d * self, PyObject * args ) +{ + float value; + + if( !PyArg_ParseTuple( args, "f", &value ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected float argument" ) ); + + if(value > 10.0f || value < 0.0f) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "acceptable values are between 10.0 and 0.0" ) ); + self->curve->linedist = value; + + return EXPP_incr_ret( Py_None ); +} + +static PyObject *Text3d_getSpacing( BPy_Text3d * self ) +{ + PyObject *attr = PyFloat_FromDouble( (double) self->curve->spacing ); + + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.spacing attribute" ) ); +} + +static PyObject *Text3d_setSpacing( BPy_Text3d * self, PyObject * args ) +{ + float value; + + if( !PyArg_ParseTuple( args, "f", &value ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected float argument" ) ); + + if(value > 10.0f || value < 0.0f) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "acceptable values are between 10.0 and 0.0" ) ); + self->curve->spacing = value; + + return EXPP_incr_ret( Py_None ); +} +static PyObject *Text3d_getXoffset( BPy_Text3d * self ) +{ + PyObject *attr = PyFloat_FromDouble( (double) self->curve->xof ); + + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.xof attribute" ) ); +} + +static PyObject *Text3d_setXoffset( BPy_Text3d * self, PyObject * args ) +{ + float value; + + if( !PyArg_ParseTuple( args, "f", &value ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected float argument" ) ); + + if(value > 50.0f || value < -50.0f) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "acceptable values are between 50.0 and -50.0" ) ); + self->curve->xof = value; + + return EXPP_incr_ret( Py_None ); +} + +static PyObject *Text3d_getYoffset( BPy_Text3d * self ) +{ + PyObject *attr = PyFloat_FromDouble( (double) self->curve->yof ); + + if( attr ) + return attr; + + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.yof attribute" ) ); +} + +static PyObject *Text3d_setYoffset( BPy_Text3d * self, PyObject * args ) +{ + float value; + + if( !PyArg_ParseTuple( args, "f", &value ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected float argument" ) ); + + if(value > 50.0f || value < -50.0f) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "acceptable values are between 50.0 and -50.0" ) ); + self->curve->yof = value; + + return EXPP_incr_ret( Py_None ); +} + +static PyObject *Text3d_getAlignment( BPy_Text3d * self ) +{ + if(self->curve->spacemode == CU_LEFT){ + return return_ModuleConstant("LEFT"); + }else if (self->curve->spacemode == CU_MIDDLE){ + return return_ModuleConstant("MIDDLE"); + }else if (self->curve->spacemode == CU_RIGHT){ + return return_ModuleConstant("RIGHT"); + }else if (self->curve->spacemode == CU_FLUSH){ + return return_ModuleConstant("FLUSH"); + } + return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, + "couldn't get Curve.spacemode attribute" ) ); +} + +static PyObject *Text3d_setAlignment( BPy_Text3d * self, PyObject * args ) +{ + BPy_constant *constant; + int value; + + if( !PyArg_ParseTuple( args, "O!", &constant_Type, &constant ) ) + return ( EXPP_ReturnPyObjError( PyExc_AttributeError, + "expected module constant" ) ); + + value = PyInt_AS_LONG(PyDict_GetItemString(constant->dict, "value")); + self->curve->spacemode = (short)value; + + return EXPP_incr_ret( Py_None ); +} |