Revision: 49228
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49228
Author:   moguri
Date:     2012-07-25 20:51:04 +0000 (Wed, 25 Jul 2012)
Log Message:
-----------
Adding a new uvs attribute to KX_VertexProxy that returns a list of uvs for the 
vertex. This is currently the only way to access uv layers >2 via Python.

Modified Paths:
--------------
    branches/soc-2012-swiss_cheese/doc/python_api/rst/bge.types.rst
    branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.cpp
    branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.h

Modified: branches/soc-2012-swiss_cheese/doc/python_api/rst/bge.types.rst
===================================================================
--- branches/soc-2012-swiss_cheese/doc/python_api/rst/bge.types.rst     
2012-07-25 20:39:49 UTC (rev 49227)
+++ branches/soc-2012-swiss_cheese/doc/python_api/rst/bge.types.rst     
2012-07-25 20:51:04 UTC (rev 49228)
@@ -3518,7 +3518,13 @@
       The alpha component of the vertex color. 0.0 <= a <= 1.0.
 
       :type: float
+         
+   .. attribute:: uvs
 
+      A list of uvs for the vertex.
+         
+         :type: list [[u1, v1], [u2, v2], ...]
+
    .. method:: getXYZ()
 
       Gets the position of this vertex.

Modified: 
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.cpp  
2012-07-25 20:39:49 UTC (rev 49227)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.cpp  
2012-07-25 20:51:04 UTC (rev 49228)
@@ -94,6 +94,7 @@
 
        KX_PYATTRIBUTE_RW_FUNCTION("XYZ", KX_VertexProxy, pyattr_get_XYZ, 
pyattr_set_XYZ),
        KX_PYATTRIBUTE_RW_FUNCTION("UV", KX_VertexProxy, pyattr_get_UV, 
pyattr_set_UV),
+       KX_PYATTRIBUTE_RW_FUNCTION("uvs", KX_VertexProxy, pyattr_get_uvs, 
pyattr_set_uvs),
 
        KX_PYATTRIBUTE_RW_FUNCTION("color", KX_VertexProxy, pyattr_get_color, 
pyattr_set_color),
        KX_PYATTRIBUTE_RW_FUNCTION("normal", KX_VertexProxy, pyattr_get_normal, 
pyattr_set_normal),
@@ -179,6 +180,19 @@
        return PyObjectFrom(MT_Point2(self->m_vertex->getUV(0)));
 }
 
+PyObject* KX_VertexProxy::pyattr_get_uvs(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
+{
+       KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+       
+       PyObject* uvlist = PyList_New(RAS_TexVert::MAX_UNIT);
+       for (int i=0; i<RAS_TexVert::MAX_UNIT; ++i)
+       {
+               PyList_SET_ITEM(uvlist, i, 
PyObjectFrom(MT_Point2(self->m_vertex->getUV(i))));
+       }
+
+       return uvlist;
+}
+
 PyObject* KX_VertexProxy::pyattr_get_color(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef)
 {
        KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
@@ -399,6 +413,32 @@
        return PY_SET_ATTR_FAIL;
 }
 
+int KX_VertexProxy::pyattr_set_uvs(void *self_v, const struct 
KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+       KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+       if (PySequence_Check(value))
+       {
+               MT_Point2 vec;
+               for (int i=0; i<PySequence_Size(value) && 
i<RAS_TexVert::MAX_UNIT; ++i)
+               {
+                       if (PyVecTo(PySequence_GetItem(value, i), vec))
+                       {
+                               self->m_vertex->SetUV(i, vec);
+                               self->m_mesh->SetMeshModified(true);
+                       }
+                       else
+                       {
+                               PyErr_SetString(PyExc_AttributeError, 
STR_String().Format("list[%d] was not a vector", i).ReadPtr());
+                               return PY_SET_ATTR_FAIL;
+                       }
+               }
+               
+               self->m_mesh->SetMeshModified(true);
+               return PY_SET_ATTR_SUCCESS;
+       }
+       return PY_SET_ATTR_FAIL;
+}
+
 int KX_VertexProxy::pyattr_set_color(void *self_v, const struct 
KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
 {
        KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);

Modified: 
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.h    
2012-07-25 20:39:49 UTC (rev 49227)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_VertexProxy.h    
2012-07-25 20:51:04 UTC (rev 49228)
@@ -72,6 +72,7 @@
        static PyObject* pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef);
        static PyObject* pyattr_get_XYZ(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef);
        static PyObject* pyattr_get_UV(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef);
+       static PyObject* pyattr_get_uvs(void *self_v, const KX_PYATTRIBUTE_DEF 
*attrdef);
        static PyObject* pyattr_get_color(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef);
        static PyObject* pyattr_get_normal(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef);
        static int pyattr_set_x(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
@@ -87,6 +88,7 @@
        static int pyattr_set_a(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
        static int pyattr_set_XYZ(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
        static int pyattr_set_UV(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
+       static int pyattr_set_uvs(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
        static int pyattr_set_color(void *self, const struct KX_PYATTRIBUTE_DEF 
*attrdef, PyObject *value);
        static int pyattr_set_normal(void *self, const struct 
KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to