133
149
#define EXPP_TEX_MAPTO_HARD MAP_HAR
134
150
#define EXPP_TEX_MAPTO_ALPHA MAP_ALPHA
135
151
#define EXPP_TEX_MAPTO_EMIT MAP_EMIT
152
#define EXPP_TEX_MAPTO_RAYMIR MAP_RAYMIRR
153
#define EXPP_TEX_MAPTO_DISP MAP_DISPLACE
154
#define EXPP_TEX_MAPTO_TRANSLU MAP_TRANSLU
155
#define EXPP_TEX_MAPTO_AMB MAP_AMB
157
#define EXPP_TEX_STYPE_DN_BLENDER TEX_BLENDER
158
#define EXPP_TEX_STYPE_DN_PERLIN TEX_STDPERLIN
159
#define EXPP_TEX_STYPE_DN_IMPROVEPERLIN TEX_NEWPERLIN
160
#define EXPP_TEX_STYPE_DN_VORONOIF1 TEX_VORONOI_F1
161
#define EXPP_TEX_STYPE_DN_VORONOIF2 TEX_VORONOI_F2
162
#define EXPP_TEX_STYPE_DN_VORONOIF3 TEX_VORONOI_F3
163
#define EXPP_TEX_STYPE_DN_VORONOIF4 TEX_VORONOI_F4
164
#define EXPP_TEX_STYPE_DN_VORONOIF2F1 TEX_VORONOI_F2F1
165
#define EXPP_TEX_STYPE_DN_VORONOICRACKLE TEX_VORONOI_CRACKLE
166
#define EXPP_TEX_STYPE_DN_CELLNOISE TEX_CELLNOISE
168
#define EXPP_TEX_STYPE_VN_TEX_DISTANCE TEX_DISTANCE
169
#define EXPP_TEX_STYPE_VN_TEX_DISTANCE_SQUARED TEX_DISTANCE_SQUARED
170
#define EXPP_TEX_STYPE_VN_TEX_MANHATTAN TEX_MANHATTAN
171
#define EXPP_TEX_STYPE_VN_TEX_CHEBYCHEV TEX_CHEBYCHEV
172
#define EXPP_TEX_STYPE_VN_TEX_MINKOVSKY_HALF TEX_MINKOVSKY_HALF
173
#define EXPP_TEX_STYPE_VN_TEX_MINKOVSKY_FOUR TEX_MINKOVSKY_FOUR
174
#define EXPP_TEX_STYPE_VN_TEX_MINKOVSKY TEX_MINKOVSKY
137
176
/****************************************************************************/
138
177
/* Texture String->Int maps */
139
178
/****************************************************************************/
141
180
static const EXPP_map_pair tex_type_map[] = {
142
{ "None", EXPP_TEX_TYPE_NONE },
143
{ "Clouds", EXPP_TEX_TYPE_CLOUDS },
144
{ "Wood", EXPP_TEX_TYPE_WOOD },
145
{ "Marble", EXPP_TEX_TYPE_MARBLE },
146
{ "Magic", EXPP_TEX_TYPE_MAGIC },
147
{ "Blend", EXPP_TEX_TYPE_BLEND },
148
{ "Stucci", EXPP_TEX_TYPE_STUCCI },
149
{ "Noise", EXPP_TEX_TYPE_NOISE },
150
{ "Image", EXPP_TEX_TYPE_IMAGE },
151
{ "Plugin", EXPP_TEX_TYPE_PLUGIN },
152
{ "EnvMap", EXPP_TEX_TYPE_ENVMAP },
181
{"None", EXPP_TEX_TYPE_NONE},
182
{"Clouds", EXPP_TEX_TYPE_CLOUDS},
183
{"Wood", EXPP_TEX_TYPE_WOOD},
184
{"Marble", EXPP_TEX_TYPE_MARBLE},
185
{"Magic", EXPP_TEX_TYPE_MAGIC},
186
{"Blend", EXPP_TEX_TYPE_BLEND},
187
{"Stucci", EXPP_TEX_TYPE_STUCCI},
188
{"Noise", EXPP_TEX_TYPE_NOISE},
189
{"Image", EXPP_TEX_TYPE_IMAGE},
190
{"Plugin", EXPP_TEX_TYPE_PLUGIN},
191
{"EnvMap", EXPP_TEX_TYPE_ENVMAP},
192
{"Musgrave", EXPP_TEX_TYPE_MUSGRAVE},
193
{"Voronoi", EXPP_TEX_TYPE_VORONOI},
194
{"DistortedNoise", EXPP_TEX_TYPE_DISTNOISE},
156
198
static const EXPP_map_pair tex_flag_map[] = {
157
/* we don't support this yet! */
158
/* { "ColorBand", EXPP_TEX_FLAG_COLORBAND }, */
159
{ "FlipBlend", EXPP_TEX_FLAG_FLIPBLEND },
160
{ "NegAlpha", EXPP_TEX_FLAG_NEGALPHA },
199
/* we don't support this yet! */
200
/* { "ColorBand", EXPP_TEX_FLAG_COLORBAND }, */
201
{"FlipBlend", EXPP_TEX_FLAG_FLIPBLEND},
202
{"NegAlpha", EXPP_TEX_FLAG_NEGALPHA},
164
206
static const EXPP_map_pair tex_imageflag_map[] = {
165
{ "InterPol", EXPP_TEX_IMAGEFLAG_INTERPOL },
166
{ "UseAlpha", EXPP_TEX_IMAGEFLAG_USEALPHA },
167
{ "MipMap", EXPP_TEX_IMAGEFLAG_MIPMAP },
168
{ "Fields", EXPP_TEX_IMAGEFLAG_FIELDS },
169
{ "Rot90", EXPP_TEX_IMAGEFLAG_ROT90 },
170
{ "CalcAlpha", EXPP_TEX_IMAGEFLAG_CALCALPHA },
171
{ "Cyclic", EXPP_TEX_IMAGEFLAG_CYCLIC },
172
{ "Movie", EXPP_TEX_IMAGEFLAG_MOVIE },
173
{ "StField", EXPP_TEX_IMAGEFLAG_STFIELD },
174
{ "Anti", EXPP_TEX_IMAGEFLAG_ANTI },
207
{"InterPol", EXPP_TEX_IMAGEFLAG_INTERPOL},
208
{"UseAlpha", EXPP_TEX_IMAGEFLAG_USEALPHA},
209
{"MipMap", EXPP_TEX_IMAGEFLAG_MIPMAP},
210
{"Fields", EXPP_TEX_IMAGEFLAG_FIELDS},
211
{"Rot90", EXPP_TEX_IMAGEFLAG_ROT90},
212
{"CalcAlpha", EXPP_TEX_IMAGEFLAG_CALCALPHA},
213
{"Cyclic", EXPP_TEX_IMAGEFLAG_CYCLIC},
214
{"Movie", EXPP_TEX_IMAGEFLAG_MOVIE},
215
{"StField", EXPP_TEX_IMAGEFLAG_STFIELD},
216
{"Anti", EXPP_TEX_IMAGEFLAG_ANTI},
217
{"NormalMap", EXPP_TEX_IMAGEFLAG_NORMALMAP},
178
221
static const EXPP_map_pair tex_extend_map[] = {
179
{ "Extend", EXPP_TEX_EXTEND_EXTEND },
180
{ "Clip", EXPP_TEX_EXTEND_CLIP },
181
{ "ClipCube", EXPP_TEX_EXTEND_CLIPCUBE },
182
{ "Repeat", EXPP_TEX_EXTEND_REPEAT },
222
{"Extend", EXPP_TEX_EXTEND_EXTEND},
223
{"Clip", EXPP_TEX_EXTEND_CLIP},
224
{"ClipCube", EXPP_TEX_EXTEND_CLIPCUBE},
225
{"Repeat", EXPP_TEX_EXTEND_REPEAT},
186
229
/* array of maps for stype */
187
static const EXPP_map_pair tex_stype_default_map[] = {
230
static const EXPP_map_pair tex_stype_default_map[] = {
191
234
static const EXPP_map_pair tex_stype_clouds_map[] = {
193
{ "CloudDefault", EXPP_TEX_STYPE_CLD_DEFAULT },
194
{ "CloudColor", EXPP_TEX_STYPE_CLD_COLOR },
236
{"CloudDefault", EXPP_TEX_STYPE_CLD_DEFAULT},
237
{"CloudColor", EXPP_TEX_STYPE_CLD_COLOR},
197
240
static const EXPP_map_pair tex_stype_wood_map[] = {
199
{ "WoodBands", EXPP_TEX_STYPE_WOD_BANDS },
200
{ "WoodRings", EXPP_TEX_STYPE_WOD_RINGS },
201
{ "WoodBandNoise", EXPP_TEX_STYPE_WOD_BANDNOISE },
202
{ "WoodRingNoise", EXPP_TEX_STYPE_WOD_RINGNOISE },
242
{"WoodBands", EXPP_TEX_STYPE_WOD_BANDS},
243
{"WoodRings", EXPP_TEX_STYPE_WOD_RINGS},
244
{"WoodBandNoise", EXPP_TEX_STYPE_WOD_BANDNOISE},
245
{"WoodRingNoise", EXPP_TEX_STYPE_WOD_RINGNOISE},
205
248
static const EXPP_map_pair tex_stype_marble_map[] = {
207
{ "MarbleSoft", EXPP_TEX_STYPE_MBL_SOFT },
208
{ "MarbleSharp", EXPP_TEX_STYPE_MBL_SHARP },
209
{ "MarbleSharper", EXPP_TEX_STYPE_MBL_SHARPER },
250
{"MarbleSoft", EXPP_TEX_STYPE_MBL_SOFT},
251
{"MarbleSharp", EXPP_TEX_STYPE_MBL_SHARP},
252
{"MarbleSharper", EXPP_TEX_STYPE_MBL_SHARPER},
212
255
static const EXPP_map_pair tex_stype_blend_map[] = {
214
{ "BlendLin", EXPP_TEX_STYPE_BLN_LIN },
215
{ "BlendQuad", EXPP_TEX_STYPE_BLN_QUAD },
216
{ "BlendEase", EXPP_TEX_STYPE_BLN_EASE },
217
{ "BlendDiag", EXPP_TEX_STYPE_BLN_DIAG },
218
{ "BlendSphere", EXPP_TEX_STYPE_BLN_SPHERE },
219
{ "BlendHalo", EXPP_TEX_STYPE_BLN_HALO },
257
{"BlendLin", EXPP_TEX_STYPE_BLN_LIN},
258
{"BlendQuad", EXPP_TEX_STYPE_BLN_QUAD},
259
{"BlendEase", EXPP_TEX_STYPE_BLN_EASE},
260
{"BlendDiag", EXPP_TEX_STYPE_BLN_DIAG},
261
{"BlendSphere", EXPP_TEX_STYPE_BLN_SPHERE},
262
{"BlendHalo", EXPP_TEX_STYPE_BLN_HALO},
222
265
static const EXPP_map_pair tex_stype_stucci_map[] = {
224
{ "StucciPlastic", EXPP_TEX_STYPE_STC_PLASTIC },
225
{ "StucciWallIn", EXPP_TEX_STYPE_STC_WALLIN },
226
{ "StucciWallOut", EXPP_TEX_STYPE_STC_WALLOUT },
267
{"StucciPlastic", EXPP_TEX_STYPE_STC_PLASTIC},
268
{"StucciWallIn", EXPP_TEX_STYPE_STC_WALLIN},
269
{"StucciWallOut", EXPP_TEX_STYPE_STC_WALLOUT},
229
272
static const EXPP_map_pair tex_stype_envmap_map[] = {
231
{ "EnvmapStatic", EXPP_TEX_STYPE_ENV_STATIC },
232
{ "EnvmapAnim", EXPP_TEX_STYPE_ENV_ANIM },
233
{ "EnvmapLoad", EXPP_TEX_STYPE_ENV_LOAD },
274
{"EnvmapStatic", EXPP_TEX_STYPE_ENV_STATIC},
275
{"EnvmapAnim", EXPP_TEX_STYPE_ENV_ANIM},
276
{"EnvmapLoad", EXPP_TEX_STYPE_ENV_LOAD},
280
static const EXPP_map_pair tex_stype_musg_map[] = {
282
{"MultiFractal", EXPP_TEX_STYPE_MUS_MFRACTAL},
283
{"HeteroTerrain", EXPP_TEX_STYPE_MUS_HTERRAIN},
284
{"RidgedMultiFractal", EXPP_TEX_STYPE_MUS_RIDGEDMF},
285
{"HybridMultiFractal", EXPP_TEX_STYPE_MUS_HYBRIDMF},
286
{"fBM", EXPP_TEX_STYPE_MUS_FBM},
290
static const EXPP_map_pair tex_stype_distortednoise_map[] = {
292
{"BlenderOriginal", EXPP_TEX_STYPE_DN_BLENDER},
293
{"OriginalPerlin", EXPP_TEX_STYPE_DN_PERLIN},
294
{"ImprovedPerlin", EXPP_TEX_STYPE_DN_IMPROVEPERLIN},
295
{"VoronoiF1", EXPP_TEX_STYPE_DN_VORONOIF1},
296
{"VoronoiF2", EXPP_TEX_STYPE_DN_VORONOIF2},
297
{"VoronoiF3", EXPP_TEX_STYPE_DN_VORONOIF3},
298
{"VoronoiF4", EXPP_TEX_STYPE_DN_VORONOIF4},
299
{"VoronoiF2-F1", EXPP_TEX_STYPE_DN_VORONOIF2F1},
300
{"VoronoiCrackle", EXPP_TEX_STYPE_DN_VORONOICRACKLE},
301
{"CellNoise", EXPP_TEX_STYPE_DN_CELLNOISE},
305
static const EXPP_map_pair tex_stype_voronoi_map[] = {
307
{"Int", EXPP_TEX_STYPE_VN_INT},
308
{"Col1", EXPP_TEX_STYPE_VN_COL1},
309
{"Col2", EXPP_TEX_STYPE_VN_COL2},
310
{"Col3", EXPP_TEX_STYPE_VN_COL3},
314
static const EXPP_map_pair tex_distance_voronoi_map[] = {
316
{"Distance", EXPP_TEX_STYPE_VN_TEX_DISTANCE},
317
{"DistanceSquared", EXPP_TEX_STYPE_VN_TEX_DISTANCE_SQUARED},
318
{"Manhattan", EXPP_TEX_STYPE_VN_TEX_MANHATTAN},
319
{"Chebychev", EXPP_TEX_STYPE_VN_TEX_CHEBYCHEV},
320
{"MinkovskyHalf", EXPP_TEX_STYPE_VN_TEX_MINKOVSKY_HALF},
321
{"MinkovskyFour", EXPP_TEX_STYPE_VN_TEX_MINKOVSKY_FOUR},
322
{"Minkovsky", EXPP_TEX_STYPE_VN_TEX_MINKOVSKY},
237
326
static const EXPP_map_pair *tex_stype_map[] = {
238
tex_stype_default_map, /* none */
239
tex_stype_clouds_map,
241
tex_stype_marble_map,
242
tex_stype_default_map, /* magic */
244
tex_stype_stucci_map,
245
tex_stype_default_map, /* noise */
246
tex_stype_default_map, /* image */
247
tex_stype_default_map, /* plugin */
327
tex_stype_default_map, /* none */
328
tex_stype_clouds_map,
330
tex_stype_marble_map,
331
tex_stype_default_map, /* magic */
333
tex_stype_stucci_map,
334
tex_stype_default_map, /* noise */
335
tex_stype_default_map, /* image */
336
tex_stype_default_map, /* plugin */
337
tex_stype_envmap_map,
338
tex_stype_musg_map, /* musgrave */
339
tex_stype_voronoi_map, /* voronoi */
340
tex_stype_distortednoise_map, /* distorted noise */
341
tex_distance_voronoi_map
252
345
/*****************************************************************************/
253
346
/* Python API function prototypes for the Texture module. */
254
347
/*****************************************************************************/
255
static PyObject *M_Texture_New (PyObject *self, PyObject *args,
257
static PyObject *M_Texture_Get (PyObject *self, PyObject *args);
348
static PyObject *M_Texture_New( PyObject * self, PyObject * args,
349
PyObject * keywords );
350
static PyObject *M_Texture_Get( PyObject * self, PyObject * args );
259
352
/*****************************************************************************/
260
353
/* The following string definitions are used for documentation strings. */
261
354
/* In Python these will be written to the console when doing a */
262
355
/* Blender.Texture.__doc__ */
263
356
/*****************************************************************************/
264
static char M_Texture_doc[] =
265
"The Blender Texture module\n\
357
static char M_Texture_doc[] = "The Blender Texture module\n\
267
359
This module provides access to **Texture** objects in Blender\n";
269
static char M_Texture_New_doc[] =
270
"Texture.New (name = 'Tex'):\n\
361
static char M_Texture_New_doc[] = "Texture.New (name = 'Tex'):\n\
271
362
Return a new Texture object with the given type and name.";
273
static char M_Texture_Get_doc[] =
274
"Texture.Get (name = None):\n\
364
static char M_Texture_Get_doc[] = "Texture.Get (name = None):\n\
275
365
Return the texture with the given 'name', None if not found, or\n\
276
366
Return a list with all texture objects in the current scene,\n\
277
367
if no argument was given.";
280
370
/* Python method structure definition for Blender.Texture module: */
281
371
/*****************************************************************************/
282
372
struct PyMethodDef M_Texture_methods[] = {
283
{"New", (PyCFunction) M_Texture_New, METH_VARARGS|METH_KEYWORDS,
285
{"Get", M_Texture_Get, METH_VARARGS, M_Texture_Get_doc},
286
{NULL, NULL, 0, NULL}
373
{"New", ( PyCFunction ) M_Texture_New, METH_VARARGS | METH_KEYWORDS,
375
{"Get", M_Texture_Get, METH_VARARGS, M_Texture_Get_doc},
376
{NULL, NULL, 0, NULL}
289
379
/*****************************************************************************/
290
/* Python BPy_Texture methods declarations: */
380
/* Python BPy_Texture methods declarations: */
291
381
/*****************************************************************************/
292
382
#define GETFUNC(name) static PyObject *Texture_##name(BPy_Texture *self)
293
383
#define SETFUNC(name) static PyObject *Texture_##name(BPy_Texture *self, \
301
SETFUNC (setAnimFrames);
302
SETFUNC (setAnimLength);
303
SETFUNC (setAnimMontage);
304
SETFUNC (setAnimOffset);
305
SETFUNC (setAnimStart);
306
SETFUNC (setBrightness);
307
SETFUNC (setContrast);
310
SETFUNC (setIntExtend); /* special case used for ".extend = ..." */
311
SETFUNC (setFieldsPerImage);
312
SETFUNC (setFilterSize);
314
SETFUNC (setIntFlags); /* special case used for ".flags = ..." */
316
SETFUNC (setImageFlags);
317
SETFUNC (setIntImageFlags); /* special case used for ".imageFlags = ..." */
319
SETFUNC (setNoiseDepth);
320
SETFUNC (setNoiseSize);
321
SETFUNC (setNoiseType);
325
SETFUNC (setIntSType); /* special case used for ".stype = ..." */
327
SETFUNC (setIntType); /* special case used for ".type = ..." */
328
SETFUNC (setTurbulence);
386
GETFUNC( getExtend );
394
SETFUNC( setAnimFrames );
395
SETFUNC( setAnimLength );
396
SETFUNC( setAnimMontage );
397
SETFUNC( setAnimOffset );
398
SETFUNC( setAnimStart );
399
SETFUNC( setBrightness );
400
SETFUNC( setContrast );
402
SETFUNC( setExtend );
403
SETFUNC( setIntExtend ); /* special case used for ".extend = ..." */
404
SETFUNC( setFieldsPerImage );
405
SETFUNC( setFilterSize );
407
SETFUNC( setIntFlags ); /* special case used for ".flags = ..." */
409
SETFUNC( setImageFlags );
410
SETFUNC( setIntImageFlags ); /* special case used for ".imageFlags = ..." */
412
SETFUNC( setNoiseDepth );
413
SETFUNC( setNoiseSize );
414
SETFUNC( setNoiseType );
415
SETFUNC( setNoiseBasis ); /* special case used for ".noisebasis or noisebasis2 = ... */
416
SETFUNC( setDistNoise ); /* special case used for ".noisebasis = ... */
417
SETFUNC( setRepeat );
418
SETFUNC( setRGBCol );
420
SETFUNC( setIntSType ); /* special case used for ".stype = ..." */
422
SETFUNC( setIntType ); /* special case used for ".type = ..." */
423
SETFUNC( setTurbulence );
424
SETFUNC( setDistMetric );
425
SETFUNC( setDistAmnt );
330
427
/*****************************************************************************/
331
/* Python BPy_Texture methods table: */
428
/* Python BPy_Texture methods table: */
332
429
/*****************************************************************************/
333
430
static PyMethodDef BPy_Texture_methods[] = {
334
/* name, method, flags, doc */
335
{"getExtend", (PyCFunction)Texture_getExtend, METH_NOARGS,
336
"() - Return Texture extend mode"},
337
{"getImage", (PyCFunction)Texture_getImage, METH_NOARGS,
338
"() - Return Texture Image"},
339
{"getName", (PyCFunction)Texture_getName, METH_NOARGS,
340
"() - Return Texture name"},
341
{"getSType", (PyCFunction)Texture_getSType, METH_NOARGS,
342
"() - Return Texture stype as string"},
343
{"getType", (PyCFunction)Texture_getType, METH_NOARGS,
344
"() - Return Texture type as string"},
345
{"setExtend", (PyCFunction)Texture_setExtend, METH_VARARGS,
346
"(s) - Set Texture extend mode"},
347
{"setFlags", (PyCFunction)Texture_setFlags, METH_VARARGS,
348
"(f1,f2,f3) - Set Texture flags"},
349
{"setImage", (PyCFunction)Texture_setImage, METH_VARARGS,
350
"(Blender Image) - Set Texture Image"},
351
{"setImageFlags", (PyCFunction)Texture_setImageFlags, METH_VARARGS,
352
"(s,s,s,s,...) - Set Texture image flags"},
353
{"setName", (PyCFunction)Texture_setName, METH_VARARGS,
354
"(s) - Set Texture name"},
355
{"setSType", (PyCFunction)Texture_setSType, METH_VARARGS,
356
"(s) - Set Texture stype"},
357
{"setType", (PyCFunction)Texture_setType, METH_VARARGS,
358
"(s) - Set Texture type"},
431
/* name, method, flags, doc */
432
{"getExtend", ( PyCFunction ) Texture_getExtend, METH_NOARGS,
433
"() - Return Texture extend mode"},
434
{"getImage", ( PyCFunction ) Texture_getImage, METH_NOARGS,
435
"() - Return Texture Image"},
436
{"getName", ( PyCFunction ) Texture_getName, METH_NOARGS,
437
"() - Return Texture name"},
438
{"getSType", ( PyCFunction ) Texture_getSType, METH_NOARGS,
439
"() - Return Texture stype as string"},
440
{"getType", ( PyCFunction ) Texture_getType, METH_NOARGS,
441
"() - Return Texture type as string"},
442
{"getIpo", ( PyCFunction ) Texture_getIpo, METH_NOARGS,
443
"() - Return Texture Ipo"},
444
{"setIpo", ( PyCFunction ) Texture_setIpo, METH_VARARGS,
445
"(Blender Ipo) - Set Texture Ipo"},
446
{"clearIpo", ( PyCFunction ) Texture_clearIpo, METH_NOARGS,
447
"() - Unlink Ipo from this Texture."},
448
{"setExtend", ( PyCFunction ) Texture_setExtend, METH_VARARGS,
449
"(s) - Set Texture extend mode"},
450
{"setFlags", ( PyCFunction ) Texture_setFlags, METH_VARARGS,
451
"(f1,f2,f3) - Set Texture flags"},
452
{"setImage", ( PyCFunction ) Texture_setImage, METH_VARARGS,
453
"(Blender Image) - Set Texture Image"},
454
{"setImageFlags", ( PyCFunction ) Texture_setImageFlags, METH_VARARGS,
455
"(s,s,s,s,...) - Set Texture image flags"},
456
{"setName", ( PyCFunction ) Texture_setName, METH_VARARGS,
457
"(s) - Set Texture name"},
458
{"setSType", ( PyCFunction ) Texture_setSType, METH_VARARGS,
459
"(s) - Set Texture stype"},
460
{"setType", ( PyCFunction ) Texture_setType, METH_VARARGS,
461
"(s) - Set Texture type"},
462
{"setNoiseBasis", ( PyCFunction ) Texture_setNoiseBasis, METH_VARARGS,
463
"(s) - Set Noise basis"},
464
{"setDistNoise", ( PyCFunction ) Texture_setDistNoise, METH_VARARGS,
465
"(s) - Set Dist Noise"},
466
{"setDistMetric", ( PyCFunction ) Texture_setDistMetric, METH_VARARGS,
467
"(s) - Set Dist Metric"},
468
{NULL, NULL, 0, NULL}
362
471
/*****************************************************************************/
363
/* Python Texture_Type callback function prototypes: */
472
/* Python Texture_Type callback function prototypes: */
364
473
/*****************************************************************************/
365
static void Texture_dealloc (BPy_Texture *self);
366
static int Texture_setAttr (BPy_Texture *self, char *name, PyObject *v);
367
static int Texture_compare (BPy_Texture *a, BPy_Texture *b);
368
static PyObject *Texture_getAttr (BPy_Texture *self, char *name);
369
static PyObject *Texture_repr (BPy_Texture *self);
474
static void Texture_dealloc( BPy_Texture * self );
475
static int Texture_setAttr( BPy_Texture * self, char *name, PyObject * v );
476
static int Texture_compare( BPy_Texture * a, BPy_Texture * b );
477
static PyObject *Texture_getAttr( BPy_Texture * self, char *name );
478
static PyObject *Texture_repr( BPy_Texture * self );
372
481
/*****************************************************************************/
373
482
/* Python Texture_Type structure definition: */
374
483
/*****************************************************************************/
375
PyTypeObject Texture_Type =
377
PyObject_HEAD_INIT(NULL)
379
"Blender Texture", /* tp_name */
380
sizeof (BPy_Texture), /* tp_basicsize */
383
(destructor)Texture_dealloc, /* tp_dealloc */
385
(getattrfunc)Texture_getAttr, /* tp_getattr */
386
(setattrfunc)Texture_setAttr, /* tp_setattr */
387
(cmpfunc)Texture_compare, /* tp_compare */
388
(reprfunc)Texture_repr, /* tp_repr */
389
0, /* tp_as_number */
390
0, /* tp_as_sequence */
391
0, /* tp_as_mapping */
396
BPy_Texture_methods, /* tp_methods */
484
PyTypeObject Texture_Type = {
485
PyObject_HEAD_INIT( NULL ) 0, /* ob_size */
486
"Blender Texture", /* tp_name */
487
sizeof( BPy_Texture ), /* tp_basicsize */
490
( destructor ) Texture_dealloc, /* tp_dealloc */
492
( getattrfunc ) Texture_getAttr, /* tp_getattr */
493
( setattrfunc ) Texture_setAttr, /* tp_setattr */
494
( cmpfunc ) Texture_compare, /* tp_compare */
495
( reprfunc ) Texture_repr, /* tp_repr */
496
0, /* tp_as_number */
497
0, /* tp_as_sequence */
498
0, /* tp_as_mapping */
503
BPy_Texture_methods, /* tp_methods */
505
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
400
static PyObject *M_Texture_New(PyObject *self, PyObject *args, PyObject *kwords)
508
static PyObject *M_Texture_New( PyObject * self, PyObject * args,
402
char *name_str = "Tex";
403
static char *kwlist[] = {"name_str", NULL};
404
PyObject *pytex; /* for Texture object wrapper in Python */
405
Tex *bltex; /* for actual Tex we create in Blender */
407
/* Parse the arguments passed in by the Python interpreter */
408
if (!PyArg_ParseTupleAndKeywords(args, kwords, "|s", kwlist, &name_str))
409
return EXPP_ReturnPyObjError(PyExc_AttributeError,
410
"expected zero, one or two strings as arguments");
412
bltex = add_texture(name_str); /* first create the texture in Blender */
414
if (bltex) /* now create the wrapper obj in Python */
415
pytex = Texture_CreatePyObject(bltex);
417
return EXPP_ReturnPyObjError(PyExc_RuntimeError,
418
"couldn't create Texture in Blender");
420
/* let's return user count to zero, because add_texture() incref'd it */
424
return EXPP_ReturnPyObjError (PyExc_MemoryError,
425
"couldn't create Tex PyObject");
511
char *name_str = "Tex";
512
static char *kwlist[] = { "name_str", NULL };
513
PyObject *pytex; /* for Texture object wrapper in Python */
514
Tex *bltex; /* for actual Tex we create in Blender */
516
/* Parse the arguments passed in by the Python interpreter */
517
if( !PyArg_ParseTupleAndKeywords
518
( args, kwords, "|s", kwlist, &name_str ) )
519
return EXPP_ReturnPyObjError( PyExc_AttributeError,
520
"expected zero, one or two strings as arguments" );
522
bltex = add_texture( name_str ); /* first create the texture in Blender */
524
if( bltex ) /* now create the wrapper obj in Python */
525
pytex = Texture_CreatePyObject( bltex );
527
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
528
"couldn't create Texture in Blender" );
530
/* let's return user count to zero, because add_texture() incref'd it */
534
return EXPP_ReturnPyObjError( PyExc_MemoryError,
535
"couldn't create Tex PyObject" );
430
static PyObject *M_Texture_Get(PyObject *self, PyObject *args)
540
static PyObject *M_Texture_Get( PyObject * self, PyObject * args )
435
if (!PyArg_ParseTuple(args, "|s", &name))
436
return EXPP_ReturnPyObjError (PyExc_TypeError,
437
"expected string argument (or nothing)");
439
tex_iter = G.main->tex.first;
441
if (name) { /* (name) - Search for texture by name */
443
PyObject *wanted_tex = NULL;
446
if (STREQ(name, tex_iter->id.name+2)) {
447
wanted_tex = Texture_CreatePyObject (tex_iter);
451
tex_iter = tex_iter->id.next;
454
if (!wanted_tex) { /* Requested texture doesn't exist */
456
PyOS_snprintf(error_msg, sizeof(error_msg),
457
"Texture \"%s\" not found", name);
458
return EXPP_ReturnPyObjError (PyExc_NameError, error_msg);
464
else { /* () - return a list of wrappers for all textures in the scene */
466
PyObject *tex_pylist, *pyobj;
468
tex_pylist = PyList_New (BLI_countlist (&(G.main->tex)));
470
return PythonReturnErrorObject(PyExc_MemoryError,
471
"couldn't create PyList");
474
pyobj = Texture_CreatePyObject(tex_iter);
476
return PythonReturnErrorObject(PyExc_MemoryError,
477
"couldn't create Texture PyObject");
479
PyList_SET_ITEM(tex_pylist, index, pyobj);
481
tex_iter = tex_iter->id.next;
545
if( !PyArg_ParseTuple( args, "|s", &name ) )
546
return EXPP_ReturnPyObjError( PyExc_TypeError,
547
"expected string argument (or nothing)" );
549
tex_iter = G.main->tex.first;
551
if( name ) { /* (name) - Search for texture by name */
553
PyObject *wanted_tex = NULL;
556
if( STREQ( name, tex_iter->id.name + 2 ) ) {
558
Texture_CreatePyObject( tex_iter );
562
tex_iter = tex_iter->id.next;
565
if( !wanted_tex ) { /* Requested texture doesn't exist */
567
PyOS_snprintf( error_msg, sizeof( error_msg ),
568
"Texture \"%s\" not found", name );
569
return EXPP_ReturnPyObjError( PyExc_NameError,
576
else { /* () - return a list of wrappers for all textures in the scene */
578
PyObject *tex_pylist, *pyobj;
580
tex_pylist = PyList_New( BLI_countlist( &( G.main->tex ) ) );
582
return EXPP_ReturnPyObjError( PyExc_MemoryError,
583
"couldn't create PyList" );
586
pyobj = Texture_CreatePyObject( tex_iter );
588
return EXPP_ReturnPyObjError
590
"couldn't create Texture PyObject" );
592
PyList_SET_ITEM( tex_pylist, index, pyobj );
594
tex_iter = tex_iter->id.next;
490
603
#undef EXPP_ADDCONST
491
604
#define EXPP_ADDCONST(name) \
492
605
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_TYPE_##name))
494
static PyObject *M_Texture_TypesDict (void)
607
static PyObject *M_Texture_TypesDict( void )
496
PyObject *Types = M_constant_New();
498
BPy_constant *d = (BPy_constant*) Types;
500
EXPP_ADDCONST (NONE);
501
EXPP_ADDCONST (CLOUDS);
502
EXPP_ADDCONST (WOOD);
503
EXPP_ADDCONST (MARBLE);
504
EXPP_ADDCONST (MAGIC);
505
EXPP_ADDCONST (BLEND);
506
EXPP_ADDCONST (STUCCI);
507
EXPP_ADDCONST (NOISE);
508
EXPP_ADDCONST (IMAGE);
509
EXPP_ADDCONST (PLUGIN);
510
EXPP_ADDCONST (ENVMAP);
609
PyObject *Types = M_constant_New( );
611
BPy_constant *d = ( BPy_constant * ) Types;
613
EXPP_ADDCONST( NONE );
614
EXPP_ADDCONST( CLOUDS );
615
EXPP_ADDCONST( WOOD );
616
EXPP_ADDCONST( MARBLE );
617
EXPP_ADDCONST( MAGIC );
618
EXPP_ADDCONST( BLEND );
619
EXPP_ADDCONST( STUCCI );
620
EXPP_ADDCONST( NOISE );
621
EXPP_ADDCONST( IMAGE );
622
EXPP_ADDCONST( PLUGIN );
623
EXPP_ADDCONST( ENVMAP );
624
EXPP_ADDCONST( MUSGRAVE );
625
EXPP_ADDCONST( VORONOI );
626
EXPP_ADDCONST( DISTNOISE );
515
631
#undef EXPP_ADDCONST
516
632
#define EXPP_ADDCONST(name) \
517
633
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_STYPE_##name))
519
static PyObject *M_Texture_STypesDict (void)
635
static PyObject *M_Texture_STypesDict( void )
521
PyObject *STypes = M_constant_New();
523
BPy_constant *d = (BPy_constant*) STypes;
637
PyObject *STypes = M_constant_New( );
639
BPy_constant *d = ( BPy_constant * ) STypes;
525
EXPP_ADDCONST(CLD_DEFAULT);
526
EXPP_ADDCONST(CLD_COLOR);
527
EXPP_ADDCONST(WOD_BANDS);
528
EXPP_ADDCONST(WOD_RINGS);
529
EXPP_ADDCONST(WOD_BANDNOISE);
530
EXPP_ADDCONST(WOD_RINGNOISE);
531
EXPP_ADDCONST(MAG_DEFAULT);
532
EXPP_ADDCONST(MBL_SOFT);
533
EXPP_ADDCONST(MBL_SHARP);
534
EXPP_ADDCONST(MBL_SHARPER);
535
EXPP_ADDCONST(BLN_LIN);
536
EXPP_ADDCONST(BLN_QUAD);
537
EXPP_ADDCONST(BLN_EASE);
538
EXPP_ADDCONST(BLN_DIAG);
539
EXPP_ADDCONST(BLN_SPHERE);
540
EXPP_ADDCONST(BLN_HALO);
541
EXPP_ADDCONST(STC_PLASTIC);
542
EXPP_ADDCONST(STC_WALLIN);
543
EXPP_ADDCONST(STC_WALLOUT);
544
EXPP_ADDCONST(NSE_DEFAULT);
545
EXPP_ADDCONST(IMG_DEFAULT);
546
EXPP_ADDCONST(PLG_DEFAULT);
547
EXPP_ADDCONST(ENV_STATIC);
548
EXPP_ADDCONST(ENV_ANIM);
549
EXPP_ADDCONST(ENV_LOAD);
641
EXPP_ADDCONST( CLD_DEFAULT );
642
EXPP_ADDCONST( CLD_COLOR );
643
EXPP_ADDCONST( WOD_BANDS );
644
EXPP_ADDCONST( WOD_RINGS );
645
EXPP_ADDCONST( WOD_BANDNOISE );
646
EXPP_ADDCONST( WOD_RINGNOISE );
647
EXPP_ADDCONST( MAG_DEFAULT );
648
EXPP_ADDCONST( MBL_SOFT );
649
EXPP_ADDCONST( MBL_SHARP );
650
EXPP_ADDCONST( MBL_SHARPER );
651
EXPP_ADDCONST( BLN_LIN );
652
EXPP_ADDCONST( BLN_QUAD );
653
EXPP_ADDCONST( BLN_EASE );
654
EXPP_ADDCONST( BLN_DIAG );
655
EXPP_ADDCONST( BLN_SPHERE );
656
EXPP_ADDCONST( BLN_HALO );
657
EXPP_ADDCONST( STC_PLASTIC );
658
EXPP_ADDCONST( STC_WALLIN );
659
EXPP_ADDCONST( STC_WALLOUT );
660
EXPP_ADDCONST( NSE_DEFAULT );
661
EXPP_ADDCONST( IMG_DEFAULT );
662
EXPP_ADDCONST( PLG_DEFAULT );
663
EXPP_ADDCONST( ENV_STATIC );
664
EXPP_ADDCONST( ENV_ANIM );
665
EXPP_ADDCONST( ENV_LOAD );
666
EXPP_ADDCONST( MUS_MFRACTAL );
667
EXPP_ADDCONST( MUS_RIDGEDMF );
668
EXPP_ADDCONST( MUS_HYBRIDMF );
669
EXPP_ADDCONST( MUS_FBM );
670
EXPP_ADDCONST( MUS_HTERRAIN );
671
EXPP_ADDCONST( DN_BLENDER );
672
EXPP_ADDCONST( DN_PERLIN );
673
EXPP_ADDCONST( DN_IMPROVEPERLIN );
674
EXPP_ADDCONST( DN_VORONOIF1 );
675
EXPP_ADDCONST( DN_VORONOIF2 );
676
EXPP_ADDCONST( DN_VORONOIF3 );
677
EXPP_ADDCONST( DN_VORONOIF4 );
678
EXPP_ADDCONST( DN_VORONOIF2F1 );
679
EXPP_ADDCONST( DN_VORONOICRACKLE );
680
EXPP_ADDCONST( DN_CELLNOISE );
681
EXPP_ADDCONST( VN_INT );
682
EXPP_ADDCONST( VN_COL1 );
683
EXPP_ADDCONST( VN_COL2 );
684
EXPP_ADDCONST( VN_COL3 );
685
EXPP_ADDCONST( VN_TEX_DISTANCE );
686
EXPP_ADDCONST( VN_TEX_DISTANCE_SQUARED );
687
EXPP_ADDCONST( VN_TEX_MANHATTAN );
688
EXPP_ADDCONST( VN_TEX_CHEBYCHEV );
689
EXPP_ADDCONST( VN_TEX_MINKOVSKY_HALF );
690
EXPP_ADDCONST( VN_TEX_MINKOVSKY_FOUR );
691
EXPP_ADDCONST( VN_TEX_MINKOVSKY );
554
696
#undef EXPP_ADDCONST
555
697
#define EXPP_ADDCONST(name) \
556
698
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_TEXCO_##name))
558
static PyObject *M_Texture_TexCoDict (void)
700
static PyObject *M_Texture_TexCoDict( void )
560
PyObject *TexCo = M_constant_New();
562
BPy_constant *d = (BPy_constant*) TexCo;
702
PyObject *TexCo = M_constant_New( );
704
BPy_constant *d = ( BPy_constant * ) TexCo;
569
EXPP_ADDCONST(OBJECT);
572
EXPP_ADDCONST(STICK);
706
EXPP_ADDCONST( ORCO );
707
EXPP_ADDCONST( REFL );
708
EXPP_ADDCONST( NOR );
709
EXPP_ADDCONST( GLOB );
711
EXPP_ADDCONST( OBJECT );
712
EXPP_ADDCONST( WIN );
713
EXPP_ADDCONST( VIEW );
714
EXPP_ADDCONST( STICK );
578
720
#undef EXPP_ADDCONST
579
721
#define EXPP_ADDCONST(name) \
580
722
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_MAPTO_##name))
582
static PyObject *M_Texture_MapToDict (void)
724
static PyObject *M_Texture_MapToDict( void )
584
PyObject *MapTo = M_constant_New();
586
BPy_constant *d = (BPy_constant*) MapTo;
726
PyObject *MapTo = M_constant_New( );
728
BPy_constant *d = ( BPy_constant * ) MapTo;
595
EXPP_ADDCONST(ALPHA);
730
EXPP_ADDCONST( COL );
731
EXPP_ADDCONST( NOR );
732
EXPP_ADDCONST( CSP );
733
EXPP_ADDCONST( CMIR );
734
EXPP_ADDCONST( REF );
735
EXPP_ADDCONST( SPEC );
736
EXPP_ADDCONST( HARD );
737
EXPP_ADDCONST( ALPHA );
738
EXPP_ADDCONST( EMIT );
739
EXPP_ADDCONST( RAYMIR );
740
EXPP_ADDCONST( AMB );
741
EXPP_ADDCONST( TRANSLU );
742
EXPP_ADDCONST( DISP );
602
748
#undef EXPP_ADDCONST
603
749
#define EXPP_ADDCONST(name) \
604
750
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_FLAG_##name))
606
static PyObject *M_Texture_FlagsDict (void)
752
static PyObject *M_Texture_FlagsDict( void )
608
PyObject *Flags = M_constant_New();
610
BPy_constant *d = (BPy_constant*) Flags;
754
PyObject *Flags = M_constant_New( );
756
BPy_constant *d = ( BPy_constant * ) Flags;
612
EXPP_ADDCONST(COLORBAND);
613
EXPP_ADDCONST(FLIPBLEND);
614
EXPP_ADDCONST(NEGALPHA);
758
EXPP_ADDCONST( COLORBAND );
759
EXPP_ADDCONST( FLIPBLEND );
760
EXPP_ADDCONST( NEGALPHA );
620
766
#undef EXPP_ADDCONST
621
767
#define EXPP_ADDCONST(name) \
622
768
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_EXTEND_##name))
624
static PyObject *M_Texture_ExtendModesDict (void)
770
static PyObject *M_Texture_ExtendModesDict( void )
626
PyObject *ExtendModes = M_constant_New();
628
BPy_constant *d = (BPy_constant*) ExtendModes;
772
PyObject *ExtendModes = M_constant_New( );
774
BPy_constant *d = ( BPy_constant * ) ExtendModes;
630
EXPP_ADDCONST(EXTEND);
632
EXPP_ADDCONST(CLIPCUBE);
633
EXPP_ADDCONST(REPEAT);
776
EXPP_ADDCONST( EXTEND );
777
EXPP_ADDCONST( CLIP );
778
EXPP_ADDCONST( CLIPCUBE );
779
EXPP_ADDCONST( REPEAT );
639
785
#undef EXPP_ADDCONST
640
786
#define EXPP_ADDCONST(name) \
641
787
constant_insert(d, #name, PyInt_FromLong(EXPP_TEX_IMAGEFLAG_##name))
643
static PyObject *M_Texture_ImageFlagsDict (void)
645
PyObject *ImageFlags = M_constant_New();
647
BPy_constant *d = (BPy_constant*) ImageFlags;
649
EXPP_ADDCONST(INTERPOL);
650
EXPP_ADDCONST(USEALPHA);
651
EXPP_ADDCONST(MIPMAP);
652
EXPP_ADDCONST(FIELDS);
653
EXPP_ADDCONST(ROT90);
654
EXPP_ADDCONST(CALCALPHA);
655
EXPP_ADDCONST(STFIELD);
656
EXPP_ADDCONST(MOVIE);
657
EXPP_ADDCONST(CYCLIC);
663
PyObject *Texture_Init (void)
669
PyObject *Types = M_Texture_TypesDict();
670
PyObject *STypes = M_Texture_STypesDict();
671
PyObject *TexCo = M_Texture_TexCoDict();
672
PyObject *MapTo = M_Texture_MapToDict();
673
PyObject *Flags = M_Texture_FlagsDict();
674
PyObject *ExtendModes = M_Texture_ExtendModesDict();
675
PyObject *ImageFlags = M_Texture_ImageFlagsDict();
677
Texture_Type.ob_type = &PyType_Type;
679
submodule = Py_InitModule3("Blender.Texture",
680
M_Texture_methods, M_Texture_doc);
683
PyModule_AddObject(submodule, "Types", Types);
685
PyModule_AddObject(submodule, "STypes", STypes);
687
PyModule_AddObject(submodule, "TexCo", TexCo);
689
PyModule_AddObject(submodule, "MapTo", MapTo);
691
PyModule_AddObject(submodule, "Flags", Flags);
693
PyModule_AddObject(submodule, "ExtendModes", ExtendModes);
695
PyModule_AddObject(submodule, "ImageFlags", ImageFlags);
697
/* Add the MTex submodule to this module */
698
dict = PyModule_GetDict (submodule);
699
PyDict_SetItemString (dict, "MTex", MTex_Init());
704
PyObject *Texture_CreatePyObject (Tex *tex)
708
pytex = (BPy_Texture *) PyObject_NEW (BPy_Texture, &Texture_Type);
710
return EXPP_ReturnPyObjError (PyExc_MemoryError,
711
"couldn't create BPy_Texture PyObject");
713
pytex->texture = tex;
714
return (PyObject *) pytex;
717
Tex *Texture_FromPyObject (PyObject *pyobj)
719
return ((BPy_Texture *)pyobj)->texture;
723
int Texture_CheckPyObject (PyObject *pyobj)
725
return (pyobj->ob_type == &Texture_Type);
789
static PyObject *M_Texture_ImageFlagsDict( void )
791
PyObject *ImageFlags = M_constant_New( );
793
BPy_constant *d = ( BPy_constant * ) ImageFlags;
795
EXPP_ADDCONST( INTERPOL );
796
EXPP_ADDCONST( USEALPHA );
797
EXPP_ADDCONST( MIPMAP );
798
EXPP_ADDCONST( FIELDS );
799
EXPP_ADDCONST( ROT90 );
800
EXPP_ADDCONST( CALCALPHA );
801
EXPP_ADDCONST( STFIELD );
802
EXPP_ADDCONST( MOVIE );
803
EXPP_ADDCONST( CYCLIC );
804
EXPP_ADDCONST( NORMALMAP );
810
PyObject *Texture_Init( void )
816
PyObject *Types = M_Texture_TypesDict( );
817
PyObject *STypes = M_Texture_STypesDict( );
818
PyObject *TexCo = M_Texture_TexCoDict( );
819
PyObject *MapTo = M_Texture_MapToDict( );
820
PyObject *Flags = M_Texture_FlagsDict( );
821
PyObject *ExtendModes = M_Texture_ExtendModesDict( );
822
PyObject *ImageFlags = M_Texture_ImageFlagsDict( );
824
Texture_Type.ob_type = &PyType_Type;
826
submodule = Py_InitModule3( "Blender.Texture",
827
M_Texture_methods, M_Texture_doc );
830
PyModule_AddObject( submodule, "Types", Types );
832
PyModule_AddObject( submodule, "STypes", STypes );
834
PyModule_AddObject( submodule, "TexCo", TexCo );
836
PyModule_AddObject( submodule, "MapTo", MapTo );
838
PyModule_AddObject( submodule, "Flags", Flags );
840
PyModule_AddObject( submodule, "ExtendModes", ExtendModes );
842
PyModule_AddObject( submodule, "ImageFlags", ImageFlags );
844
/* Add the MTex submodule to this module */
845
dict = PyModule_GetDict( submodule );
846
PyDict_SetItemString( dict, "MTex", MTex_Init( ) );
851
PyObject *Texture_CreatePyObject( Tex * tex )
855
pytex = ( BPy_Texture * ) PyObject_NEW( BPy_Texture, &Texture_Type );
857
return EXPP_ReturnPyObjError( PyExc_MemoryError,
858
"couldn't create BPy_Texture PyObject" );
860
pytex->texture = tex;
861
return ( PyObject * ) pytex;
864
Tex *Texture_FromPyObject( PyObject * pyobj )
866
return ( ( BPy_Texture * ) pyobj )->texture;
870
int Texture_CheckPyObject( PyObject * pyobj )
872
return ( pyobj->ob_type == &Texture_Type );
730
877
/* Python BPy_Texture methods: */
731
878
/*****************************************************************************/
733
static PyObject *Texture_getExtend(BPy_Texture *self)
735
PyObject *attr = NULL;
736
const char *extend = NULL;
738
if (EXPP_map_getStrVal (tex_extend_map, self->texture->extend, &extend))
739
attr = PyString_FromString (extend);
742
return EXPP_ReturnPyObjError (PyExc_RuntimeError,
743
"invalid internal extend mode");
748
static PyObject *Texture_getImage(BPy_Texture *self)
750
/* we need this to be an IMAGE texture, and we must have an image */
751
if ((self->texture->type != TEX_IMAGE) || !self->texture->ima)
757
return Image_CreatePyObject (self->texture->ima);
761
static PyObject *Texture_getName(BPy_Texture *self)
763
PyObject *attr = PyString_FromString(self->texture->id.name+2);
765
return EXPP_ReturnPyObjError (PyExc_RuntimeError,
766
"couldn't get Texture.name attribute");
771
static PyObject *Texture_getSType(BPy_Texture *self)
773
PyObject *attr = NULL;
774
const char *stype = NULL;
776
if (EXPP_map_getStrVal (tex_stype_map[self->texture->type],
777
self->texture->stype, &stype))
778
attr = PyString_FromString (stype);
781
return EXPP_ReturnPyObjError (PyExc_RuntimeError,
782
"invalid texture stype internally");
787
static PyObject *Texture_getType(BPy_Texture *self)
789
PyObject *attr = NULL;
790
const char *type = NULL;
792
if (EXPP_map_getStrVal (tex_type_map, self->texture->type, &type))
793
attr = PyString_FromString (type);
796
return EXPP_ReturnPyObjError (PyExc_RuntimeError,
797
"invalid texture type internally");
803
static PyObject *Texture_setAnimFrames(BPy_Texture *self, PyObject *args)
806
if (!PyArg_ParseTuple(args, "i", &frames))
807
return EXPP_ReturnPyObjError (PyExc_TypeError,
811
return EXPP_ReturnPyObjError (PyExc_ValueError,
812
"frames cannot be negative");
814
self->texture->frames = frames;
821
static PyObject *Texture_setAnimLength(BPy_Texture *self, PyObject *args)
824
if (!PyArg_ParseTuple(args, "i", &length))
825
return EXPP_ReturnPyObjError (PyExc_TypeError,
829
return EXPP_ReturnPyObjError (PyExc_ValueError,
830
"length cannot be negative");
832
self->texture->len = length;
839
static PyObject *Texture_setAnimMontage(BPy_Texture *self, PyObject *args)
843
if (!PyArg_ParseTuple(args, "((ii)(ii)(ii)(ii))",
844
&fradur[0][0], &fradur[0][1],
845
&fradur[1][0], &fradur[1][1],
846
&fradur[2][0], &fradur[2][1],
847
&fradur[3][0], &fradur[3][1]))
848
return EXPP_ReturnPyObjError (PyExc_TypeError,
849
"expected a tuple of tuples");
853
if (fradur[i][j] < 0)
854
return EXPP_ReturnPyObjError (PyExc_ValueError,
855
"values must be greater than zero");
859
self->texture->fradur[i][j] = fradur[i][j];
866
static PyObject *Texture_setAnimOffset(BPy_Texture *self, PyObject *args)
869
if (!PyArg_ParseTuple(args, "i", &offset))
870
return EXPP_ReturnPyObjError (PyExc_TypeError,
873
self->texture->offset = offset;
880
static PyObject *Texture_setAnimStart(BPy_Texture *self, PyObject *args)
883
if (!PyArg_ParseTuple(args, "i", &sfra))
884
return EXPP_ReturnPyObjError (PyExc_TypeError,
888
return EXPP_ReturnPyObjError (PyExc_ValueError,
889
"start must be greater than zero");
891
self->texture->sfra = sfra;
898
static PyObject *Texture_setBrightness(BPy_Texture *self, PyObject *args)
901
if (!PyArg_ParseTuple(args, "f", &bright))
902
return EXPP_ReturnPyObjError (PyExc_TypeError,
905
if (bright<0 || bright>2)
906
return EXPP_ReturnPyObjError (PyExc_ValueError,
907
"brightness must be in range [0,2]");
909
self->texture->bright = bright;
916
static PyObject *Texture_setContrast(BPy_Texture *self, PyObject *args)
919
if (!PyArg_ParseTuple(args, "f", &contrast))
920
return EXPP_ReturnPyObjError (PyExc_TypeError,
923
if (contrast<0 || contrast>2)
924
return EXPP_ReturnPyObjError (PyExc_ValueError,
925
"contrast must be in range [0,2]");
927
self->texture->contrast = contrast;
934
static PyObject *Texture_setCrop(BPy_Texture *self, PyObject *args)
938
if (!PyArg_ParseTuple(args, "(ffff)",
939
&crop[0], &crop[1], &crop[2], &crop[3]))
940
return EXPP_ReturnPyObjError (PyExc_TypeError,
941
"expected tuple of 4 floats");
944
if (crop[i]<-10 || crop[i]>10)
945
return EXPP_ReturnPyObjError (PyExc_ValueError,
946
"values must be in range [-10,10]");
948
self->texture->cropxmin = crop[0];
949
self->texture->cropymin = crop[1];
950
self->texture->cropxmax = crop[2];
951
self->texture->cropymax = crop[3];
958
static PyObject *Texture_setExtend(BPy_Texture *self, PyObject *args)
961
if (!PyArg_ParseTuple(args, "s", &extend))
962
return EXPP_ReturnPyObjError (PyExc_TypeError,
963
"expected string argument");
965
if (!EXPP_map_getShortVal (tex_extend_map, extend, &self->texture->extend))
966
return EXPP_ReturnPyObjError (PyExc_ValueError,
967
"invalid extend mode");
973
static PyObject *Texture_setIntExtend(BPy_Texture *self, PyObject *args)
976
if (!PyArg_ParseTuple(args, "i", &extend))
977
return EXPP_ReturnPyObjError (PyExc_TypeError,
978
"expected int argument");
980
if (extend<EXPP_TEX_EXTEND_MIN || extend>EXPP_TEX_EXTEND_MAX)
981
return EXPP_ReturnPyObjError (PyExc_ValueError,
982
"invalid extend mode");
984
self->texture->extend = extend;
990
static PyObject *Texture_setFieldsPerImage(BPy_Texture *self, PyObject *args)
993
if (!PyArg_ParseTuple(args, "i", &fie_ima))
994
return EXPP_ReturnPyObjError (PyExc_TypeError,
997
if (fie_ima<1 || fie_ima>200)
998
return EXPP_ReturnPyObjError (PyExc_ValueError,
999
"value must be in range [1,200]");
1001
self->texture->fie_ima = fie_ima;
1003
Py_INCREF (Py_None);
1007
static PyObject *Texture_setFilterSize(BPy_Texture *self, PyObject *args)
1010
if (!PyArg_ParseTuple(args, "f", &size))
1011
return EXPP_ReturnPyObjError (PyExc_TypeError,
1012
"expected a float");
1014
if (size<0.1 || size>25)
1015
return EXPP_ReturnPyObjError (PyExc_ValueError,
1016
"filter size must be in range [0.1,25]");
1018
self->texture->filtersize = size;
1020
Py_INCREF (Py_None);
1024
static PyObject *Texture_setFlags(BPy_Texture *self, PyObject *args)
1026
char *sf[3] = { NULL, NULL, NULL };
1030
if (!PyArg_ParseTuple(args, "|sss", &sf[0], &sf[1], &sf[2]))
1031
return EXPP_ReturnPyObjError (PyExc_TypeError,
1032
"expected 0-3 string arguments");
1038
if (!EXPP_map_getShortVal(tex_flag_map, sf[i], &thisflag))
1039
return EXPP_ReturnPyObjError (PyExc_ValueError,
1040
"invalid texture flag name");
1045
self->texture->flag = flags;
1051
static PyObject *Texture_setIntFlags(BPy_Texture *self, PyObject *args)
1054
if (!PyArg_ParseTuple(args, "i", &flags))
1055
return EXPP_ReturnPyObjError (PyExc_TypeError,
1056
"expected int argument");
1058
self->texture->flag = flags;
1065
static PyObject *Texture_setImage(BPy_Texture *self, PyObject *args)
1068
Image *blimg = NULL;
1070
if (!PyArg_ParseTuple(args, "O!", &Image_Type, &pyimg))
1071
return EXPP_ReturnPyObjError (PyExc_TypeError,
1072
"expected an Image");
1073
blimg = Image_FromPyObject (pyimg);
1075
if (self->texture->ima) {
1076
self->texture->ima->id.us--;
1079
self->texture->ima = blimg;
1080
id_us_plus(&blimg->id);
1087
static PyObject *Texture_setImageFlags(BPy_Texture *self, PyObject *args)
1089
char *sf[9] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
1093
if (!PyArg_ParseTuple(args, "|sssssssss", &sf[0], &sf[1], &sf[2], &sf[3],
1094
&sf[4], &sf[5], &sf[6], &sf[7], &sf[8]))
1095
return EXPP_ReturnPyObjError (PyExc_TypeError,
1096
"expected 0-9 string arguments");
1102
if (!EXPP_map_getShortVal(tex_imageflag_map, sf[i], &thisflag))
1103
return EXPP_ReturnPyObjError (PyExc_ValueError,
1104
"invalid texture image flag name");
1109
/* MIPMAP and FIELDS can't be used together */
1110
if ((flags & EXPP_TEX_IMAGEFLAG_MIPMAP) &&
1111
(flags & EXPP_TEX_IMAGEFLAG_FIELDS))
1112
return EXPP_ReturnPyObjError (PyExc_ValueError,
1113
"image flags MIPMAP and FIELDS cannot be used together");
1115
self->texture->imaflag = flags;
1121
static PyObject *Texture_setIntImageFlags(BPy_Texture *self, PyObject *args)
1124
if (!PyArg_ParseTuple(args, "i", &flags))
1125
return EXPP_ReturnPyObjError (PyExc_TypeError,
1126
"expected int argument");
1128
/* MIPMAP and FIELDS can't be used together */
1129
if ((flags & EXPP_TEX_IMAGEFLAG_MIPMAP) &&
1130
(flags & EXPP_TEX_IMAGEFLAG_FIELDS))
1131
return EXPP_ReturnPyObjError (PyExc_ValueError,
1132
"image flags MIPMAP and FIELDS cannot be used together");
1134
self->texture->imaflag = flags;
1140
static PyObject *Texture_setName(BPy_Texture *self, PyObject *args)
1145
if (!PyArg_ParseTuple(args, "s", &name))
1146
return EXPP_ReturnPyObjError (PyExc_TypeError,
1147
"expected string argument");
1149
PyOS_snprintf(buf, sizeof(buf), "%s", name);
1150
rename_id(&self->texture->id, buf);
1156
static PyObject *Texture_setNoiseDepth(BPy_Texture *self, PyObject *args)
1159
if (!PyArg_ParseTuple(args, "i", &depth))
1160
return EXPP_ReturnPyObjError (PyExc_TypeError,
1163
if (depth<0 || depth>6)
1164
return EXPP_ReturnPyObjError (PyExc_ValueError,
1165
"value must be in range [0,6]");
1167
self->texture->noisedepth = depth;
1169
Py_INCREF (Py_None);
1173
static PyObject *Texture_setNoiseSize(BPy_Texture *self, PyObject *args)
1176
if (!PyArg_ParseTuple(args, "f", &size))
1177
return EXPP_ReturnPyObjError (PyExc_TypeError,
1178
"expected a float");
1180
if (size<0 || size>2)
1181
return EXPP_ReturnPyObjError (PyExc_ValueError,
1182
"noise size must be in range [0,2]");
1184
self->texture->noisesize = size;
1186
Py_INCREF (Py_None);
1190
static PyObject *Texture_setNoiseType(BPy_Texture *self, PyObject *args)
1194
if (!PyArg_ParseTuple(args, "s", &type))
1195
return EXPP_ReturnPyObjError (PyExc_TypeError,
1196
"expected string argument");
1198
if (STREQ(type, "soft"))
1199
self->texture->noisetype = TEX_NOISESOFT;
1200
else if (STREQ(type, "hard"))
1201
self->texture->noisetype = TEX_NOISEPERL;
1204
return EXPP_ReturnPyObjError (PyExc_ValueError,
1205
"noise type must be 'soft' or 'hard'");
1211
static PyObject *Texture_setRepeat(BPy_Texture *self, PyObject *args)
1215
if (!PyArg_ParseTuple(args, "(ii)", &repeat[0], &repeat[1]))
1216
return EXPP_ReturnPyObjError (PyExc_TypeError,
1217
"expected tuple of 2 ints");
1220
if (repeat[i]<1 || repeat[i]>512)
1221
return EXPP_ReturnPyObjError (PyExc_ValueError,
1222
"values must be in range [1,512]");
1224
self->texture->xrepeat = repeat[0];
1225
self->texture->yrepeat = repeat[1];
1227
Py_INCREF (Py_None);
1231
static PyObject *Texture_setRGBCol(BPy_Texture *self, PyObject *args)
1235
if (!PyArg_ParseTuple(args, "(fff)", &rgb[0], &rgb[1], &rgb[2]))
1236
return EXPP_ReturnPyObjError (PyExc_TypeError,
1237
"expected tuple of 3 floats");
1240
if (rgb[i]<0 || rgb[i]>2)
1241
return EXPP_ReturnPyObjError (PyExc_ValueError,
1242
"values must be in range [0,2]");
1244
self->texture->rfac = rgb[0];
1245
self->texture->gfac = rgb[1];
1246
self->texture->bfac = rgb[2];
1248
Py_INCREF (Py_None);
1253
static PyObject *Texture_setSType(BPy_Texture *self, PyObject *args)
1256
if (!PyArg_ParseTuple(args, "s", &stype))
1257
return EXPP_ReturnPyObjError (PyExc_TypeError,
1258
"expected string argument");
1260
/* can we really trust texture->type? */
1261
if (!EXPP_map_getShortVal (tex_stype_map[self->texture->type],
1262
stype, &self->texture->stype))
1263
return EXPP_ReturnPyObjError (PyExc_ValueError,
1264
"invalid texture stype");
1270
static PyObject *Texture_setIntSType(BPy_Texture *self, PyObject *args)
1273
const char *dummy = NULL;
1274
if (!PyArg_ParseTuple(args, "i", &stype))
1275
return EXPP_ReturnPyObjError (PyExc_TypeError,
1276
"expected int argument");
1278
/* use the stype map to find out if this is a valid stype for this type *
1279
* note that this will allow CLD_COLOR when type is ENVMAP. there's not *
1280
* much that we can do about this though. */
1281
if (!EXPP_map_getStrVal (tex_stype_map[self->texture->type], stype, &dummy))
1282
return EXPP_ReturnPyObjError (PyExc_ValueError,
1283
"invalid stype (for this type)");
1285
self->texture->stype = stype;
1291
static PyObject *Texture_setTurbulence(BPy_Texture *self, PyObject *args)
1294
if (!PyArg_ParseTuple(args, "f", &turb))
1295
return EXPP_ReturnPyObjError (PyExc_TypeError,
1296
"expected a float");
1298
if (turb<0 || turb>200)
1299
return EXPP_ReturnPyObjError (PyExc_ValueError,
1300
"turbulence must be in range [0,200]");
1302
self->texture->turbul = turb;
1304
Py_INCREF (Py_None);
1308
static PyObject *Texture_setType(BPy_Texture *self, PyObject *args)
1311
if (!PyArg_ParseTuple(args, "s", &type))
1312
return EXPP_ReturnPyObjError (PyExc_TypeError,
1313
"expected string argument");
1315
if (!EXPP_map_getShortVal (tex_type_map, type, &self->texture->type))
1316
return EXPP_ReturnPyObjError (PyExc_ValueError,
1317
"invalid texture type");
1323
static PyObject *Texture_setIntType(BPy_Texture *self, PyObject *args)
1326
if (!PyArg_ParseTuple(args, "i", &type))
1327
return EXPP_ReturnPyObjError (PyExc_TypeError,
1328
"expected int argument");
1330
if (type<EXPP_TEX_TYPE_MIN || type>EXPP_TEX_TYPE_MAX)
1331
return EXPP_ReturnPyObjError (PyExc_ValueError,
1332
"invalid type number");
1334
self->texture->type = type;
1340
static void Texture_dealloc (BPy_Texture *self)
1342
PyObject_DEL (self);
1345
static PyObject *Texture_getAttr (BPy_Texture *self, char *name)
1347
PyObject *attr = Py_None;
1348
Tex *tex = self->texture;
1350
if (STREQ(name, "animFrames"))
1351
attr = PyInt_FromLong (tex->frames);
1352
else if (STREQ(name, "animLength"))
1353
attr = PyInt_FromLong (tex->len);
1354
else if (STREQ(name, "animMontage"))
1355
attr = Py_BuildValue("((i,i),(i,i),(i,i),(i,i))",
1356
tex->fradur[0][0], tex->fradur[0][1],
1357
tex->fradur[1][0], tex->fradur[1][1],
1358
tex->fradur[2][0], tex->fradur[2][1],
1359
tex->fradur[3][0], tex->fradur[3][1] );
1360
else if (STREQ(name, "animOffset"))
1361
attr = PyInt_FromLong (tex->offset);
1362
else if (STREQ(name, "animStart"))
1363
attr = PyInt_FromLong (tex->sfra);
1364
else if (STREQ(name, "brightness"))
1365
attr = PyFloat_FromDouble (tex->bright);
1366
else if (STREQ(name, "contrast"))
1367
attr = PyFloat_FromDouble (tex->contrast);
1368
else if (STREQ(name, "crop"))
1369
attr = Py_BuildValue("(f,f,f,f)", tex->cropxmin, tex->cropymin,
1370
tex->cropxmax, tex->cropymax);
1371
else if (STREQ(name, "extend"))
1372
attr = PyInt_FromLong (tex->extend);
1373
else if (STREQ(name, "fieldsPerImage"))
1374
attr = PyInt_FromLong (tex->fie_ima);
1375
else if (STREQ(name, "filterSize"))
1376
attr = PyFloat_FromDouble (tex->filtersize);
1377
else if (STREQ(name, "flags"))
1378
attr = PyInt_FromLong (tex->flag);
1379
else if (STREQ(name, "image"))
1380
attr = Texture_getImage (self);
1381
else if (STREQ(name, "imageFlags"))
1382
attr = PyInt_FromLong (tex->imaflag);
1383
else if (STREQ(name, "name"))
1384
attr = PyString_FromString(tex->id.name+2);
1385
else if (STREQ(name, "noiseDepth"))
1386
attr = PyInt_FromLong (tex->noisedepth);
1387
else if (STREQ(name, "noiseSize"))
1388
attr = PyFloat_FromDouble (tex->noisesize);
1389
else if (STREQ(name, "noiseType"))
1391
if (tex->noisetype == TEX_NOISESOFT)
1392
attr = PyString_FromString ("soft");
1394
attr = PyString_FromString ("hard");
1396
else if (STREQ(name, "repeat"))
1397
attr = Py_BuildValue ("(i,i)", tex->xrepeat, tex->yrepeat);
1398
else if (STREQ(name, "rgbCol"))
1399
attr = Py_BuildValue ("(f,f,f)", tex->rfac, tex->gfac, tex->gfac);
1400
else if (STREQ(name, "stype"))
1401
attr = PyInt_FromLong (tex->stype);
1402
else if (STREQ(name, "turbulence"))
1403
attr = PyFloat_FromDouble (tex->turbul);
1404
else if (STREQ(name, "type"))
1405
attr = PyInt_FromLong (tex->type);
1408
else if (STREQ(name, "__members__"))
1409
attr = Py_BuildValue("[s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s]",
1410
"animFrames", "animLength", "animMontage", "animOffset",
1411
"animStart", "brightness", "contrast", "crop", "extend",
1412
"fieldsPerImage", "filterSize", "flags", "image",
1413
"imageFlags", "name", "noiseDepth", "noiseSize", "noiseType",
1414
"repeat", "rgbCol", "stype", "turbulence", "type");
1417
return EXPP_ReturnPyObjError (PyExc_MemoryError,
1418
"couldn't create PyObject");
1420
if (attr != Py_None)
1421
return attr; /* member attribute found, return it */
1423
/* not an attribute, search the methods table */
1424
return Py_FindMethod(BPy_Texture_methods, (PyObject *)self, name);
1428
static int Texture_setAttr (BPy_Texture *self, char *name, PyObject *value)
1431
PyObject *error = NULL;
1433
/* Put "value" in a tuple, because we want to pass it to functions *
1434
* that only accept PyTuples. */
1435
valtuple = Py_BuildValue("(O)", value);
1437
return EXPP_ReturnIntError(PyExc_MemoryError,
1438
"Texture_setAttr: couldn't create PyTuple");
1440
if (STREQ(name, "animFrames"))
1441
error = Texture_setAnimFrames (self, valtuple);
1442
else if (STREQ(name, "animLength"))
1443
error = Texture_setAnimLength(self, valtuple);
1444
else if (STREQ(name, "animMontage"))
1445
error = Texture_setAnimMontage(self, valtuple);
1446
else if (STREQ(name, "animOffset"))
1447
error = Texture_setAnimOffset(self, valtuple);
1448
else if (STREQ(name, "animStart"))
1449
error = Texture_setAnimStart(self, valtuple);
1450
else if (STREQ(name, "brightness"))
1451
error = Texture_setBrightness(self, valtuple);
1452
else if (STREQ(name, "contrast"))
1453
error = Texture_setContrast(self, valtuple);
1454
else if (STREQ(name, "crop"))
1455
error = Texture_setCrop(self, valtuple);
1456
else if (STREQ(name, "extend"))
1457
error = Texture_setIntExtend(self, valtuple);
1458
else if (STREQ(name, "fieldsPerImage"))
1459
error = Texture_setFieldsPerImage(self, valtuple);
1460
else if (STREQ(name, "filterSize"))
1461
error = Texture_setFilterSize(self, valtuple);
1462
else if (STREQ(name, "flags"))
1463
error = Texture_setIntFlags(self, valtuple);
1464
else if (STREQ(name, "image"))
1465
error = Texture_setImage (self, valtuple);
1466
else if (STREQ(name, "imageFlags"))
1467
error = Texture_setIntImageFlags(self, valtuple);
1468
else if (STREQ(name, "name"))
1469
error = Texture_setName(self, valtuple);
1470
else if (STREQ(name, "noiseDepth"))
1471
error = Texture_setNoiseDepth(self, valtuple);
1472
else if (STREQ(name, "noiseSize"))
1473
error = Texture_setNoiseSize(self, valtuple);
1474
else if (STREQ(name, "noiseType"))
1475
error = Texture_setNoiseType(self, valtuple);
1476
else if (STREQ(name, "repeat"))
1477
error = Texture_setRepeat(self, valtuple);
1478
else if (STREQ(name, "rgbCol"))
1479
error = Texture_setRGBCol(self, valtuple);
1480
else if (STREQ(name, "stype"))
1481
error = Texture_setIntSType(self, valtuple);
1482
else if (STREQ(name, "turbulence"))
1483
error = Texture_setTurbulence(self, valtuple);
1484
else if (STREQ(name, "type"))
1485
error = Texture_setIntType(self, valtuple);
1489
Py_DECREF(valtuple);
1490
return EXPP_ReturnIntError (PyExc_KeyError, "attribute not found");
1493
Py_DECREF (valtuple);
1495
if (error != Py_None)
1498
/* Py_None was INCREF'd by the set*() function, so we need to DECREF it */
1499
Py_DECREF (Py_None);
1504
static int Texture_compare (BPy_Texture *a, BPy_Texture *b)
1506
return (a->texture == b->texture) ? 0 : -1;
1509
static PyObject *Texture_repr (BPy_Texture *self)
1511
return PyString_FromFormat("[Texture \"%s\"]", self->texture->id.name+2);
880
static PyObject *Texture_getExtend( BPy_Texture * self )
882
PyObject *attr = NULL;
883
const char *extend = NULL;
885
if( EXPP_map_getStrVal
886
( tex_extend_map, self->texture->extend, &extend ) )
887
attr = PyString_FromString( extend );
890
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
891
"invalid internal extend mode" );
896
static PyObject *Texture_getImage( BPy_Texture * self )
898
/* we need this to be an IMAGE texture, and we must have an image */
899
if( ( self->texture->type != TEX_IMAGE ) || !self->texture->ima ) {
900
Py_INCREF( Py_None );
904
return Image_CreatePyObject( self->texture->ima );
908
static PyObject *Texture_getName( BPy_Texture * self )
910
PyObject *attr = PyString_FromString( self->texture->id.name + 2 );
912
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
913
"couldn't get Texture.name attribute" );
918
static PyObject *Texture_getSType( BPy_Texture * self )
920
PyObject *attr = NULL;
921
const char *stype = NULL;
924
if( self->texture->type == EXPP_TEX_TYPE_ENVMAP )
925
n_stype = self->texture->env->stype;
927
n_stype = self->texture->stype;
928
if( EXPP_map_getStrVal( tex_stype_map[self->texture->type],
930
attr = PyString_FromString( stype );
933
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
934
"invalid texture stype internally" );
939
static PyObject *Texture_getType( BPy_Texture * self )
941
PyObject *attr = NULL;
942
const char *type = NULL;
944
if( EXPP_map_getStrVal( tex_type_map, self->texture->type, &type ) )
945
attr = PyString_FromString( type );
948
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
949
"invalid texture type internally" );
954
static PyObject *Texture_setAnimFrames( BPy_Texture * self, PyObject * args )
957
if( !PyArg_ParseTuple( args, "i", &frames ) )
958
return EXPP_ReturnPyObjError( PyExc_TypeError,
962
return EXPP_ReturnPyObjError( PyExc_ValueError,
963
"frames cannot be negative" );
965
self->texture->frames = frames;
967
Py_INCREF( Py_None );
971
static PyObject *Texture_setAnimLength( BPy_Texture * self, PyObject * args )
974
if( !PyArg_ParseTuple( args, "i", &length ) )
975
return EXPP_ReturnPyObjError( PyExc_TypeError,
979
return EXPP_ReturnPyObjError( PyExc_ValueError,
980
"length cannot be negative" );
982
self->texture->len = length;
984
Py_INCREF( Py_None );
989
static PyObject *Texture_setAnimMontage( BPy_Texture * self, PyObject * args )
993
if( !PyArg_ParseTuple( args, "((ii)(ii)(ii)(ii))",
994
&fradur[0][0], &fradur[0][1],
995
&fradur[1][0], &fradur[1][1],
996
&fradur[2][0], &fradur[2][1],
997
&fradur[3][0], &fradur[3][1] ) )
998
return EXPP_ReturnPyObjError( PyExc_TypeError,
999
"expected a tuple of tuples" );
1001
for( i = 0; i < 4; ++i )
1002
for( j = 0; j < 2; ++j )
1003
if( fradur[i][j] < 0 )
1004
return EXPP_ReturnPyObjError( PyExc_ValueError,
1005
"values must be greater than zero" );
1007
for( i = 0; i < 4; ++i )
1008
for( j = 0; j < 2; ++j )
1009
self->texture->fradur[i][j] = fradur[i][j];
1011
Py_INCREF( Py_None );
1016
static PyObject *Texture_setAnimOffset( BPy_Texture * self, PyObject * args )
1019
if( !PyArg_ParseTuple( args, "i", &offset ) )
1020
return EXPP_ReturnPyObjError( PyExc_TypeError,
1021
"expected an int" );
1023
self->texture->offset = offset;
1025
Py_INCREF( Py_None );
1030
static PyObject *Texture_setAnimStart( BPy_Texture * self, PyObject * args )
1033
if( !PyArg_ParseTuple( args, "i", &sfra ) )
1034
return EXPP_ReturnPyObjError( PyExc_TypeError,
1035
"expected an int" );
1038
return EXPP_ReturnPyObjError( PyExc_ValueError,
1039
"start must be greater than zero" );
1041
self->texture->sfra = sfra;
1043
Py_INCREF( Py_None );
1048
static PyObject *Texture_setBrightness( BPy_Texture * self, PyObject * args )
1051
if( !PyArg_ParseTuple( args, "f", &bright ) )
1052
return EXPP_ReturnPyObjError( PyExc_TypeError,
1053
"expected a float" );
1055
if( bright < 0 || bright > 2 )
1056
return EXPP_ReturnPyObjError( PyExc_ValueError,
1057
"brightness must be in range [0,2]" );
1059
self->texture->bright = bright;
1061
Py_INCREF( Py_None );
1066
static PyObject *Texture_setContrast( BPy_Texture * self, PyObject * args )
1069
if( !PyArg_ParseTuple( args, "f", &contrast ) )
1070
return EXPP_ReturnPyObjError( PyExc_TypeError,
1071
"expected a float" );
1073
if( contrast < 0 || contrast > 2 )
1074
return EXPP_ReturnPyObjError( PyExc_ValueError,
1075
"contrast must be in range [0,2]" );
1077
self->texture->contrast = contrast;
1079
Py_INCREF( Py_None );
1084
static PyObject *Texture_setCrop( BPy_Texture * self, PyObject * args )
1088
if( !PyArg_ParseTuple( args, "(ffff)",
1089
&crop[0], &crop[1], &crop[2], &crop[3] ) )
1090
return EXPP_ReturnPyObjError( PyExc_TypeError,
1091
"expected tuple of 4 floats" );
1093
for( i = 0; i < 4; ++i )
1094
if( crop[i] < -10 || crop[i] > 10 )
1095
return EXPP_ReturnPyObjError( PyExc_ValueError,
1096
"values must be in range [-10,10]" );
1098
self->texture->cropxmin = crop[0];
1099
self->texture->cropymin = crop[1];
1100
self->texture->cropxmax = crop[2];
1101
self->texture->cropymax = crop[3];
1103
Py_INCREF( Py_None );
1108
static PyObject *Texture_setExtend( BPy_Texture * self, PyObject * args )
1110
char *extend = NULL;
1111
if( !PyArg_ParseTuple( args, "s", &extend ) )
1112
return EXPP_ReturnPyObjError( PyExc_TypeError,
1113
"expected string argument" );
1115
if( !EXPP_map_getShortVal
1116
( tex_extend_map, extend, &self->texture->extend ) )
1117
return EXPP_ReturnPyObjError( PyExc_ValueError,
1118
"invalid extend mode" );
1120
Py_INCREF( Py_None );
1124
static PyObject *Texture_setIntExtend( BPy_Texture * self, PyObject * args )
1127
if( !PyArg_ParseTuple( args, "i", &extend ) )
1128
return EXPP_ReturnPyObjError( PyExc_TypeError,
1129
"expected int argument" );
1131
if( extend < EXPP_TEX_EXTEND_MIN || extend > EXPP_TEX_EXTEND_MAX )
1132
return EXPP_ReturnPyObjError( PyExc_ValueError,
1133
"invalid extend mode" );
1135
self->texture->extend = extend;
1137
Py_INCREF( Py_None );
1141
static PyObject *Texture_setFieldsPerImage( BPy_Texture * self,
1145
if( !PyArg_ParseTuple( args, "i", &fie_ima ) )
1146
return EXPP_ReturnPyObjError( PyExc_TypeError,
1147
"expected an int" );
1149
if( fie_ima < 1 || fie_ima > 200 )
1150
return EXPP_ReturnPyObjError( PyExc_ValueError,
1151
"value must be in range [1,200]" );
1153
self->texture->fie_ima = fie_ima;
1155
Py_INCREF( Py_None );
1159
static PyObject *Texture_setFilterSize( BPy_Texture * self, PyObject * args )
1162
if( !PyArg_ParseTuple( args, "f", &size ) )
1163
return EXPP_ReturnPyObjError( PyExc_TypeError,
1164
"expected a float" );
1166
if( size < 0.1 || size > 25 )
1167
return EXPP_ReturnPyObjError( PyExc_ValueError,
1168
"filter size must be in range [0.1,25]" );
1170
self->texture->filtersize = size;
1172
Py_INCREF( Py_None );
1176
static PyObject *Texture_setFlags( BPy_Texture * self, PyObject * args )
1178
char *sf[3] = { NULL, NULL, NULL };
1182
if( !PyArg_ParseTuple( args, "|sss", &sf[0], &sf[1], &sf[2] ) )
1183
return EXPP_ReturnPyObjError( PyExc_TypeError,
1184
"expected 0-3 string arguments" );
1186
for( i = 0; i < 3; ++i ) {
1190
if( !EXPP_map_getShortVal( tex_flag_map, sf[i], &thisflag ) )
1191
return EXPP_ReturnPyObjError( PyExc_ValueError,
1192
"invalid texture flag name" );
1197
self->texture->flag = flags;
1199
Py_INCREF( Py_None );
1203
static PyObject *Texture_setIntFlags( BPy_Texture * self, PyObject * args )
1206
if( !PyArg_ParseTuple( args, "i", &flags ) )
1207
return EXPP_ReturnPyObjError( PyExc_TypeError,
1208
"expected int argument" );
1210
self->texture->flag = flags;
1212
Py_INCREF( Py_None );
1217
static PyObject *Texture_setImage( BPy_Texture * self, PyObject * args )
1220
Image *blimg = NULL;
1222
if( !PyArg_ParseTuple( args, "O!", &Image_Type, &pyimg ) )
1223
return EXPP_ReturnPyObjError( PyExc_TypeError,
1224
"expected an Image" );
1225
blimg = Image_FromPyObject( pyimg );
1227
if( self->texture->ima ) {
1228
self->texture->ima->id.us--;
1231
self->texture->ima = blimg;
1232
id_us_plus( &blimg->id );
1234
Py_INCREF( Py_None );
1239
static PyObject *Texture_setImageFlags( BPy_Texture * self, PyObject * args )
1241
char *sf[9] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
1245
if( !PyArg_ParseTuple
1246
( args, "|sssssssss", &sf[0], &sf[1], &sf[2], &sf[3], &sf[4],
1247
&sf[5], &sf[6], &sf[7], &sf[8] ) )
1248
return EXPP_ReturnPyObjError( PyExc_TypeError,
1249
"expected 0-9 string arguments" );
1251
for( i = 0; i < 9; ++i ) {
1255
if( !EXPP_map_getShortVal
1256
( tex_imageflag_map, sf[i], &thisflag ) )
1257
return EXPP_ReturnPyObjError( PyExc_ValueError,
1258
"invalid texture image flag name" );
1263
/* MIPMAP and FIELDS can't be used together */
1264
if( ( flags & EXPP_TEX_IMAGEFLAG_MIPMAP ) &&
1265
( flags & EXPP_TEX_IMAGEFLAG_FIELDS ) )
1266
return EXPP_ReturnPyObjError( PyExc_ValueError,
1267
"image flags MIPMAP and FIELDS cannot be used together" );
1269
self->texture->imaflag = flags;
1271
Py_INCREF( Py_None );
1275
static PyObject *Texture_setIntImageFlags( BPy_Texture * self,
1279
if( !PyArg_ParseTuple( args, "i", &flags ) )
1280
return EXPP_ReturnPyObjError( PyExc_TypeError,
1281
"expected int argument" );
1283
/* MIPMAP and FIELDS can't be used together */
1284
if( ( flags & EXPP_TEX_IMAGEFLAG_MIPMAP ) &&
1285
( flags & EXPP_TEX_IMAGEFLAG_FIELDS ) )
1286
return EXPP_ReturnPyObjError( PyExc_ValueError,
1287
"image flags MIPMAP and FIELDS cannot be used together" );
1289
self->texture->imaflag = flags;
1291
Py_INCREF( Py_None );
1295
static PyObject *Texture_setName( BPy_Texture * self, PyObject * args )
1300
if( !PyArg_ParseTuple( args, "s", &name ) )
1301
return EXPP_ReturnPyObjError( PyExc_TypeError,
1302
"expected string argument" );
1304
PyOS_snprintf( buf, sizeof( buf ), "%s", name );
1305
rename_id( &self->texture->id, buf );
1307
Py_INCREF( Py_None );
1311
static PyObject *Texture_setNoiseDepth( BPy_Texture * self, PyObject * args )
1314
if( !PyArg_ParseTuple( args, "i", &depth ) )
1315
return EXPP_ReturnPyObjError( PyExc_TypeError,
1316
"expected an int" );
1318
if( depth < 0 || depth > 6 )
1319
return EXPP_ReturnPyObjError( PyExc_ValueError,
1320
"value must be in range [0,6]" );
1322
self->texture->noisedepth = depth;
1324
Py_INCREF( Py_None );
1328
static PyObject *Texture_setNoiseSize( BPy_Texture * self, PyObject * args )
1331
if( !PyArg_ParseTuple( args, "f", &size ) )
1332
return EXPP_ReturnPyObjError( PyExc_TypeError,
1333
"expected a float" );
1335
if( size < 0 || size > 2 )
1336
return EXPP_ReturnPyObjError( PyExc_ValueError,
1337
"noise size must be in range [0,2]" );
1339
self->texture->noisesize = size;
1341
Py_INCREF( Py_None );
1345
static PyObject *Texture_setNoiseType( BPy_Texture * self, PyObject * args )
1349
if( !PyArg_ParseTuple( args, "s", &type ) )
1350
return EXPP_ReturnPyObjError( PyExc_TypeError,
1351
"expected string argument" );
1353
if( STREQ( type, "soft" ) )
1354
self->texture->noisetype = TEX_NOISESOFT;
1355
else if( STREQ( type, "hard" ) )
1356
self->texture->noisetype = TEX_NOISEPERL;
1359
return EXPP_ReturnPyObjError( PyExc_ValueError,
1360
"noise type must be 'soft' or 'hard'" );
1362
Py_INCREF( Py_None );
1366
static PyObject *Texture_setNoiseBasis( BPy_Texture * self, PyObject * args )
1370
if( !PyArg_ParseTuple( args, "s", &nbasis ) )
1371
return EXPP_ReturnPyObjError( PyExc_TypeError,
1372
"expected string argument" );
1373
if( self->texture->type == EXPP_TEX_TYPE_MUSGRAVE &&
1374
EXPP_map_getShortVal( tex_stype_map[EXPP_TEX_TYPE_DISTNOISE],
1375
nbasis, &self->texture->noisebasis ) );
1376
else if( self->texture->type == EXPP_TEX_TYPE_DISTNOISE &&
1377
!EXPP_map_getShortVal( tex_stype_map[EXPP_TEX_TYPE_DISTNOISE],
1378
nbasis, &self->texture->noisebasis2 ) )
1379
return EXPP_ReturnPyObjError( PyExc_ValueError,
1380
"invalid noise basis" );
1382
Py_INCREF( Py_None );
1386
/* Distorted Noise */
1387
static PyObject *Texture_setDistNoise( BPy_Texture * self, PyObject * args )
1391
if( !PyArg_ParseTuple( args, "s", &nbasis ) )
1392
return EXPP_ReturnPyObjError( PyExc_TypeError,
1393
"expected string argument" );
1394
if( self->texture->type == EXPP_TEX_TYPE_DISTNOISE &&
1395
!EXPP_map_getShortVal( tex_stype_map[EXPP_TEX_TYPE_DISTNOISE],
1396
nbasis, &self->texture->noisebasis ) )
1397
return EXPP_ReturnPyObjError( PyExc_ValueError,
1398
"invalid noise basis" );
1400
Py_INCREF( Py_None );
1404
static PyObject *Texture_setRepeat( BPy_Texture * self, PyObject * args )
1408
if( !PyArg_ParseTuple( args, "(ii)", &repeat[0], &repeat[1] ) )
1409
return EXPP_ReturnPyObjError( PyExc_TypeError,
1410
"expected tuple of 2 ints" );
1412
for( i = 0; i < 2; ++i )
1413
if( repeat[i] < 1 || repeat[i] > 512 )
1414
return EXPP_ReturnPyObjError( PyExc_ValueError,
1415
"values must be in range [1,512]" );
1417
self->texture->xrepeat = repeat[0];
1418
self->texture->yrepeat = repeat[1];
1420
Py_INCREF( Py_None );
1424
static PyObject *Texture_setRGBCol( BPy_Texture * self, PyObject * args )
1428
if( !PyArg_ParseTuple( args, "(fff)", &rgb[0], &rgb[1], &rgb[2] ) )
1429
return EXPP_ReturnPyObjError( PyExc_TypeError,
1430
"expected tuple of 3 floats" );
1432
for( i = 0; i < 3; ++i )
1433
if( rgb[i] < 0 || rgb[i] > 2 )
1434
return EXPP_ReturnPyObjError( PyExc_ValueError,
1435
"values must be in range [0,2]" );
1437
self->texture->rfac = rgb[0];
1438
self->texture->gfac = rgb[1];
1439
self->texture->bfac = rgb[2];
1441
Py_INCREF( Py_None );
1446
static PyObject *Texture_setSType( BPy_Texture * self, PyObject * args )
1449
if( !PyArg_ParseTuple( args, "s", &stype ) )
1450
return EXPP_ReturnPyObjError( PyExc_TypeError,
1451
"expected string argument" );
1453
/* can we really trust texture->type? */
1454
if( ( self->texture->type == EXPP_TEX_TYPE_VORONOI &&
1455
EXPP_map_getShortVal( tex_stype_map[self->texture->type],
1456
stype, &self->texture->vn_coltype ) ) );
1457
else if( ( self->texture->type == EXPP_TEX_TYPE_MUSGRAVE &&
1458
EXPP_map_getShortVal( tex_stype_map
1459
[EXPP_TEX_TYPE_DISTNOISE], stype,
1460
&self->texture->noisebasis ) ) );
1461
else if( ( self->texture->type == EXPP_TEX_TYPE_ENVMAP &&
1462
EXPP_map_getShortVal( tex_stype_map[self->texture->type],
1463
stype, &self->texture->env->stype ) ) );
1464
else if( !EXPP_map_getShortVal
1465
( tex_stype_map[self->texture->type], stype,
1466
&self->texture->stype ) )
1467
return EXPP_ReturnPyObjError( PyExc_ValueError,
1468
"invalid texture stype" );
1470
Py_INCREF( Py_None );
1474
static PyObject *Texture_setIntSType( BPy_Texture * self, PyObject * args )
1477
const char *dummy = NULL;
1478
if( !PyArg_ParseTuple( args, "i", &stype ) )
1479
return EXPP_ReturnPyObjError( PyExc_TypeError,
1480
"expected int argument" );
1482
/* use the stype map to find out if this is a valid stype for this type *
1483
* note that this will allow CLD_COLOR when type is ENVMAP. there's not *
1484
* much that we can do about this though. */
1485
if( !EXPP_map_getStrVal
1486
( tex_stype_map[self->texture->type], stype, &dummy ) )
1487
return EXPP_ReturnPyObjError( PyExc_ValueError,
1488
"invalid stype (for this type)" );
1490
if( self->texture->type == EXPP_TEX_TYPE_ENVMAP )
1491
self->texture->env->stype = stype;
1493
self->texture->stype = stype;
1495
Py_INCREF( Py_None );
1499
static PyObject *Texture_setTurbulence( BPy_Texture * self, PyObject * args )
1502
if( !PyArg_ParseTuple( args, "f", &turb ) )
1503
return EXPP_ReturnPyObjError( PyExc_TypeError,
1504
"expected a float" );
1506
if( turb < 0 || turb > 200 )
1507
return EXPP_ReturnPyObjError( PyExc_ValueError,
1508
"turbulence must be in range [0,200]" );
1510
self->texture->turbul = turb;
1512
Py_INCREF( Py_None );
1516
static PyObject *Texture_setType( BPy_Texture * self, PyObject * args )
1519
if( !PyArg_ParseTuple( args, "s", &type ) )
1520
return EXPP_ReturnPyObjError( PyExc_TypeError,
1521
"expected string argument" );
1523
if( !EXPP_map_getShortVal( tex_type_map, type, &self->texture->type ) )
1524
return EXPP_ReturnPyObjError( PyExc_ValueError,
1525
"invalid texture type" );
1527
Py_INCREF( Py_None );
1532
static PyObject *Texture_setHFrac( BPy_Texture * self, PyObject * args )
1535
if( !PyArg_ParseTuple( args, "f", &mg_H ) )
1536
return EXPP_ReturnPyObjError( PyExc_TypeError,
1537
"expected a float" );
1539
if( mg_H < 0 || mg_H > 2 )
1540
return EXPP_ReturnPyObjError( PyExc_ValueError,
1541
"turbulence must be in range [0,2]" );
1543
self->texture->mg_H = mg_H;
1545
Py_INCREF( Py_None );
1549
static PyObject *Texture_setLacunarity( BPy_Texture * self, PyObject * args )
1552
if( !PyArg_ParseTuple( args, "f", &mg_lac ) )
1553
return EXPP_ReturnPyObjError( PyExc_TypeError,
1554
"expected a float" );
1556
if( mg_lac < 0 || mg_lac > 6 )
1557
return EXPP_ReturnPyObjError( PyExc_ValueError,
1558
"lacunarity must be in range [0,6]" );
1560
self->texture->mg_lacunarity = mg_lac;
1562
Py_INCREF( Py_None );
1566
static PyObject *Texture_setOcts( BPy_Texture * self, PyObject * args )
1569
if( !PyArg_ParseTuple( args, "f", &mg_oct ) )
1570
return EXPP_ReturnPyObjError( PyExc_TypeError,
1571
"expected a float" );
1573
if( mg_oct < 0 || mg_oct > 8 )
1574
return EXPP_ReturnPyObjError( PyExc_ValueError,
1575
"turbulence must be in range [0,8]" );
1577
self->texture->mg_octaves = mg_oct;
1579
Py_INCREF( Py_None );
1583
static PyObject *Texture_setiScale( BPy_Texture * self, PyObject * args )
1586
if( !PyArg_ParseTuple( args, "f", &ns_osc ) )
1587
return EXPP_ReturnPyObjError( PyExc_TypeError,
1588
"expected a float" );
1590
if( ns_osc < 0 || ns_osc > 10 )
1591
return EXPP_ReturnPyObjError( PyExc_ValueError,
1592
"turbulence must be in range [0,10]" );
1594
self->texture->ns_outscale = ns_osc;
1596
Py_INCREF( Py_None );
1600
static PyObject *Texture_setIntType( BPy_Texture * self, PyObject * args )
1603
if( !PyArg_ParseTuple( args, "i", &type ) )
1604
return EXPP_ReturnPyObjError( PyExc_TypeError,
1605
"expected int argument" );
1607
if( type < EXPP_TEX_TYPE_MIN || type > EXPP_TEX_TYPE_MAX )
1608
return EXPP_ReturnPyObjError( PyExc_ValueError,
1609
"invalid type number" );
1611
self->texture->type = type;
1613
Py_INCREF( Py_None );
1617
static PyObject *Texture_setDistMetric( BPy_Texture * self, PyObject * args )
1621
if( !PyArg_ParseTuple( args, "s", &dist ) )
1622
return EXPP_ReturnPyObjError( PyExc_TypeError,
1623
"expected string argument" );
1624
/* can we really trust texture->type? */
1625
if( self->texture->type == EXPP_TEX_TYPE_VORONOI &&
1626
!EXPP_map_getShortVal( tex_stype_map[self->texture->type + 2],
1627
dist, &self->texture->vn_distm ) )
1628
return EXPP_ReturnPyObjError( PyExc_ValueError,
1629
"invalid dist metric type" );
1631
Py_INCREF( Py_None );
1635
static PyObject *Texture_setExp( BPy_Texture * self, PyObject * args )
1638
if( !PyArg_ParseTuple( args, "f", &vn_mexp ) )
1639
return EXPP_ReturnPyObjError( PyExc_TypeError,
1640
"expected a float" );
1642
if( vn_mexp < 0 || vn_mexp > 10 )
1643
return EXPP_ReturnPyObjError( PyExc_ValueError,
1644
"Exp must be in range [0,10]" );
1646
self->texture->vn_mexp = vn_mexp;
1648
Py_INCREF( Py_None );
1652
static PyObject *Texture_setW1( BPy_Texture * self, PyObject * args )
1655
if( !PyArg_ParseTuple( args, "f", &vn_w1 ) )
1656
return EXPP_ReturnPyObjError( PyExc_TypeError,
1657
"expected a float" );
1659
if( vn_w1 < -2 || vn_w1 > 2 )
1660
return EXPP_ReturnPyObjError( PyExc_ValueError,
1661
"Exp must be in range [0,10]" );
1663
self->texture->vn_w1 = vn_w1;
1665
Py_INCREF( Py_None );
1669
static PyObject *Texture_setW2( BPy_Texture * self, PyObject * args )
1672
if( !PyArg_ParseTuple( args, "f", &vn_w2 ) )
1673
return EXPP_ReturnPyObjError( PyExc_TypeError,
1674
"expected a float" );
1676
if( vn_w2 < -2 || vn_w2 > 2 )
1677
return EXPP_ReturnPyObjError( PyExc_ValueError,
1678
"Exp must be in range [0,10]" );
1680
self->texture->vn_w2 = vn_w2;
1682
Py_INCREF( Py_None );
1686
static PyObject *Texture_setW3( BPy_Texture * self, PyObject * args )
1689
if( !PyArg_ParseTuple( args, "f", &vn_w3 ) )
1690
return EXPP_ReturnPyObjError( PyExc_TypeError,
1691
"expected a float" );
1693
if( vn_w3 < -2 || vn_w3 > 2 )
1694
return EXPP_ReturnPyObjError( PyExc_ValueError,
1695
"Exp must be in range [0,10]" );
1697
self->texture->vn_w3 = vn_w3;
1699
Py_INCREF( Py_None );
1703
static PyObject *Texture_setW4( BPy_Texture * self, PyObject * args )
1706
if( !PyArg_ParseTuple( args, "f", &vn_w4 ) )
1707
return EXPP_ReturnPyObjError( PyExc_TypeError,
1708
"expected a float" );
1710
if( vn_w4 < -2 || vn_w4 > 2 )
1711
return EXPP_ReturnPyObjError( PyExc_ValueError,
1712
"Exp must be in range [0,10]" );
1714
self->texture->vn_w4 = vn_w4;
1716
Py_INCREF( Py_None );
1720
static PyObject *Texture_setDistAmnt( BPy_Texture * self, PyObject * args )
1723
if( !PyArg_ParseTuple( args, "f", &dist_amount ) )
1724
return EXPP_ReturnPyObjError( PyExc_TypeError,
1725
"expected a float" );
1727
if( dist_amount < 0 || dist_amount > 10 )
1728
return EXPP_ReturnPyObjError( PyExc_ValueError,
1729
"Exp must be in range [0,10]" );
1731
self->texture->dist_amount = dist_amount;
1733
Py_INCREF( Py_None );
1737
static void Texture_dealloc( BPy_Texture * self )
1739
PyObject_DEL( self );
1742
static PyObject *Texture_getAttr( BPy_Texture * self, char *name )
1744
PyObject *attr = Py_None;
1745
Tex *tex = self->texture;
1747
if( STREQ( name, "animFrames" ) )
1748
attr = PyInt_FromLong( tex->frames );
1749
else if( STREQ( name, "animLength" ) )
1750
attr = PyInt_FromLong( tex->len );
1751
else if( STREQ( name, "animMontage" ) )
1752
attr = Py_BuildValue( "((i,i),(i,i),(i,i),(i,i))",
1753
tex->fradur[0][0], tex->fradur[0][1],
1754
tex->fradur[1][0], tex->fradur[1][1],
1755
tex->fradur[2][0], tex->fradur[2][1],
1756
tex->fradur[3][0], tex->fradur[3][1] );
1757
else if( STREQ( name, "animOffset" ) )
1758
attr = PyInt_FromLong( tex->offset );
1759
else if( STREQ( name, "animStart" ) )
1760
attr = PyInt_FromLong( tex->sfra );
1761
else if( STREQ( name, "brightness" ) )
1762
attr = PyFloat_FromDouble( tex->bright );
1763
else if( STREQ( name, "contrast" ) )
1764
attr = PyFloat_FromDouble( tex->contrast );
1765
else if( STREQ( name, "crop" ) )
1766
attr = Py_BuildValue( "(f,f,f,f)", tex->cropxmin,
1767
tex->cropymin, tex->cropxmax,
1769
else if( STREQ( name, "extend" ) )
1770
attr = PyInt_FromLong( tex->extend );
1771
else if( STREQ( name, "fieldsPerImage" ) )
1772
attr = PyInt_FromLong( tex->fie_ima );
1773
else if( STREQ( name, "filterSize" ) )
1774
attr = PyFloat_FromDouble( tex->filtersize );
1775
else if( STREQ( name, "flags" ) )
1776
attr = PyInt_FromLong( tex->flag );
1777
else if( STREQ( name, "image" ) )
1778
attr = Texture_getImage( self );
1779
else if( STREQ( name, "imageFlags" ) )
1780
attr = PyInt_FromLong( tex->imaflag );
1781
else if( STREQ( name, "name" ) )
1782
attr = PyString_FromString( tex->id.name + 2 );
1783
else if( STREQ( name, "noiseDepth" ) )
1784
attr = PyInt_FromLong( tex->noisedepth );
1785
else if( STREQ( name, "noiseSize" ) )
1786
attr = PyFloat_FromDouble( tex->noisesize );
1787
else if( STREQ( name, "noiseType" ) ) {
1788
if( tex->noisetype == TEX_NOISESOFT )
1789
attr = PyString_FromString( "soft" );
1791
attr = PyString_FromString( "hard" );
1792
} else if( STREQ( name, "repeat" ) )
1793
attr = Py_BuildValue( "(i,i)", tex->xrepeat, tex->yrepeat );
1794
else if( STREQ( name, "rgbCol" ) )
1795
attr = Py_BuildValue( "(f,f,f)", tex->rfac, tex->gfac,
1797
else if( STREQ( name, "stype" ) )
1798
if( self->texture->type == EXPP_TEX_TYPE_ENVMAP )
1799
attr = PyInt_FromLong( tex->env->stype );
1801
attr = PyInt_FromLong( tex->stype );
1802
else if( STREQ( name, "turbulence" ) )
1803
attr = PyFloat_FromDouble( tex->turbul );
1804
else if( STREQ( name, "type" ) )
1805
attr = PyInt_FromLong( tex->type );
1806
else if( STREQ( name, "hFracDim" ) )
1807
attr = PyInt_FromLong( tex->mg_H );
1808
else if( STREQ( name, "lacunarity" ) )
1809
attr = PyFloat_FromDouble( tex->mg_lacunarity );
1810
else if( STREQ( name, "octs" ) )
1811
attr = PyFloat_FromDouble( tex->mg_octaves );
1812
else if( STREQ( name, "iSacale" ) )
1813
attr = PyFloat_FromDouble( tex->ns_outscale );
1814
else if( STREQ( name, "exp" ) )
1815
attr = PyFloat_FromDouble( tex->vn_mexp );
1816
else if( STREQ( name, "weight1" ) )
1817
attr = PyFloat_FromDouble( tex->vn_w1 );
1818
else if( STREQ( name, "weight2" ) )
1819
attr = PyFloat_FromDouble( tex->vn_w2 );
1820
else if( STREQ( name, "weight3" ) )
1821
attr = PyFloat_FromDouble( tex->vn_w3 );
1822
else if( STREQ( name, "weight4" ) )
1823
attr = PyFloat_FromDouble( tex->vn_w4 );
1824
else if( STREQ( name, "distAmnt" ) )
1825
attr = PyFloat_FromDouble( tex->vn_w4 );
1826
else if( STREQ( name, "users" ) )
1827
attr = PyInt_FromLong( tex->id.us );
1829
else if( STREQ( name, "__members__" ) )
1830
attr = Py_BuildValue
1831
( "[s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s]",
1832
"animFrames", "animLength", "animMontage",
1833
"animOffset", "animStart", "brightness", "contrast",
1834
"crop", "extend", "fieldsPerImage", "filterSize",
1835
"flags", "image", "imageFlags", "name", "noiseDepth",
1836
"noiseSize", "noiseType", "repeat", "rgbCol",
1837
"stype", "turbulence", "type", "hFracDim",
1838
"lacunarity", "octs", "iScale", "exp", "weight1",
1839
"weight2", "weight3", "weight4", "distAmnt", "users" );
1842
return EXPP_ReturnPyObjError( PyExc_MemoryError,
1843
"couldn't create PyObject" );
1845
if( attr != Py_None )
1846
return attr; /* member attribute found, return it */
1848
/* not an attribute, search the methods table */
1849
return Py_FindMethod( BPy_Texture_methods, ( PyObject * ) self, name );
1853
static int Texture_setAttr( BPy_Texture * self, char *name, PyObject * value )
1856
PyObject *error = NULL;
1858
/* Put "value" in a tuple, because we want to pass it to functions *
1859
* that only accept PyTuples. */
1860
valtuple = Py_BuildValue( "(O)", value );
1862
return EXPP_ReturnIntError( PyExc_MemoryError,
1863
"Texture_setAttr: couldn't create PyTuple" );
1865
if( STREQ( name, "animFrames" ) )
1866
error = Texture_setAnimFrames( self, valtuple );
1867
else if( STREQ( name, "animLength" ) )
1868
error = Texture_setAnimLength( self, valtuple );
1869
else if( STREQ( name, "animMontage" ) )
1870
error = Texture_setAnimMontage( self, valtuple );
1871
else if( STREQ( name, "animOffset" ) )
1872
error = Texture_setAnimOffset( self, valtuple );
1873
else if( STREQ( name, "animStart" ) )
1874
error = Texture_setAnimStart( self, valtuple );
1875
else if( STREQ( name, "brightness" ) )
1876
error = Texture_setBrightness( self, valtuple );
1877
else if( STREQ( name, "contrast" ) )
1878
error = Texture_setContrast( self, valtuple );
1879
else if( STREQ( name, "crop" ) )
1880
error = Texture_setCrop( self, valtuple );
1881
else if( STREQ( name, "extend" ) )
1882
error = Texture_setIntExtend( self, valtuple );
1883
else if( STREQ( name, "fieldsPerImage" ) )
1884
error = Texture_setFieldsPerImage( self, valtuple );
1885
else if( STREQ( name, "filterSize" ) )
1886
error = Texture_setFilterSize( self, valtuple );
1887
else if( STREQ( name, "flags" ) )
1888
error = Texture_setIntFlags( self, valtuple );
1889
else if( STREQ( name, "image" ) )
1890
error = Texture_setImage( self, valtuple );
1891
else if( STREQ( name, "imageFlags" ) )
1892
error = Texture_setIntImageFlags( self, valtuple );
1893
else if( STREQ( name, "name" ) )
1894
error = Texture_setName( self, valtuple );
1895
else if( STREQ( name, "noiseDepth" ) )
1896
error = Texture_setNoiseDepth( self, valtuple );
1897
else if( STREQ( name, "noiseSize" ) )
1898
error = Texture_setNoiseSize( self, valtuple );
1899
else if( STREQ( name, "noiseType" ) )
1900
error = Texture_setNoiseType( self, valtuple );
1901
else if( STREQ( name, "repeat" ) )
1902
error = Texture_setRepeat( self, valtuple );
1903
else if( STREQ( name, "rgbCol" ) )
1904
error = Texture_setRGBCol( self, valtuple );
1905
else if( STREQ( name, "stype" ) )
1906
error = Texture_setIntSType( self, valtuple );
1907
else if( STREQ( name, "turbulence" ) )
1908
error = Texture_setTurbulence( self, valtuple );
1909
else if( STREQ( name, "type" ) )
1910
error = Texture_setIntType( self, valtuple );
1911
else if( STREQ( name, "hFracDim" ) )
1912
error = Texture_setHFrac( self, valtuple );
1913
else if( STREQ( name, "lacunarity" ) )
1914
error = Texture_setLacunarity( self, valtuple );
1915
else if( STREQ( name, "octs" ) )
1916
error = Texture_setOcts( self, valtuple );
1917
else if( STREQ( name, "iScale" ) )
1918
error = Texture_setiScale( self, valtuple );
1919
else if( STREQ( name, "exp" ) )
1920
error = Texture_setExp( self, valtuple );
1921
else if( STREQ( name, "weight1" ) )
1922
error = Texture_setW1( self, valtuple );
1923
else if( STREQ( name, "weight2" ) )
1924
error = Texture_setW2( self, valtuple );
1925
else if( STREQ( name, "weight3" ) )
1926
error = Texture_setW3( self, valtuple );
1927
else if( STREQ( name, "weight4" ) )
1928
error = Texture_setW4( self, valtuple );
1929
else if( STREQ( name, "distAmnt" ) )
1930
error = Texture_setDistAmnt( self, valtuple );
1935
Py_DECREF( valtuple );
1936
return EXPP_ReturnIntError( PyExc_KeyError,
1937
"attribute not found" );
1940
Py_DECREF( valtuple );
1942
if( error != Py_None )
1945
/* Py_None was INCREF'd by the set*() function, so we need to DECREF it */
1946
Py_DECREF( Py_None );
1951
static int Texture_compare( BPy_Texture * a, BPy_Texture * b )
1953
return ( a->texture == b->texture ) ? 0 : -1;
1956
static PyObject *Texture_repr( BPy_Texture * self )
1958
return PyString_FromFormat( "[Texture \"%s\"]",
1959
self->texture->id.name + 2 );
1962
static PyObject *Texture_getIpo( BPy_Texture * self )
1964
struct Ipo *ipo = self->texture->ipo;
1967
Py_INCREF( Py_None );
1971
return Ipo_CreatePyObject( ipo );
1974
extern PyTypeObject Ipo_Type;
1976
static PyObject *Texture_setIpo( BPy_Texture * self, PyObject * args )
1978
PyObject *pyipo = 0;
1982
if( !PyArg_ParseTuple( args, "O!", &Ipo_Type, &pyipo ) )
1983
return EXPP_ReturnPyObjError( PyExc_TypeError,
1984
"expected Ipo as argument" );
1986
ipo = Ipo_FromPyObject( pyipo );
1989
return EXPP_ReturnPyObjError( PyExc_RuntimeError,
1992
if( ipo->blocktype != ID_TE )
1993
return EXPP_ReturnPyObjError( PyExc_TypeError,
1994
"this ipo is not a texture data ipo" );
1996
oldipo = self->texture->ipo;
1998
ID *id = &oldipo->id;
2003
( ( ID * ) & ipo->id )->us++;
2005
self->texture->ipo = ipo;
2007
Py_INCREF( Py_None );
2011
static PyObject *Texture_clearIpo( BPy_Texture * self )
2013
Tex *tex = self->texture;
2014
Ipo *ipo = ( Ipo * ) tex->ipo;
2022
return EXPP_incr_ret_True();
2025
return EXPP_incr_ret_False(); /* no ipo found */