157
172
rasty->SetLines(true);
159
174
rasty->SetLines(false);
175
rasty->SetSpecularity(m_specular[0],m_specular[1],m_specular[2],m_specularity);
176
rasty->SetShinyness(m_shininess);
177
rasty->SetDiffuse(m_diffuse[0], m_diffuse[1],m_diffuse[2], 1.0);
179
rasty->SetPolygonOffset(-m_material->zoffs, 0.0);
162
rasty->SetSpecularity(m_specular[0],m_specular[1],m_specular[2],m_specularity);
163
rasty->SetShinyness(m_shininess);
164
rasty->SetDiffuse(m_diffuse[0], m_diffuse[1],m_diffuse[2], 1.0);
166
rasty->SetPolygonOffset(-m_material->zoffs, 0.0);
182
//rasty->SetSpecularity(m_specular[0],m_specular[1],m_specular[2],m_specularity);
183
//rasty->SetShinyness(m_shininess);
184
//rasty->SetDiffuse(m_diffuse[0], m_diffuse[1],m_diffuse[2], 1.0);
186
// rasty->SetPolygonOffset(-m_material->zoffs, 0.0);
189
void KX_PolygonMaterial::GetMaterialRGBAColor(unsigned char *rgba) const
192
*rgba++ = (unsigned char) (m_material->r*255.0);
193
*rgba++ = (unsigned char) (m_material->g*255.0);
194
*rgba++ = (unsigned char) (m_material->b*255.0);
195
*rgba++ = (unsigned char) (m_material->alpha*255.0);
197
RAS_IPolyMaterial::GetMaterialRGBAColor(rgba);
169
201
//----------------------------------------------------------------------------
180
212
{NULL,NULL} //Sentinel
215
PyAttributeDef KX_PolygonMaterial::Attributes[] = {
216
KX_PYATTRIBUTE_RO_FUNCTION("texture", KX_PolygonMaterial, pyattr_get_texture),
217
KX_PYATTRIBUTE_RO_FUNCTION("material", KX_PolygonMaterial, pyattr_get_material), /* should probably be .name ? */
219
KX_PYATTRIBUTE_INT_RW("tile", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_tile),
220
KX_PYATTRIBUTE_INT_RW("tilexrep", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_tilexrep),
221
KX_PYATTRIBUTE_INT_RW("tileyrep", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_tileyrep),
222
KX_PYATTRIBUTE_INT_RW("drawingmode", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_drawingmode),
223
//KX_PYATTRIBUTE_INT_RW("lightlayer", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_lightlayer),
225
KX_PYATTRIBUTE_BOOL_RW("transparent", KX_PolygonMaterial, m_alpha),
226
KX_PYATTRIBUTE_BOOL_RW("zsort", KX_PolygonMaterial, m_zsort),
228
KX_PYATTRIBUTE_FLOAT_RW("shininess", 0.0f, 1000.0f, KX_PolygonMaterial, m_shininess),
229
KX_PYATTRIBUTE_FLOAT_RW("specularity", 0.0f, 1000.0f, KX_PolygonMaterial, m_specularity),
231
KX_PYATTRIBUTE_RW_FUNCTION("diffuse", KX_PolygonMaterial, pyattr_get_texture, pyattr_set_diffuse),
232
KX_PYATTRIBUTE_RW_FUNCTION("specular",KX_PolygonMaterial, pyattr_get_specular, pyattr_set_specular),
234
KX_PYATTRIBUTE_RO_FUNCTION("tface", KX_PolygonMaterial, pyattr_get_tface), /* How the heck is this even useful??? - Campbell */
235
KX_PYATTRIBUTE_RO_FUNCTION("gl_texture", KX_PolygonMaterial, pyattr_get_gl_texture), /* could be called 'bindcode' */
237
/* triangle used to be an attribute, removed for 2.49, nobody should be using it */
184
241
PyTypeObject KX_PolygonMaterial::Type = {
185
PyObject_HEAD_INIT(&PyType_Type)
242
#if (PY_VERSION_HEX >= 0x02060000)
243
PyVarObject_HEAD_INIT(NULL, 0)
245
/* python 2.5 and below */
246
PyObject_HEAD_INIT( NULL ) /* required py macro */
187
249
"KX_PolygonMaterial",
188
sizeof(KX_PolygonMaterial),
196
0 //&cvalue_as_number,
250
sizeof(PyObjectPlus_Proxy),
199
265
PyParentObject KX_PolygonMaterial::Parents[] = {
266
&KX_PolygonMaterial::Type,
200
267
&PyObjectPlus::Type,
201
&KX_PolygonMaterial::Type,
205
PyObject* KX_PolygonMaterial::_getattr(const STR_String& attr)
207
if (attr == "texture")
208
return PyString_FromString(m_texturename.ReadPtr());
209
if (attr == "material")
210
return PyString_FromString(m_materialname.ReadPtr());
213
return PyCObject_FromVoidPtr(m_tface, NULL);
215
if (attr == "gl_texture")
217
Image *ima = m_tface->tpage;
220
bind = ima->bindcode;
222
return PyInt_FromLong(bind);
226
return PyInt_FromLong(m_tile);
227
if (attr == "tilexrep")
228
return PyInt_FromLong(m_tilexrep);
229
if (attr == "tileyrep")
230
return PyInt_FromLong(m_tileyrep);
232
if (attr == "drawingmode")
233
return PyInt_FromLong(m_drawingmode);
234
if (attr == "transparent")
235
return PyInt_FromLong(m_alpha);
237
return PyInt_FromLong(m_zsort);
238
if (attr == "lightlayer")
239
return PyInt_FromLong(m_lightlayer);
240
if (attr == "triangle")
241
// deprecated, triangle/quads shouldn't have been a material property
244
if (attr == "diffuse")
245
return PyObjectFrom(m_diffuse);
246
if (attr == "shininess")
247
return PyFloat_FromDouble(m_shininess);
248
if (attr == "specular")
249
return PyObjectFrom(m_specular);
250
if (attr == "specularity")
251
return PyFloat_FromDouble(m_specularity);
253
_getattr_up(PyObjectPlus);
256
int KX_PolygonMaterial::_setattr(const STR_String &attr, PyObject *pyvalue)
258
if (PyFloat_Check(pyvalue))
260
float value = PyFloat_AsDouble(pyvalue);
261
if (attr == "shininess")
267
if (attr == "specularity")
269
m_specularity = value;
274
if (PyInt_Check(pyvalue))
276
int value = PyInt_AsLong(pyvalue);
283
if (attr == "tilexrep")
289
if (attr == "tileyrep")
295
if (attr == "drawingmode")
297
m_drawingmode = value;
301
if (attr == "transparent")
313
if (attr == "lightlayer")
315
m_lightlayer = value;
319
// This probably won't work...
320
if (attr == "triangle")
322
// deprecated, triangle/quads shouldn't have been a material property
327
if (PySequence_Check(pyvalue))
329
if (PySequence_Size(pyvalue) == 3)
332
if (PyVecTo(pyvalue, value))
334
if (attr == "diffuse")
340
if (attr == "specular")
349
return PyObjectPlus::_setattr(attr, pyvalue);
271
PyObject* KX_PolygonMaterial::py_getattro(PyObject *attr)
273
py_getattro_up(PyObjectPlus);
276
PyObject* KX_PolygonMaterial::py_getattro_dict() {
277
py_getattro_dict_up(PyObjectPlus);
280
int KX_PolygonMaterial::py_setattro(PyObject *attr, PyObject *value)
282
py_setattro_up(PyObjectPlus);
352
285
KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setCustomMaterial, "setCustomMaterial(material)")
354
287
PyObject *material;
355
if (PyArg_ParseTuple(args, "O", &material))
288
if (PyArg_ParseTuple(args, "O:setCustomMaterial", &material))
358
291
Py_DECREF(m_pymaterial);
360
293
m_pymaterial = material;
361
294
Py_INCREF(m_pymaterial);
397
330
KX_PYMETHODDEF_DOC(KX_PolygonMaterial, activate, "activate(rasty, cachingInfo)")
399
332
PyObject *pyrasty, *pyCachingInfo;
400
if (PyArg_ParseTuple(args, "O!O!", &PyCObject_Type, &pyrasty, &PyCObject_Type, &pyCachingInfo))
333
if (PyArg_ParseTuple(args, "O!O!:activate", &PyCObject_Type, &pyrasty, &PyCObject_Type, &pyCachingInfo))
402
335
RAS_IRasterizer *rasty = static_cast<RAS_IRasterizer*>(PyCObject_AsVoidPtr(pyrasty));
403
336
TCachingInfo *cachingInfo = static_cast<TCachingInfo*>(PyCObject_AsVoidPtr(pyCachingInfo));
404
337
if (rasty && cachingInfo)
406
339
DefaultActivate(rasty, *cachingInfo);
347
PyObject* KX_PolygonMaterial::pyattr_get_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
349
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
350
return PyString_FromString(self->m_texturename.ReadPtr());
353
PyObject* KX_PolygonMaterial::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
355
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
356
return PyString_FromString(self->m_materialname.ReadPtr());
359
/* this does not seem useful */
360
PyObject* KX_PolygonMaterial::pyattr_get_tface(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
362
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
363
return PyCObject_FromVoidPtr(self->m_tface, NULL);
366
PyObject* KX_PolygonMaterial::pyattr_get_gl_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
368
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
370
if (self->m_tface && self->m_tface->tpage)
371
bindcode= self->m_tface->tpage->bindcode;
373
return PyInt_FromLong(bindcode);
377
PyObject* KX_PolygonMaterial::pyattr_get_diffuse(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
379
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
380
return PyObjectFrom(self->m_diffuse);
383
int KX_PolygonMaterial::pyattr_set_diffuse(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
385
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
388
if (!PyVecTo(value, vec))
389
return PY_SET_ATTR_FAIL;
391
self->m_diffuse= vec;
392
return PY_SET_ATTR_SUCCESS;
395
PyObject* KX_PolygonMaterial::pyattr_get_specular(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
397
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
398
return PyObjectFrom(self->m_specular);
401
int KX_PolygonMaterial::pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
403
KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
406
if (!PyVecTo(value, vec))
407
return PY_SET_ATTR_FAIL;
409
self->m_specular= vec;
410
return PY_SET_ATTR_SUCCESS;