Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/python/api2_2x/Metaball.c')
-rw-r--r--source/blender/python/api2_2x/Metaball.c1186
1 files changed, 0 insertions, 1186 deletions
diff --git a/source/blender/python/api2_2x/Metaball.c b/source/blender/python/api2_2x/Metaball.c
deleted file mode 100644
index 9cc5aac3d77..00000000000
--- a/source/blender/python/api2_2x/Metaball.c
+++ /dev/null
@@ -1,1186 +0,0 @@
-/*
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * This is a new part of Blender.
- *
- * Contributor(s): Jacques Guignot
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "Metaball.h" /*This must come first*/
-
-#include "BKE_main.h"
-#include "BKE_global.h"
-#include "BKE_mball.h"
-#include "BKE_library.h"
-#include "BLI_blenlib.h"
-#include "BLI_arithb.h" /* for quat normal */
-#include "DNA_object_types.h"
-#include "Mathutils.h"
-#include "Material.h"
-#include "gen_utils.h"
-#include "gen_library.h"
-
-/* for dealing with materials */
-#include "MEM_guardedalloc.h"
-#include "BKE_material.h"
-
-/* checks for the metaelement being removed */
-#define METAELEM_DEL_CHECK_PY(bpy_meta_elem) if (!(bpy_meta_elem->metaelem)) return ( EXPP_ReturnPyObjError( PyExc_RuntimeError, "Metaball has been removed" ) );
-#define METAELEM_DEL_CHECK_INT(bpy_meta_elem) if (!(bpy_meta_elem->metaelem)) return ( EXPP_ReturnIntError( PyExc_RuntimeError, "Metaball has been removed" ) );
-
-/*****************************************************************************/
-/* Python API function prototypes for the Metaball module. */
-/*****************************************************************************/
-static PyObject *M_Metaball_New( PyObject * self, PyObject * args );
-static PyObject *M_Metaball_Get( PyObject * self, PyObject * args );
-
-/*****************************************************************************/
-/* The following string definitions are used for documentation strings. */
-/* In Python these will be written to the console when doing a */
-/* Blender.Metaball.__doc__ */
-/*****************************************************************************/
-static char M_Metaball_doc[] =
- "The Blender Metaball module\n\n\nMetaballs are primitive shapes\
- such as balls, pipes, boxes and planes,\
- that can join each other to create smooth,\
- organic volumes\n. The shapes themseves are called\
- 'Metaelements' and can be accessed from the Metaball module.";
-
-static char M_Metaball_New_doc[] = "Creates new metaball object data";
-
-static char M_Metaball_Get_doc[] = "Retreives an existing metaball object data";
-
-/*****************************************************************************/
-/* Python method structure definition for Blender.Metaball module: */
-/*****************************************************************************/
-struct PyMethodDef M_Metaball_methods[] = {
- {"New", M_Metaball_New, METH_VARARGS, M_Metaball_New_doc},
- {"Get", M_Metaball_Get, METH_VARARGS, M_Metaball_Get_doc},
- {NULL, NULL, 0, NULL}
-};
-
-static PyObject *M_MetaElem_TypesDict( void )
-{
- PyObject *Types = PyConstant_New( );
-
- if( Types ) {
- BPy_constant *d = ( BPy_constant * ) Types;
-
- PyConstant_Insert( d, "BALL", PyInt_FromLong( MB_BALL ) );
- /* PyConstant_Insert( d, "TUBEX", PyInt_FromLong( MB_TUBEX ) ); - DEPRICATED */
- /* PyConstant_Insert( d, "TUBEY", PyInt_FromLong( MB_TUBEY ) ); - DEPRICATED */
- /* PyConstant_Insert( d, "TUBEZ", PyInt_FromLong( MB_TUBEZ ) ); - DEPRICATED */
- PyConstant_Insert( d, "TUBE", PyInt_FromLong( MB_TUBE ) );
- PyConstant_Insert( d, "PLANE", PyInt_FromLong( MB_PLANE ) );
- PyConstant_Insert( d, "ELIPSOID",PyInt_FromLong( MB_ELIPSOID ) );
- PyConstant_Insert( d, "CUBE", PyInt_FromLong( MB_CUBE ) );
- }
-
- return Types;
-}
-
-static PyObject *M_MetaElem_UpdateDict( void )
-{
- PyObject *Update = PyConstant_New( );
-
- if( Update ) {
- BPy_constant *d = ( BPy_constant * ) Update;
- PyConstant_Insert( d, "ALWAYS", PyInt_FromLong( MB_UPDATE_ALWAYS ) );
- PyConstant_Insert( d, "HALFRES",PyInt_FromLong( MB_UPDATE_HALFRES ) );
- PyConstant_Insert( d, "FAST", PyInt_FromLong( MB_UPDATE_FAST ) );
- PyConstant_Insert( d, "NEVER", PyInt_FromLong( MB_UPDATE_NEVER ) );
- }
-
- return Update;
-}
-
-/*****************************************************************************/
-/* Python BPy_Metaball methods declarations: */
-/*****************************************************************************/
-static PyObject *Metaball_getElements( BPy_Metaball * self );
-static PyObject *Metaball_getMaterials( BPy_Metaball * self );
-static int Metaball_setMaterials( BPy_Metaball * self, PyObject * value );
-static PyObject *Metaball_getWiresize( BPy_Metaball * self );
-static int Metaball_setWiresize( BPy_Metaball * self, PyObject * value );
-static PyObject *Metaball_getRendersize( BPy_Metaball * self );
-static int Metaball_setRendersize( BPy_Metaball * self, PyObject * value);
-static PyObject *Metaball_getThresh( BPy_Metaball * self );
-static int Metaball_setThresh( BPy_Metaball * self, PyObject * args );
-static PyObject *Metaball_getUpdate( BPy_Metaball * self );
-static int Metaball_setUpdate( BPy_Metaball * self, PyObject * args );
-static PyObject *Metaball_copy( BPy_Metaball * self );
-
-/*****************************************************************************/
-/* Python BPy_Metaball methods table: */
-/*****************************************************************************/
-static PyMethodDef BPy_Metaball_methods[] = {
- /* name, method, flags, doc */
- {"__copy__", ( PyCFunction ) Metaball_copy,
- METH_NOARGS, "() - Return a copy of this metaball"},
- {"copy", ( PyCFunction ) Metaball_copy,
- METH_NOARGS, "() - Return a copy of this metaball"},
- {NULL, NULL, 0, NULL}
-};
-
-/*****************************************************************************/
-/* Python BPy_Metaelem methods table: */
-/*****************************************************************************/
-static PyMethodDef BPy_Metaelem_methods[] = {
- {NULL, NULL, 0, NULL}
-};
-
-/*****************************************************************************/
-/* Python Metaball_Type callback function prototypes: */
-/*****************************************************************************/
-static PyObject *Metaball_repr( BPy_Metaball * self );
-static int Metaball_compare( BPy_Metaball * a, BPy_Metaball * b );
-
-/*****************************************************************************/
-/* Python Metaelem_Type callback function prototypes: */
-/*****************************************************************************/
-static void Metaelem_dealloc( BPy_Metaelem * self );
-static PyObject *Metaelem_repr( BPy_Metaelem * self );
-static int Metaelem_compare( BPy_Metaelem * a, BPy_Metaelem * b );
-
-static PyObject *Metaelem_getType( BPy_Metaelem *self );
-static int Metaelem_setType( BPy_Metaelem * self, PyObject * args );
-static PyObject *Metaelem_getCoord( BPy_Metaelem * self );
-static int Metaelem_setCoord( BPy_Metaelem * self, VectorObject * value );
-static PyObject *Metaelem_getDims( BPy_Metaelem * self );
-static int Metaelem_setDims( BPy_Metaelem * self, VectorObject * value );
-static PyObject *Metaelem_getQuat( BPy_Metaelem * self );
-static int Metaelem_setQuat( BPy_Metaelem * self, QuaternionObject * value );
-static PyObject *Metaelem_getStiffness( BPy_Metaelem * self );
-static int Metaelem_setStiffness( BPy_Metaelem * self, PyObject * value );
-static PyObject *Metaelem_getRadius( BPy_Metaelem * self );
-static int Metaelem_setRadius( BPy_Metaelem * self, PyObject * value );
-
-static PyObject *Metaelem_getMFlagBits( BPy_Metaelem * self, void * type );
-static int Metaelem_setMFlagBits( BPy_Metaelem * self, PyObject * value, void * type );
-
-/*****************************************************************************/
-/* Python attributes get/set structure: */
-/*****************************************************************************/
-static PyGetSetDef BPy_Metaball_getseters[] = {
- GENERIC_LIB_GETSETATTR,
- {"materials",
- (getter)Metaball_getMaterials, (setter)Metaball_setMaterials,
- "Number of metaball users",
- NULL},
- {"elements",
- (getter)Metaball_getElements, (setter)NULL,
- "Elements in this metaball",
- NULL},
- {"wiresize",
- (getter)Metaball_getWiresize, (setter)Metaball_setWiresize,
- "The density to draw the metaball in the 3D view",
- NULL},
- {"rendersize",
- (getter)Metaball_getRendersize, (setter)Metaball_setRendersize,
- "The density to render wire",
- NULL},
- {"thresh",
- (getter)Metaball_getThresh, (setter)Metaball_setThresh,
- "The density to render wire",
- NULL},
- {"update",
- (getter)Metaball_getUpdate, (setter)Metaball_setUpdate,
- "The setting for updating this metaball data",
- NULL},
- {NULL,NULL,NULL,NULL,NULL} /* Sentinel */
-};
-
-
-/*****************************************************************************/
-/* Python TypeMetaball structure definition: */
-/*****************************************************************************/
-PyTypeObject Metaball_Type = {
- PyObject_HEAD_INIT( NULL ) /* required py macro */
- 0, /* ob_size */
- /* For printing, in format "<module>.<name>" */
- "Blender Metaball", /* char *tp_name; */
- sizeof( BPy_Metaball ), /* int tp_basicsize; */
- 0, /* tp_itemsize; For allocation */
-
- /* Methods to implement standard operations */
-
- NULL, /* destructor tp_dealloc; */
- NULL, /* printfunc tp_print; */
- NULL, /* getattrfunc tp_getattr; */
- NULL, /* setattrfunc tp_setattr; */
- ( cmpfunc ) Metaball_compare, /* cmpfunc tp_compare; */
- ( reprfunc ) Metaball_repr, /* reprfunc 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) */
-
- ( hashfunc ) GenericLib_hash, /* 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, /* 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 ***/
- BPy_Metaball_methods, /* struct PyMethodDef *tp_methods; */
- NULL, /* struct PyMemberDef *tp_members; */
- BPy_Metaball_getseters, /* struct PyGetSetDef *tp_getset; */
- NULL, /* struct _typeobject *tp_base; */
- NULL, /* PyObject *tp_dict; */
- NULL, /* descrgetfunc tp_descr_get; */
- NULL, /* descrsetfunc tp_descr_set; */
- 0, /* long tp_dictoffset; */
- NULL, /* 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
-};
-
-
-static PyGetSetDef BPy_Metaelem_getseters[] = {
- {"type",
- (getter)Metaelem_getType, (setter)Metaelem_setType,
- "Metaelem Type",
- NULL},
- {"co",
- (getter)Metaelem_getCoord, (setter)Metaelem_setCoord,
- "Metaelem Location",
- NULL},
- {"quat",
- (getter)Metaelem_getQuat, (setter)Metaelem_setQuat,
- "Metaelem Rotation Quat",
- NULL},
- {"dims",
- (getter)Metaelem_getDims, (setter)Metaelem_setDims,
- "Metaelem Dimensions",
- NULL},
- {"stiffness",
- (getter)Metaelem_getStiffness, (setter)Metaelem_setStiffness,
- "MetaElem stiffness",
- NULL},
- {"radius",
- (getter)Metaelem_getRadius, (setter)Metaelem_setRadius,
- "The radius of the MetaElem",
- NULL},
- {"negative",
- (getter)Metaelem_getMFlagBits, (setter)Metaelem_setMFlagBits,
- "The density to render wire",
- (void *)MB_NEGATIVE},
- {"hide",
- (getter)Metaelem_getMFlagBits, (setter)Metaelem_setMFlagBits,
- "The density to render wire",
- (void *)MB_HIDE},
- {NULL,NULL,NULL,NULL,NULL} /* Sentinel */
-};
-
-
-/*****************************************************************************/
-/* Python TypeMetaelem structure definition: */
-/*****************************************************************************/
-PyTypeObject Metaelem_Type = {
- PyObject_HEAD_INIT( NULL ) /* required py macro */
- 0, /* ob_size */
- /* For printing, in format "<module>.<name>" */
- "Blender Metaelem", /* char *tp_name; */
- sizeof( BPy_Metaelem ), /* int tp_basicsize; */
- 0, /* tp_itemsize; For allocation */
-
- /* Methods to implement standard operations */
-
- ( destructor ) Metaelem_dealloc,/* destructor tp_dealloc; */
- NULL, /* printfunc tp_print; */
- NULL, /* getattrfunc tp_getattr; */
- NULL, /* setattrfunc tp_setattr; */
- ( cmpfunc ) Metaelem_compare, /* cmpfunc tp_compare; */
- ( reprfunc ) Metaelem_repr, /* reprfunc 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, /* 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 ***/
- BPy_Metaelem_methods, /* struct PyMethodDef *tp_methods; */
- NULL, /* struct PyMemberDef *tp_members; */
- BPy_Metaelem_getseters, /* struct PyGetSetDef *tp_getset; */
- NULL, /* struct _typeobject *tp_base; */
- NULL, /* PyObject *tp_dict; */
- NULL, /* descrgetfunc tp_descr_get; */
- NULL, /* descrsetfunc tp_descr_set; */
- 0, /* long tp_dictoffset; */
- NULL, /* 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
-};
-
-
-/*****************************************************************************/
-/* Function: M_Metaball_New */
-/* Python equivalent: Blender.Metaball.New */
-/*****************************************************************************/
-static PyObject *M_Metaball_New( PyObject * self, PyObject * args )
-{
- char *name = 0;
- BPy_Metaball *pymball; /* for Data object wrapper in Python */
- MetaBall *blmball; /* for actual Data we create in Blender */
-
- if( !PyArg_ParseTuple( args, "|s", &name ) )
- return ( EXPP_ReturnPyObjError( PyExc_TypeError,
- "Metaball.New() - expected string argument (or nothing)" ) );
-
- /* first create the MetaBall Data in Blender */
- if (name)
- blmball = add_mball( name );
- else
- blmball = add_mball( "Meta" );
-
- if( blmball ) {
- /* return user count to zero since add_mball() incref'ed it */
- blmball->id.us = 0;
- /* now create the wrapper obj in Python */
- pymball =
- ( BPy_Metaball * ) PyObject_NEW( BPy_Metaball,
- &Metaball_Type );
- } else
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "Metaball.New() - couldn't create data in Blender" ) );
-
- if( pymball == NULL )
- return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create MetaBall Data object" ) );
-
- pymball->metaball = blmball;
- /*link Python mballer wrapper to Blender MetaBall */
-
- return ( PyObject * ) pymball;
-}
-
-
-/*****************************************************************************/
-/* Function: M_Metaball_Get */
-/* Python equivalent: Blender.Metaball.Get */
-/* Description: Receives a string and returns the metaball data obj */
-/* whose name matches the string. If no argument is */
-/* passed in, a list of all metaball data names in the */
-/* current scene is returned. */
-/*****************************************************************************/
-static PyObject *M_Metaball_Get( PyObject * self, PyObject * args )
-{
- char *name = NULL;
- MetaBall *mball_iter = NULL;
-
- if( !PyArg_ParseTuple( args, "|s", &name ) )
- return ( EXPP_ReturnPyObjError( PyExc_TypeError,
- "Metaball.Get() - expected string argument (or nothing)" ) );
-
- if( name ) { /* (name) - Search mball by name */
- mball_iter = ( MetaBall * ) GetIdFromList( &( G.main->mball ), name );
-
- if (!mball_iter) {
- char error_msg[128];
- PyOS_snprintf( error_msg, sizeof( error_msg ),
- "Metaball.Get(\"%s\") - not found", name );
- return ( EXPP_ReturnPyObjError
- ( PyExc_NameError, error_msg ) );
- }
- return Metaball_CreatePyObject(mball_iter);
-
- } else { /* () - return a list of all mballs in the scene */
-
- PyObject *mballlist = PyList_New( BLI_countlist( &( G.main->mball ) ) );
- int index=0;
-
- if( mballlist == NULL )
- return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
- "MetaBall.Get() - couldn't create PyList" ) );
-
- mball_iter = G.main->mball.first;
- while( mball_iter ) {
- PyList_SetItem( mballlist, index, Metaball_CreatePyObject(mball_iter) );
- index++;
- mball_iter = mball_iter->id.next;
- }
- return mballlist;
- }
-
-}
-
-
-/*****************************************************************************/
-/* Function: initObject */
-/*****************************************************************************/
-PyObject *Metaball_Init( void )
-{
- PyObject *submodule;
- PyObject *Types= M_MetaElem_TypesDict( );
- PyObject *Update= M_MetaElem_UpdateDict( );
-
- if( PyType_Ready( &Metaball_Type ) < 0 )
- return NULL;
- if( PyType_Ready( &Metaelem_Type ) < 0 )
- return NULL;
- if( PyType_Ready( &MetaElemSeq_Type ) < 0 )
- return NULL;
-
- submodule = Py_InitModule3( "Blender.Metaball", M_Metaball_methods, M_Metaball_doc);
-
- if( Types )
- PyModule_AddObject( submodule, "Types", Types );
- PyModule_AddObject( submodule, "Update", Update );
-
- /*Add SUBMODULES to the module*/
- /*PyDict_SetItemString(dict, "Constraint", Constraint_Init()); */ /*creates a *new* module*/
- return submodule;
-}
-
-MetaBall *Metaball_FromPyObject( PyObject * pyobj )
-{
- return ( ( BPy_Metaball * ) pyobj )->metaball;
-}
-
-static PyObject *Metaball_getMaterials( BPy_Metaball *self )
-{
- return EXPP_PyList_fromMaterialList( self->metaball->mat,
- self->metaball->totcol, 1 );
-}
-static int Metaball_setMaterials( BPy_Metaball *self, PyObject * value )
-{
- Material **matlist;
- int len;
-
- if( !PySequence_Check( value ) ||
- !EXPP_check_sequence_consistency( value, &Material_Type ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaball.materials - list should only contain materials or None)" );
-
- len = PyList_Size( value );
- if( len > 16 )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaball.materials - list can't have more than 16 materials" );
-
- /* free old material list (if it exists) and adjust user counts */
- if( self->metaball->mat ) {
- MetaBall *mb = self->metaball;
- int i;
- for( i = mb->totcol; i-- > 0; )
- if( mb->mat[i] )
- mb->mat[i]->id.us--;
- MEM_freeN( mb->mat );
- }
-
- /* build the new material list, increment user count, store it */
-
- matlist = EXPP_newMaterialList_fromPyList( value );
- EXPP_incr_mats_us( matlist, len );
- self->metaball->mat = matlist;
- self->metaball->totcol = (short)len;
-
-/**@ This is another ugly fix due to the weird material handling of blender.
- * it makes sure that object material lists get updated (by their length)
- * according to their data material lists, otherwise blender crashes.
- * It just stupidly runs through all objects...BAD BAD BAD.
- */
-
- test_object_materials( ( ID * ) self->metaball );
-
- return 0;
-}
-
-static PyObject *Metaball_getWiresize( BPy_Metaball * self )
-{
- return PyFloat_FromDouble( self->metaball->wiresize );
-}
-
-static int Metaball_setWiresize( BPy_Metaball * self, PyObject * value )
-{
- float param;
- if( !PyNumber_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaball.wiresize - expected float argument" );
-
- param = (float)PyFloat_AsDouble( value );
-
- self->metaball->wiresize = EXPP_ClampFloat(param, 0.05f, 1.0);
- return 0;
-
-}
-static PyObject *Metaball_getRendersize( BPy_Metaball * self )
-{
- return PyFloat_FromDouble( self->metaball->rendersize );
-}
-
-static int Metaball_setRendersize( BPy_Metaball * self, PyObject * value )
-{
-
- float param;
- if( !PyNumber_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaball.rendersize - expected float argument" );
-
- param = (float)PyFloat_AsDouble( value );
-
- self->metaball->rendersize = EXPP_ClampFloat(param, 0.05f, 1.0);
- return 0;
-}
-
-static PyObject *Metaball_getThresh( BPy_Metaball * self )
-{
- return PyFloat_FromDouble( self->metaball->thresh );
-}
-
-static int Metaball_setThresh( BPy_Metaball * self, PyObject * value )
-{
-
- float param;
- if( !PyNumber_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaball.thresh - expected float argument" );
-
- param = (float)PyFloat_AsDouble( value );
-
- self->metaball->thresh = EXPP_ClampFloat(param, 0.0, 5.0);
- return 0;
-}
-
-static PyObject *Metaball_getUpdate( BPy_Metaball * self )
-{
- return PyInt_FromLong( (long)self->metaball->flag );
-}
-
-static int Metaball_setUpdate( BPy_Metaball * self, PyObject * value )
-{
-
- int param;
- if( !PyInt_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaball.update - expected an int argument" );
-
- param = (int)PyInt_AS_LONG( value );
-
- self->metaball->flag = EXPP_ClampInt( param, 0, 3 );
- return 0;
-}
-
-static PyObject *Metaball_copy( BPy_Metaball * self )
-{
- BPy_Metaball *pymball; /* for Data object wrapper in Python */
- MetaBall *blmball; /* for actual Data we create in Blender */
-
- blmball = copy_mball( self->metaball ); /* first create the MetaBall Data in Blender */
-
- if( blmball ) {
- /* return user count to zero since add_mball() incref'ed it */
- blmball->id.us = 0;
- /* now create the wrapper obj in Python */
- pymball =
- ( BPy_Metaball * ) PyObject_NEW( BPy_Metaball,
- &Metaball_Type );
- } else
- return ( EXPP_ReturnPyObjError( PyExc_RuntimeError,
- "metaball.__copy__() - couldn't create data in Blender" ) );
-
- if( pymball == NULL )
- return ( EXPP_ReturnPyObjError( PyExc_MemoryError,
- "metaball.__copy__() - couldn't create data in Blender" ) );
-
- pymball->metaball = blmball;
-
- return ( PyObject * ) pymball;
-}
-
-
-/* These are needed by Object.c */
-PyObject *Metaball_CreatePyObject( MetaBall * mball)
-{
- BPy_Metaball *py_mball= PyObject_NEW( BPy_Metaball, &Metaball_Type );
-
- if( !py_mball )
- return EXPP_ReturnPyObjError( PyExc_MemoryError,
- "couldn't create BPy_Metaball object" );
-
- py_mball->metaball= mball;
-
- return ( PyObject * ) py_mball;
-}
-
-
-static PyObject *MetaElemSeq_CreatePyObject(BPy_Metaball *self, MetaElem *iter)
-{
- BPy_MetaElemSeq *seq = PyObject_NEW( BPy_MetaElemSeq, &MetaElemSeq_Type);
- seq->bpymetaball = self; Py_INCREF(self);
- seq->iter= iter;
- return (PyObject *)seq;
-}
-
-/*
- * Element, get an instance of the iterator.
- */
-static PyObject *Metaball_getElements( BPy_Metaball * self )
-{
- return MetaElemSeq_CreatePyObject(self, NULL);
-}
-
-/*
- * Metaelem dealloc - free from memory
- */
-/* This is a callback function for the BPy_Metaelem type. It is */
-static void Metaelem_dealloc( BPy_Metaelem * self )
-{
- self->metaelem= NULL; /* so any references to the same bpyobject will raise an error */
- PyObject_DEL( self );
-}
-
-/*
- * elem.type - int to set the shape of the element
- */
-static PyObject *Metaelem_getType( BPy_Metaelem *self )
-{
- METAELEM_DEL_CHECK_PY(self);
-
- return PyInt_FromLong( self->metaelem->type );
-}
-static int Metaelem_setType( BPy_Metaelem * self, PyObject * value )
-{
- int type;
- if( !PyInt_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaelem.type - expected an integer (bitmask) as argument" );
-
- METAELEM_DEL_CHECK_INT(self);
-
- type = PyInt_AS_LONG( value );
-
- if( (type < 0) || ( type > ( MB_BALL | MB_TUBEX | MB_TUBEY | MB_TUBEZ | MB_TUBE | MB_PLANE | MB_ELIPSOID | MB_CUBE ) ))
- return EXPP_ReturnIntError( PyExc_ValueError,
- "metaelem.type - value out of range" );
-
- self->metaelem->type= type;
- return 0;
-}
-
-/*
- * elem.co - non wrapped vector representing location
- */
-static PyObject *Metaelem_getCoord( BPy_Metaelem * self )
-{
- float co[3];
-
- METAELEM_DEL_CHECK_PY(self);
-
- co[0]= self->metaelem->x;
- co[1]= self->metaelem->y;
- co[2]= self->metaelem->z;
-
- return newVectorObject( co, 3, Py_NEW );
-}
-static int Metaelem_setCoord( BPy_Metaelem * self, VectorObject * value )
-{
-
- if( !VectorObject_Check( value ) || value->size != 3 )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaelem.co - expected vector argument of size 3" );
-
- METAELEM_DEL_CHECK_INT(self);
-
- self->metaelem->x= value->vec[0];
- self->metaelem->y= value->vec[1];
- self->metaelem->z= value->vec[2];
- return 0;
-}
-
-/*
- * elem.dims - non wrapped vector representing the xyz dimensions
- * only effects some element types
- */
-static PyObject *Metaelem_getDims( BPy_Metaelem * self )
-{
- float co[3];
- METAELEM_DEL_CHECK_PY(self);
-
- co[0]= self->metaelem->expx;
- co[1]= self->metaelem->expy;
- co[2]= self->metaelem->expz;
- return newVectorObject( co, 3, Py_NEW );
-}
-static int Metaelem_setDims( BPy_Metaelem * self, VectorObject * value )
-{
- if( !VectorObject_Check( value ) || value->size != 3 )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaelem.dims - expected vector argument of size 3" );
-
- METAELEM_DEL_CHECK_INT(self);
-
- self->metaelem->expx= EXPP_ClampFloat(value->vec[0], 0.0, 20.0);
- self->metaelem->expy= EXPP_ClampFloat(value->vec[1], 0.0, 20.0);
- self->metaelem->expz= EXPP_ClampFloat(value->vec[2], 0.0, 20.0);
- return 0;
-}
-
-/*
- * elem.quat - non wrapped quat representing the rotation
- * only effects some element types - a rotated ball has no effect for eg.
- */
-static PyObject *Metaelem_getQuat( BPy_Metaelem * self )
-{
- METAELEM_DEL_CHECK_PY(self);
- return newQuaternionObject(self->metaelem->quat, Py_NEW);
-}
-static int Metaelem_setQuat( BPy_Metaelem * self, QuaternionObject * value )
-{
- int i;
- if( !QuaternionObject_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaelem.quat - expected quat argument" );
-
- METAELEM_DEL_CHECK_INT(self);
-
- for (i = 0; i < 4; i++)
- self->metaelem->quat[i]= value->quat[i];
-
- /* need to normalize or metaball drawing can go into an infinate loop */
- NormalQuat(self->metaelem->quat);
-
- return 0;
-}
-
-/*
- * elem.hide and elem.sel - get/set true false
- */
-static PyObject *Metaelem_getMFlagBits( BPy_Metaelem * self, void * type )
-{
- METAELEM_DEL_CHECK_PY(self);
- return EXPP_getBitfield( &(self->metaelem->flag), (int)((long)type ), 'h' );
-}
-static int Metaelem_setMFlagBits( BPy_Metaelem * self, PyObject * value,
- void * type )
-{
- METAELEM_DEL_CHECK_INT(self);
- return EXPP_setBitfield( value, &(self->metaelem->flag),
- (int)((long)type), 'h' );
-}
-
-/*
- * elem.stiffness - floating point, the volume of this element.
- */
-static PyObject *Metaelem_getStiffness( BPy_Metaelem *self )
-{
- METAELEM_DEL_CHECK_PY(self);
- return PyFloat_FromDouble( self->metaelem->s );
-}
-static int Metaelem_setStiffness( BPy_Metaelem *self, PyObject *value)
-{
- if( !PyNumber_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaelem.stiffness - expected float argument" );
-
- self->metaelem->s = EXPP_ClampFloat((float)PyFloat_AsDouble( value ), 0.0, 10.0);
- return 0;
-}
-
-/*
- * elem.radius- floating point, the size if the element
- */
-static PyObject *Metaelem_getRadius( BPy_Metaelem *self )
-{
- METAELEM_DEL_CHECK_PY(self);
- return PyFloat_FromDouble( self->metaelem->rad );
-}
-static int Metaelem_setRadius( BPy_Metaelem *self, PyObject *value)
-{
- if( !PyNumber_Check( value ) )
- return EXPP_ReturnIntError( PyExc_TypeError,
- "metaelem.radius - expected float argument" );
-
- self->metaelem->rad = /* is 5000 too small? */
- EXPP_ClampFloat((float)PyFloat_AsDouble( value ), 0.0, 5000.0);
-
- return 0;
-}
-
-
-/*
- * callback functions for comparison.
- * It compares two Metaball_Type objects. Only the "==" and "!="
- * comparisons are meaninful. Returns 0 for equality and -1 if
- * they don't point to the same Blender struct.
- * In Python it becomes 1 if they are equal, 0 otherwise.
- */
-static int Metaball_compare( BPy_Metaball * a, BPy_Metaball * b )
-{
- MetaBall *pa = a->metaball, *pb = b->metaball;
- return ( pa == pb ) ? 0 : -1;
-}
-
-static int MetaElemSeq_compare( BPy_MetaElemSeq * a, BPy_MetaElemSeq * b )
-{
- MetaBall *pa = a->bpymetaball->metaball, *pb = b->bpymetaball->metaball;
- return ( pa == pb ) ? 0 : -1;
-}
-
-static int Metaelem_compare( BPy_Metaelem * a, BPy_Metaelem * b )
-{
- MetaElem *pa = a->metaelem, *pb = b->metaelem;
- return ( pa == pb ) ? 0 : -1;
-}
-
-/*
- * repr function
- * callback functions building meaninful string to representations
- */
-static PyObject *Metaball_repr( BPy_Metaball * self )
-{
- return PyString_FromFormat( "[Metaball \"%s\"]",
- self->metaball->id.name + 2 );
-}
-
-static PyObject *Metaelem_repr( BPy_Metaelem * self )
-{
- return PyString_FromString( "Metaelem" );
-}
-
-static PyObject *MetaElemSeq_repr( BPy_MetaElemSeq * self )
-{
- return PyString_FromFormat( "[Metaball Iterator \"%s\"]",
- self->bpymetaball->metaball->id.name + 2 );
-}
-
-
-
-/*
- * MeteElem Seq sequence
- */
-
-static PyObject *MetaElem_CreatePyObject( MetaElem *metaelem )
-{
- BPy_Metaelem *elem= PyObject_NEW( BPy_Metaelem, &Metaelem_Type);
- elem->metaelem = metaelem; Py_INCREF(elem);
- return (PyObject *)elem;
-}
-
-static int MetaElemSeq_len( BPy_MetaElemSeq * self )
-{
- return BLI_countlist( &( self->bpymetaball->metaball->elems ) );
-}
-
-
-static PySequenceMethods MetaElemSeq_as_sequence = {
- ( inquiry ) MetaElemSeq_len, /* sq_length */
- ( binaryfunc ) 0, /* sq_concat */
- ( intargfunc ) 0, /* sq_repeat */
- ( intargfunc ) 0, /* sq_item */
- ( intintargfunc ) 0, /* sq_slice */
- ( intobjargproc ) 0, /* sq_ass_item */
- ( intintobjargproc ) 0, /* sq_ass_slice */
- 0,0,0,
-};
-
-/************************************************************************
- *
- * Python MetaElemSeq_Type iterator (iterates over Metaballs)
- *
- ************************************************************************/
-
-/*
- * Initialize the interator
- */
-
-static PyObject *MetaElemSeq_getIter( BPy_MetaElemSeq * self )
-{
- if (!self->iter) { /* not alredy looping on this data, */
- self->iter = self->bpymetaball->metaball->elems.first;
- return EXPP_incr_ret ( (PyObject *) self );
- } else
- return MetaElemSeq_CreatePyObject(self->bpymetaball, self->bpymetaball->metaball->elems.first);
-}
-
-/*
- * Return next MetaElem.
- */
-
-static PyObject *MetaElemSeq_nextIter( BPy_MetaElemSeq * self )
-{
- PyObject *object;
- if( !(self->iter) || !(self->bpymetaball->metaball) ) {
- self->iter= NULL;
- return EXPP_ReturnPyObjError( PyExc_StopIteration,
- "iterator at end" );
- }
-
- object= MetaElem_CreatePyObject( self->iter );
- self->iter= self->iter->next;
- return object;
-}
-
-/*
- * Adds and returns a new metaelement,
- * no args are taken so the returned metaball must be modified after adding.
- * Accessed as mball.elements.add() where mball is a python metaball data type.
- */
-static PyObject *MetaElemSeq_add( BPy_MetaElemSeq * self )
-{
- MetaElem *ml;
-
- ml = MEM_callocN( sizeof( MetaElem ), "metaelem" );
- BLI_addhead( &( self->bpymetaball->metaball->elems ), ml );
- ml->x = 0;
- ml->y = 0;
- ml->z = 0;
- ml->quat[0]= 1.0;
- ml->quat[1]= 0.0;
- ml->quat[2]= 0.0;
- ml->quat[3]= 0.0;
- ml->rad = 2;
- ml->s = 2.0;
- ml->flag = SELECT;
- ml->type = 0;
- ml->expx = 1;
- ml->expy = 1;
- ml->expz = 1;
- ml->type = MB_BALL;
-
- return MetaElem_CreatePyObject(ml);
-}
-
-
-/*
- * removes a metaelement if it is a part of the metaball,
- * no args are taken so the returned metaball must be modified after adding.
- * Accessed as mball.elements.add() where mball is a python metaball data type.
- */
-static PyObject *MetaElemSeq_remove( BPy_MetaElemSeq * self, BPy_Metaelem *elem )
-{
- MetaElem *ml_iter, *ml_py;
-
- if( !BPy_Metaelem_Check(elem) )
- return EXPP_ReturnPyObjError( PyExc_TypeError,
- "elements.remove(metaelem) - expected a Metaball element" );
-
- METAELEM_DEL_CHECK_PY(elem);
-
- ml_py= elem->metaelem;
-
- for (ml_iter= self->bpymetaball->metaball->elems.first; ml_iter; ml_iter= ml_iter->next) {
- if (ml_py == ml_iter) {
- elem->metaelem= NULL;
- BLI_freelinkN( &(self->bpymetaball->metaball->elems), ml_py);
- Py_RETURN_NONE;
- }
- }
-
- return EXPP_ReturnPyObjError( PyExc_ValueError,
- "elements.remove(elem): elem not in meta elements" );
-
-}
-
-static struct PyMethodDef BPy_MetaElemSeq_methods[] = {
- {"add", (PyCFunction)MetaElemSeq_add, METH_NOARGS,
- "add metaelem to metaball data"},
- {"remove", (PyCFunction)MetaElemSeq_remove, METH_O,
- "remove element from metaball data"},
- {NULL, NULL, 0, NULL}
-};
-
-/************************************************************************
- *
- * Python MetaElemSeq_Type standard operations
- *
- ************************************************************************/
-
-static void MetaElemSeq_dealloc( BPy_MetaElemSeq * self )
-{
- Py_DECREF(self->bpymetaball);
- PyObject_DEL( self );
-}
-
-/*****************************************************************************/
-/* Python MetaElemSeq_Type structure definition: */
-/*****************************************************************************/
-PyTypeObject MetaElemSeq_Type = {
- PyObject_HEAD_INIT( NULL ) /* required py macro */
- 0, /* ob_size */
- /* For printing, in format "<module>.<name>" */
- "Blender MetaElemSeq", /* char *tp_name; */
- sizeof( BPy_MetaElemSeq ), /* int tp_basicsize; */
- 0, /* tp_itemsize; For allocation */
-
- /* Methods to implement standard operations */
-
- ( destructor ) MetaElemSeq_dealloc,/* destructor tp_dealloc; */
- NULL, /* printfunc tp_print; */
- NULL, /* getattrfunc tp_getattr; */
- NULL, /* setattrfunc tp_setattr; */
- ( cmpfunc ) MetaElemSeq_compare, /* cmpfunc tp_compare; */
- ( reprfunc ) MetaElemSeq_repr, /* reprfunc tp_repr; */
-
- /* Method suites for standard classes */
-
- NULL, /* PyNumberMethods *tp_as_number; */
- &MetaElemSeq_as_sequence, /* 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, /* 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 */
- ( getiterfunc) MetaElemSeq_getIter, /* getiterfunc tp_iter; */
- ( iternextfunc ) MetaElemSeq_nextIter, /* iternextfunc tp_iternext; */
-
- /*** Attribute descriptor and subclassing stuff ***/
- BPy_MetaElemSeq_methods, /* struct PyMethodDef *tp_methods; */
- NULL, /* struct PyMemberDef *tp_members; */
- NULL, /* struct PyGetSetDef *tp_getset; */
- NULL, /* struct _typeobject *tp_base; */
- NULL, /* PyObject *tp_dict; */
- NULL, /* descrgetfunc tp_descr_get; */
- NULL, /* descrsetfunc tp_descr_set; */
- 0, /* long tp_dictoffset; */
- NULL, /* 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
-};
-