[Bf-blender-cvs] [fb0dd59] master: BGE : KX_VertexProxy support for more than 2 UV channel.

Porteries Tristan noreply at git.blender.org
Wed May 6 22:57:22 CEST 2015


Commit: fb0dd596e9a58f095730359a11759c40ea46be44
Author: Porteries Tristan
Date:   Wed May 6 22:55:46 2015 +0200
Branches: master
https://developer.blender.org/rBfb0dd596e9a58f095730359a11759c40ea46be44

BGE : KX_VertexProxy support for more than 2 UV channel.

I have added an optional named "index" argument for methode get/setUV, I have also modified the and set to deprecated methodes setUV2 and getUV2 : the doc was wrong and the methode can't be called anyway because it declared as VARARG in the .h and convert directly the args value to a vector in the .cpp.

Reviewers: sybren, lordloki, hg1

Reviewed By: lordloki, hg1

Subscribers: agoose77

Differential Revision: https://developer.blender.org/D1240

===================================================================

M	doc/python_api/rst/bge_types/bge.types.KX_VertexProxy.rst
M	source/gameengine/Ketsji/KX_VertexProxy.cpp
M	source/gameengine/Ketsji/KX_VertexProxy.h

===================================================================

diff --git a/doc/python_api/rst/bge_types/bge.types.KX_VertexProxy.rst b/doc/python_api/rst/bge_types/bge.types.KX_VertexProxy.rst
index 73d6927..d1bd675 100644
--- a/doc/python_api/rst/bge_types/bge.types.KX_VertexProxy.rst
+++ b/doc/python_api/rst/bge_types/bge.types.KX_VertexProxy.rst
@@ -25,6 +25,12 @@ base class --- :class:`SCA_IObject`
 
       :type: Vector((u, v))
 
+   .. attribute:: uvs
+
+      A list of all the texture coordinates of the vertex.
+
+      :type: list of Vector((u, v))
+
    .. attribute:: normal
 
       The normal of the vertex.
@@ -120,18 +126,24 @@ base class --- :class:`SCA_IObject`
 
       :arg pos: the new position for this vertex in local coordinates.
 
-   .. method:: getUV()
+   .. method:: getUV(index=0)
 
       Gets the UV (texture) coordinates of this vertex.
 
+      :arg index: the UV (texture) channel (optional).
+      :type index: integer
+
       :return: this vertexes UV (texture) coordinates.
       :rtype: Vector((u, v))
 
-   .. method:: setUV(uv)
+   .. method:: setUV(uv, index=0)
 
       Sets the UV (texture) coordinates of this vertex.
 
-      :type:  Vector((u, v))
+      :arg uv: the UV (texture) coordinate of this vertex.
+      :type uv: Vector((u, v))
+      :arg index: the UV (texture) channel (optional).
+      :type index: integer
 
    .. method:: getUV2()
 
@@ -140,14 +152,16 @@ base class --- :class:`SCA_IObject`
       :return: this vertexes UV (texture) coordinates.
       :rtype: Vector((u, v))
 
-   .. method:: setUV2(uv, unit)
+      .. deprecated:: use :meth:`getUV`
+
+   .. method:: setUV2(uv)
 
       Sets the 2nd UV (texture) coordinates of this vertex.
 
-      :type:  Vector((u, v))
+      :arg uv: the 2nd (texture) UV coordinate of this vertex.
+      :type uv: Vector((u, v))
 
