[Bf-blender-cvs] [c7f285c] particles_refactor: Iterator access functions for particles.

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


Commit: c7f285ca10200e375bd5c809c4f79c53e842fd92
Author: Lukas Tönne
Date:   Mon Dec 16 10:35:25 2013 +0100
https://developer.blender.org/rBc7f285ca10200e375bd5c809c4f79c53e842fd92

Iterator access functions for particles.

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

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

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

diff --git a/source/blender/blenkernel/BKE_nparticle.h b/source/blender/blenkernel/BKE_nparticle.h
index 5a51eae..3effd1d 100644
--- a/source/blender/blenkernel/BKE_nparticle.h
+++ b/source/blender/blenkernel/BKE_nparticle.h
@@ -55,15 +55,18 @@ int BKE_nparticle_find_index(struct NParticleSystem *psys, NParticleID id);
 bool BKE_nparticle_exists(struct NParticleSystem *psys, NParticleID id);
 
 typedef struct NParticleIterator {
+	struct NParticleSystem *psys;
 	int index;
 } NParticleIterator;
 
 void BKE_nparticle_iter_init(struct NParticleSystem *psys, struct NParticleIterator *it);
-void BKE_nparticle_iter_next(struct NParticleSystem *psys, struct NParticleIterator *it);
-bool BKE_nparticle_iter_valid(struct NParticleSystem *psys, struct NParticleIterator *it);
+void BKE_nparticle_iter_next(struct NParticleIterator *it);
+bool BKE_nparticle_iter_valid(struct NParticleIterator *it);
 
-float BKE_nparticle_state_get_float(struct NParticleState *state, NParticleID pid, const char *attr);
-void BKE_nparticle_state_set_float(struct NParticleState *state, NParticleID pid, const char *attr, float value);
+int BKE_nparticle_iter_get_int(struct NParticleIterator *it, const char *attr);
+void BKE_nparticle_iter_set_int(struct NParticleIterator *it, const char *attr, int value);
+float BKE_nparticle_iter_get_float(struct NParticleIterator *it, const char *attr);
+void BKE_nparticle_iter_set_float(struct NParticleIterator *it, const char *attr, float value);
 
 #if 0 /* old code */
 #include "BLI_math.h"
diff --git a/source/blender/blenkernel/intern/nparticle.c b/source/blender/blenkernel/intern/nparticle.c
index 7442d08..c121db3 100644
--- a/source/blender/blenkernel/intern/nparticle.c
+++ b/source/blender/blenkernel/intern/nparticle.c
@@ -228,24 +228,64 @@ bool BKE_nparticle_exists(NParticleSystem *psys, NParticleID id)
 	return BKE_nparticle_find_index(psys, id) != -1;
 }
 
-void BKE_nparticle_iter_init(NParticleSystem *UNUSED(psys), NParticleIterator *it)
+
+void BKE_nparticle_iter_init(NParticleSystem *psys, NParticleIterator *it)
 {
+	it->psys = psys;
 	it->index = 0;
 }
 
-void BKE_nparticle_iter_next(NParticleSystem *UNUSED(psys), NParticleIterator *it)
+void BKE_nparticle_iter_next(NParticleIterator *it)
 {
 	++it->index;
 }
 
-bool BKE_nparticle_iter_valid(NParticleSystem *psys, NParticleIterator *it)
+bool BKE_nparticle_iter_valid(NParticleIterator *it)
 {
-	NParticleAttribute *attr_id = psys->attribute_id;
+	NParticleAttribute *attr_id = it->psys->attribute_id;
 	BLI_assert(attr_id);
 	return attr_id->state ? it->index < attr_id->state->data.totelem : false;
 }
 
 
+BLI_INLINE void *nparticle_data_ptr(NParticleSystem *psys, const char *attr_, eParticleAttributeDataType datatype, int index)
+{
+	NParticleAttribute *attr = BKE_nparticle_attribute_find(psys, attr_);
+	if (attr && attr->state) {
+		BLI_assert(attr->desc.datatype == datatype);
+		return BLI_pbuf_get(&attr->state->data, index);
+	}
+	else
+		return NULL;
+}
+
+int BKE_nparticle_iter_get_int(NParticleIterator *it, const char *attr)
+{
+	int *data = nparticle_data_ptr(it->psys, attr, PAR_ATTR_DATATYPE_INT, it->index);
+	return data ? *data : 0;
+}
+
+void BKE_nparticle_iter_set_int(NParticleIterator *it, const char *attr, int value)
+{
+	int *data = nparticle_data_ptr(it->psys, attr, PAR_ATTR_DATATYPE_INT, it->index);
+	if (data)
+		*data = value;
+}
+
+float BKE_nparticle_iter_get_float(NParticleIterator *it, const char *attr)
+{
+	float *data = nparticle_data_ptr(it->psys, attr, PAR_ATTR_DATATYPE_FLOAT, it->index);
+	return data ? *data : 0.0f;
+}
+
+void BKE_nparticle_iter_set_float(NParticleIterator *it, const char *attr, float value)
+{
+	float *data = nparticle_data_ptr(it->psys, attr, PAR_ATTR_DATATYPE_FLOAT, it->index);
+	if (data)
+		*data = value;
+}
+
+
 #if 0 /* old code */
 #include <assert.h>
 #include <stdlib.h>
diff --git a/source/blender/makesdna/DNA_nparticle_types.h b/source/blender/makesdna/DNA_nparticle_types.h
index e137be5..8b8a7da 100644
--- a/source/blender/makesdna/DNA_nparticle_types.h
+++ b/source/blender/makesdna/DNA_nparticle_types.h
@@ -39,7 +39,7 @@ typedef struct NParticleAttributeDescription {
 } NParticleAttributeDescription;
 
 /* particle attribute types */
-enum NParticleAttributeDataType {
+typedef enum eParticleAttributeDataType {
 	PAR_ATTR_DATATYPE_INTERNAL		= 0,	/* for static attributes with special types */
 	PAR_ATTR_DATATYPE_FLOAT			= 1,
 	PAR_ATTR_DATATYPE_INT			= 2,
@@ -49,7 +49,7 @@ enum NParticleAttributeDataType {
 	PAR_ATTR_DATATYPE_NORMAL		= 6,
 	PAR_ATTR_DATATYPE_COLOR			= 7,
 	PAR_ATTR_DATATYPE_MATRIX		= 8
-};
+} eParticleAttributeDataType;
 
 typedef struct NParticleAttributeState {
 	bPagedBuffer data;




More information about the Bf-blender-cvs mailing list