[Bf-blender-cvs] [137fa8a] particles_refactor: Sensible default value support for particle attributes. Some data types (normal, color, quaternion, matrix) get common default values, others are just 0 and have to be defined by the user if necessary.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:07:06 CEST 2014


Commit: 137fa8a40b8cfbf2c5fe4e2ccc6a602e754ba6a6
Author: Lukas Tönne
Date:   Fri Jan 3 17:21:47 2014 +0100
https://developer.blender.org/rB137fa8a40b8cfbf2c5fe4e2ccc6a602e754ba6a6

Sensible default value support for particle attributes. Some data types
(normal, color, quaternion, matrix) get common default values, others
are just 0 and have to be defined by the user if necessary.

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

M	source/blender/blenkernel/intern/nparticle.c
M	source/blender/makesdna/DNA_nparticle_types.h

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

diff --git a/source/blender/blenkernel/intern/nparticle.c b/source/blender/blenkernel/intern/nparticle.c
index 8daffc0..310d15d 100644
--- a/source/blender/blenkernel/intern/nparticle.c
+++ b/source/blender/blenkernel/intern/nparticle.c
@@ -316,6 +316,23 @@ NParticleAttribute *BKE_nparticle_attribute_new(NParticleSystem *psys, const cha
 	BLI_strncpy(attr->desc.name, name, sizeof(attr->desc.name));
 	attr->desc.datatype = datatype;
 	attr->desc.flag = flag;
+	/* some data types should have more usable defaults
+	 * without explicitly setting them.
+	 */
+	switch (datatype) {
+		case PAR_ATTR_DATATYPE_NORMAL:
+			((float*)attr->desc.default_value)[2] = 1.0f;
+			break;
+		case PAR_ATTR_DATATYPE_QUATERNION:
+			unit_qt((float*)attr->desc.default_value);
+			break;
+		case PAR_ATTR_DATATYPE_COLOR:
+			((float*)attr->desc.default_value)[3] = 1.0f;
+			break;
+		case PAR_ATTR_DATATYPE_MATRIX:
+			unit_m4((float(*)[4])attr->desc.default_value);
+			break;
+	}
 	
 	BLI_addtail(&psys->attributes, attr);
 	
@@ -461,8 +478,7 @@ int BKE_nparticle_add(NParticleState *state, NParticleID id)
 				*(int*)BLI_pbuf_get(&attrstate->data, index) = (int)id;
 			}
 			else {
-				/* XXX default value? */
-				memset(BLI_pbuf_get(&attrstate->data, index), 0, attrstate->data.elem_bytes);
+				memcpy(BLI_pbuf_get(&attrstate->data, index), attrstate->desc.default_value, attrstate->data.elem_bytes);
 			}
 		}
 	}
diff --git a/source/blender/makesdna/DNA_nparticle_types.h b/source/blender/makesdna/DNA_nparticle_types.h
index a980d6e..8fedec5 100644
--- a/source/blender/makesdna/DNA_nparticle_types.h
+++ b/source/blender/makesdna/DNA_nparticle_types.h
@@ -36,6 +36,8 @@ typedef struct NParticleAttributeDescription {
 	char name[64];
 	int datatype;
 	int flag;
+	
+	char default_value[64];
 } NParticleAttributeDescription;
 
 typedef enum eParticleAttributeFlag {




More information about the Bf-blender-cvs mailing list