-      :arg unit: optional argument, FLAT==1, SECOND_UV==2, defaults to SECOND_UV
-      :arg unit:  integer
+      .. deprecated:: use :meth:`setUV`
 
    .. method:: getRGBA()
 
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index cd1c9ee..1634165 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -63,11 +63,11 @@ PyTypeObject KX_VertexProxy::Type = {
 PyMethodDef KX_VertexProxy::Methods[] = {
 	{"getXYZ", (PyCFunction)KX_VertexProxy::sPyGetXYZ,METH_NOARGS},
 	{"setXYZ", (PyCFunction)KX_VertexProxy::sPySetXYZ,METH_O},
-	{"getUV", (PyCFunction)KX_VertexProxy::sPyGetUV1, METH_NOARGS},
-	{"setUV", (PyCFunction)KX_VertexProxy::sPySetUV1, METH_O},
+	{"getUV", (PyCFunction)KX_VertexProxy::sPyGetUV, METH_VARARGS},
+	{"setUV", (PyCFunction)KX_VertexProxy::sPySetUV, METH_VARARGS},
 
 	{"getUV2", (PyCFunction)KX_VertexProxy::sPyGetUV2,METH_NOARGS},
-	{"setUV2", (PyCFunction)KX_VertexProxy::sPySetUV2,METH_VARARGS},
+	{"setUV2", (PyCFunction)KX_VertexProxy::sPySetUV2, METH_O},
 
 	{"getRGBA", (PyCFunction)KX_VertexProxy::sPyGetRGBA,METH_NOARGS},
 	{"setRGBA", (PyCFunction)KX_VertexProxy::sPySetRGBA,METH_O},
@@ -423,7 +423,6 @@ int KX_VertexProxy::pyattr_set_uvs(void *self_v, const struct KX_PYATTRIBUTE_DEF
 			if (PyVecTo(PySequence_GetItem(value, i), vec))
 			{
 				self->m_vertex->SetUV(i, vec);
-				self->m_mesh->SetMeshModified(true);
 			}
 			else
 			{
@@ -559,25 +558,45 @@ PyObject *KX_VertexProxy::PySetRGBA(PyObject *value)
 	return NULL;
 }
 
-
-PyObject *KX_VertexProxy::PyGetUV1()
+PyObject *KX_VertexProxy::PyGetUV(PyObject *args)
 {
-	return PyObjectFrom(MT_Vector2(m_vertex->getUV(0)));
+	int index = 0;
+	if (!PyArg_ParseTuple(args, "|i:getUV", &index))
+		return NULL;
+
+	if (index < 0 || index > (RAS_TexVert::MAX_UNIT - 1)) {
+		PyErr_Format(PyExc_TypeError, "vert.getUV(index): KX_VertexProxy, expected an int between 0 and %i", (RAS_TexVert::MAX_UNIT - 1));
+		return NULL;
+	}
+
+	return PyObjectFrom(MT_Vector2(m_vertex->getUV(index)));
 }
 
-PyObject *KX_VertexProxy::PySetUV1(PyObject *value)
+PyObject *KX_VertexProxy::PySetUV(PyObject *args)
 {
+	PyObject *pyvect;
+	int index = 0;
+	if (!PyArg_ParseTuple(args, "O|i:setUV", &pyvect, &index))
+		return NULL;
+
+	if (index < 0 || index > (RAS_TexVert::MAX_UNIT - 1)) {
+		PyErr_Format(PyExc_TypeError, "vert.setUV(uv, index): KX_VertexProxy, expected an int between 0 and %i", (RAS_TexVert::MAX_UNIT - 1));
+		return NULL;
+	}
+
 	MT_Point2 vec;
-	if (!PyVecTo(value, vec))
+	if (!PyVecTo(pyvect, vec))
 		return NULL;
 
-	m_vertex->SetUV(0, vec);
+	m_vertex->SetUV(index, vec);
 	m_mesh->SetMeshModified(true);
 	Py_RETURN_NONE;
 }
 
 PyObject *KX_VertexProxy::PyGetUV2()
 {
+	ShowDeprecationWarning("getUV2()", "getUV(1)");
+
 	return PyObjectFrom(MT_Vector2(m_vertex->getUV(1)));
 }
 
@@ -587,6 +606,8 @@ PyObject *KX_VertexProxy::PySetUV2(PyObject *args)
 	if (!PyVecTo(args, vec))
 		return NULL;
 
+	ShowDeprecationWarning("setUV2(uv)", "setUV(uv, 1)");
+
 	m_vertex->SetUV(1, vec);
 	m_mesh->SetMeshModified(true);
 	Py_RETURN_NONE;
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h
index 8070825..91cf29d 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.h
+++ b/source/gameengine/Ketsji/KX_VertexProxy.h
@@ -94,11 +94,11 @@ public:
 
 	KX_PYMETHOD_NOARGS(KX_VertexProxy,GetXYZ);
 	KX_PYMETHOD_O(KX_VertexProxy,SetXYZ);
-	KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV1);
-	KX_PYMETHOD_O(KX_VertexProxy,SetUV1);
+	KX_PYMETHOD_VARARGS(KX_VertexProxy, GetUV);
+	KX_PYMETHOD_VARARGS(KX_VertexProxy, SetUV);
 	
 	KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV2);
-	KX_PYMETHOD_VARARGS(KX_VertexProxy,SetUV2);
+	KX_PYMETHOD_O(KX_VertexProxy, SetUV2);
 
 	KX_PYMETHOD_NOARGS(KX_VertexProxy,GetRGBA);
 	KX_PYMETHOD_O(KX_VertexProxy,SetRGBA);




More information about the Bf-blender-cvs mailing list