[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