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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Mueller <nexyon@gmail.com>2010-08-16 16:14:09 +0400
committerJoerg Mueller <nexyon@gmail.com>2010-08-16 16:14:09 +0400
commit0be08725adec7659ca612e2d068e62d4d7a926c6 (patch)
tree3b2c827a67432387148dc9b3c7def927e9116cfd /source/gameengine/Ketsji/KX_PolyProxy.cpp
parent25fec1592efade86233c0ba71212dc973b618ad1 (diff)
Py API (GSoC): Second merging commit
Rough summary of fixes/changes: - Blender Py API: GameLogic -> bge.logic - Blender Py API: Implemented missing KX_PYATTRIBUTE_TODOs and -DUMMYs. - Fix for [#22924] KX_PolygonMaterial.diffuse does not return expected list[r,g,b] - Py API: Renaming _owner attribute of mathutils classes to owner. - Fix some minor errors in mathutils and blf. - Enabling game engine autoplay again based on a patch by Dalai: * The biggest 3D view in the open scene is used, if there is none, blender opens the file normally and raises an error. * The 3D view are is made fullscreen. * Quad view, header, properties and toolbox panel are all hidden to get the maximum view. * If the game engine full screen setting is set, the game starts in fullscreen. - Fix for ipo conversion on file transition in the game engine.
Diffstat (limited to 'source/gameengine/Ketsji/KX_PolyProxy.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.cpp161
1 files changed, 79 insertions, 82 deletions
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp
index 837c79c77b3..9395e57e68b 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.cpp
+++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp
@@ -72,90 +72,19 @@ PyMethodDef KX_PolyProxy::Methods[] = {
};
PyAttributeDef KX_PolyProxy::Attributes[] = {
- /* All dummy's so they come up in a dir() */
- //KX_PYATTRIBUTE_TODO("DummyProps"),
- KX_PYATTRIBUTE_DUMMY("matname"),
- KX_PYATTRIBUTE_DUMMY("texture"),
- KX_PYATTRIBUTE_DUMMY("material"),
- KX_PYATTRIBUTE_DUMMY("matid"),
- KX_PYATTRIBUTE_DUMMY("v1"),
- KX_PYATTRIBUTE_DUMMY("v2"),
- KX_PYATTRIBUTE_DUMMY("v3"),
- KX_PYATTRIBUTE_DUMMY("v4"),
- KX_PYATTRIBUTE_DUMMY("visible"),
- KX_PYATTRIBUTE_DUMMY("collide"),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_name", KX_PolyProxy, pyattr_get_material_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("texture_name", KX_PolyProxy, pyattr_get_texture_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("material", KX_PolyProxy, pyattr_get_material),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_id", KX_PolyProxy, pyattr_get_material_id),
+ KX_PYATTRIBUTE_RO_FUNCTION("v1", KX_PolyProxy, pyattr_get_v1),
+ KX_PYATTRIBUTE_RO_FUNCTION("v2", KX_PolyProxy, pyattr_get_v2),
+ KX_PYATTRIBUTE_RO_FUNCTION("v3", KX_PolyProxy, pyattr_get_v3),
+ KX_PYATTRIBUTE_RO_FUNCTION("v4", KX_PolyProxy, pyattr_get_v4),
+ KX_PYATTRIBUTE_RO_FUNCTION("visible", KX_PolyProxy, pyattr_get_visible),
+ KX_PYATTRIBUTE_RO_FUNCTION("collide", KX_PolyProxy, pyattr_get_collide),
{ NULL } //Sentinel
};
-#if 0
-PyObject* KX_PolyProxy::py_getattro(PyObject *attr)
-{
- char *attr_str= _PyUnicode_AsString(attr);
- if (!strcmp(attr_str, "matname"))
- {
- return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName());
- }
- if (!strcmp(attr_str, "texture"))
- {
- return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName());
- }
- if (!strcmp(attr_str, "material"))
- {
- RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial();
- if(polymat->GetFlag() & RAS_BLENDERMAT)
- {
- KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
- return mat->GetProxy();
- }
- else
- {
- KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
- return mat->GetProxy();
- }
- }
- if (!strcmp(attr_str, "matid"))
- {
- // we'll have to scan through the material bucket of the mes and compare with
- // the one of the polygon
- RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
- unsigned int matid;
- for (matid=0; matid<(unsigned int)m_mesh->NumMaterials(); matid++)
- {
- RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
- if (meshMat->m_bucket == polyBucket)
- // found it
- break;
- }
- return PyLong_FromSsize_t(matid);
- }
- if (!strcmp(attr_str, "v1"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 0));
- }
- if (!strcmp(attr_str, "v2"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 1));
- }
- if (!strcmp(attr_str, "v3"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 2));
- }
- if (!strcmp(attr_str, "v4"))
- {
- return PyLong_FromSsize_t(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffsetAbs(m_mesh, 3):0));
- }
- if (!strcmp(attr_str, "visible"))
- {
- return PyLong_FromSsize_t(m_polygon->IsVisible());
- }
- if (!strcmp(attr_str, "collide"))
- {
- return PyLong_FromSsize_t(m_polygon->IsCollider());
- }
- // py_getattro_up(CValue); // XXX -- todo, make all these attributes
-}
-#endif
-
KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon)
: m_polygon(polygon),
m_mesh((RAS_MeshObject*)mesh)
@@ -179,7 +108,75 @@ CValue* KX_PolyProxy::GetReplica() { return NULL;}
// stuff for python integration
-KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
+PyObject* KX_PolyProxy::pyattr_get_material_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterialName();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_texture_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetTextureName();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterial();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_material_id(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterialIndex();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v1(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 0));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 1));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v3(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 2));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v4(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ if (3 < self->m_polygon->VertexCount())
+ {
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 3));
+ }
+ return PyLong_FromSsize_t(0);
+}
+
+PyObject* KX_PolyProxy::pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PyisVisible();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_collide(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PyisCollider();
+}
+
+KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
"getMaterialIndex() : return the material index of the polygon in the mesh\n")
{
RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();