[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20096] trunk/blender/source: [#18645] Texture painting smudge brush darkens images - 2.49RC1

Campbell Barton ideasman42 at gmail.com
Thu May 7 16:53:40 CEST 2009


Revision: 20096
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20096
Author:   campbellbarton
Date:     2009-05-07 16:53:40 +0200 (Thu, 07 May 2009)

Log Message:
-----------
[#18645] Texture painting smudge brush darkens images - 2.49RC1
not fixed but the problem is now less bad when projection painting, bilinear interpolation was rounding down.
- added gameOb.attrDict to get the internal gameObject dict.
- mesh.getVertex wasnt setting an exception.

Modified Paths:
--------------
    trunk/blender/source/blender/imbuf/intern/imageprocess.c
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.cpp
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/blender/imbuf/intern/imageprocess.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/imageprocess.c	2009-05-07 09:52:36 UTC (rev 20095)
+++ trunk/blender/source/blender/imbuf/intern/imageprocess.c	2009-05-07 14:53:40 UTC (rev 20096)
@@ -294,10 +294,12 @@
 		b= v-floor(v);
 		a_b= a*b; ma_b= (1.0f-a)*b; a_mb= a*(1.0f-b); ma_mb= (1.0f-a)*(1.0f-b);
 		
-		outI[0]= ma_mb*row1I[0] + a_mb*row3I[0] + ma_b*row2I[0]+ a_b*row4I[0];
-		outI[1]= ma_mb*row1I[1] + a_mb*row3I[1] + ma_b*row2I[1]+ a_b*row4I[1];
-		outI[2]= ma_mb*row1I[2] + a_mb*row3I[2] + ma_b*row2I[2]+ a_b*row4I[2];
-		outI[3]= ma_mb*row1I[3] + a_mb*row3I[3] + ma_b*row2I[3]+ a_b*row4I[3];
+		/* need to add 0.5 to avoid rounding down (causes darken with the smear brush)
+		 * tested with white images and this should not wrap back to zero */
+		outI[0]= (ma_mb*row1I[0] + a_mb*row3I[0] + ma_b*row2I[0]+ a_b*row4I[0]) + 0.5f;
+		outI[1]= (ma_mb*row1I[1] + a_mb*row3I[1] + ma_b*row2I[1]+ a_b*row4I[1]) + 0.5f;
+		outI[2]= (ma_mb*row1I[2] + a_mb*row3I[2] + ma_b*row2I[2]+ a_b*row4I[2]) + 0.5f;
+		outI[3]= (ma_mb*row1I[3] + a_mb*row3I[3] + ma_b*row2I[3]+ a_b*row4I[3]) + 0.5f;
 	}
 }
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2009-05-07 09:52:36 UTC (rev 20095)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2009-05-07 14:53:40 UTC (rev 20096)
@@ -1208,6 +1208,7 @@
 	KX_PYATTRIBUTE_RW_FUNCTION("worldPosition",	KX_GameObject, pyattr_get_worldPosition,    pyattr_set_worldPosition),
 	KX_PYATTRIBUTE_RW_FUNCTION("localScaling",	KX_GameObject, pyattr_get_localScaling,	pyattr_set_localScaling),
 	KX_PYATTRIBUTE_RO_FUNCTION("worldScaling",	KX_GameObject, pyattr_get_worldScaling),
+	KX_PYATTRIBUTE_RO_FUNCTION("attrDict",	KX_GameObject, pyattr_get_attrDict),
 	
 	/* Experemental, dont rely on these yet */
 	KX_PYATTRIBUTE_RO_FUNCTION("sensors",		KX_GameObject, pyattr_get_sensors),
@@ -1766,6 +1767,17 @@
 	return resultlist;
 }
 
+PyObject* KX_GameObject::pyattr_get_attrDict(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+	KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+	
+	if(self->m_attr_dict==NULL)
+		self->m_attr_dict= PyDict_New();
+	
+	Py_INCREF(self->m_attr_dict);
+	return self->m_attr_dict;
+}
+
 /* We need these because the macros have a return in them */
 PyObject* KX_GameObject::py_getattro__internal(PyObject *attr)
 {

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2009-05-07 09:52:36 UTC (rev 20095)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2009-05-07 14:53:40 UTC (rev 20096)
@@ -895,6 +895,7 @@
 	static PyObject*	pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	static int			pyattr_set_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
 	static PyObject*	pyattr_get_meshes(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+	static PyObject*	pyattr_get_attrDict(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 	
 	/* Experemental! */
 	static PyObject*	pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);

Modified: trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.cpp	2009-05-07 09:52:36 UTC (rev 20095)
+++ trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.cpp	2009-05-07 14:53:40 UTC (rev 20096)
@@ -221,24 +221,21 @@
 
 PyObject* KX_MeshProxy::PyGetVertex(PyObject* args, PyObject* kwds)
 {
-    int vertexindex= 1;
-	int matindex= 1;
+    int vertexindex;
+	int matindex;
 	PyObject* vertexob = NULL;
 
-	if (PyArg_ParseTuple(args,"ii:getVertex",&matindex,&vertexindex))
-	{
-		RAS_TexVert* vertex = m_meshobj->GetVertex(matindex,vertexindex);
-		if (vertex)
-		{
-			vertexob = (new KX_VertexProxy(this, vertex))->NewProxy(true);
-		}
-	}
-	else {
+	if (!PyArg_ParseTuple(args,"ii:getVertex",&matindex,&vertexindex))
 		return NULL;
+	
+	RAS_TexVert* vertex = m_meshobj->GetVertex(matindex,vertexindex);
+	
+	if(vertex==NULL) {
+		PyErr_SetString(PyExc_ValueError, "mesh.getVertex(mat_idx, vert_idx): KX_MeshProxy, could not get a vertex at the given indicies");
+		return NULL;
 	}
-
-	return vertexob;
-		
+	
+	return (new KX_VertexProxy(this, vertex))->NewProxy(true);
 }
 
 PyObject* KX_MeshProxy::PyGetPolygon(PyObject* args, PyObject* kwds)

Modified: trunk/blender/source/gameengine/PyDoc/KX_GameObject.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2009-05-07 09:52:36 UTC (rev 20095)
+++ trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2009-05-07 14:53:40 UTC (rev 20096)
@@ -79,6 +79,8 @@
 		- note: This attribute is experemental and may be removed (but probably wont be).
 		- note: Changes to this list will not update the KX_GameObject.
 	@type actuators: list
+	@ivar attrDict: get the objects internal python attribute dictionary for direct (faster) access.
+	@type attrDict: dict
 	@group Deprecated: getPosition, setPosition, setWorldPosition, getOrientation, setOrientation, getState, setState, getParent, getVisible, getMass, getMesh
 	"""
 	def endObject():





More information about the Bf-blender-cvs mailing list