[Bf-blender-cvs] [5f3ae1c] particles_refactor: Unused RNA code for exposing particles directly in the state as a collection. This doesn't work atm because for lookup it would need to allocate a particle iterator, which can not be freed afterward. This can probably be done nicer as a pure python wrapper instead of RNA.
Lukas Tönne
noreply at git.blender.org
Tue Apr 22 12:05:51 CEST 2014
Commit: 5f3ae1c0d6bff85f155ed810dc33503e6b5f9c67
Author: Lukas Tönne
Date: Mon Dec 16 18:09:05 2013 +0100
https://developer.blender.org/rB5f3ae1c0d6bff85f155ed810dc33503e6b5f9c67
Unused RNA code for exposing particles directly in the state as a
collection. This doesn't work atm because for lookup it would need to
allocate a particle iterator, which can not be freed afterward. This
can probably be done nicer as a pure python wrapper instead of RNA.
===================================================================
M source/blender/makesrna/intern/rna_nparticle.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_nparticle.c b/source/blender/makesrna/intern/rna_nparticle.c
index 844670e..7caeebf 100644
--- a/source/blender/makesrna/intern/rna_nparticle.c
+++ b/source/blender/makesrna/intern/rna_nparticle.c
@@ -264,6 +264,64 @@ int rna_NParticleState_attributes_lookup_string(PointerRNA *ptr, const char *key
}
+#if 0
+static void rna_NParticleState_particles_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ NParticleState *state = ptr->data;
+ NParticleIterator *piter = MEM_callocN(sizeof(NParticleIterator), "particle iterator");
+
+ BKE_nparticle_iter_init(state, piter);
+ iter->internal = piter;
+ iter->valid
+}
+
+static void rna_NParticleState_particles_next(CollectionPropertyIterator *iter)
+{
+ NParticleState *state = iter->ptr.data;
+ NParticleIterator *piter = iter->internal;
+ BKE_nparticle_iter_next(piter);
+ iter->valid = BKE_nparticle_iter_valid(piter);
+}
+
+static void rna_NParticleState_particles_end(CollectionPropertyIterator *iter)
+{
+ MEM_freeN(iter->internal);
+ iter->internal = NULL;
+}
+
+static PointerRNA rna_NParticleState_particles_get(CollectionPropertyIterator *iter)
+{
+ NParticleIterator *piter = iter->internal;
+ PointerRNA ptr;
+ RNA_pointer_create(iter->ptr.id.data, &RNA_NParticleIterator, piter, &ptr);
+ return ptr;
+}
+
+static int rna_NParticleState_particles_length(PointerRNA *ptr)
+{
+ NParticleState *state = ptr->data;
+ NParticleAttributeState *attrstate = BKE_nparticle_state_find_attribute(state, "id");
+ if (attrstate)
+ return attrstate->data.totelem;
+ else
+ return 0;
+}
+
+int rna_NParticleState_particles_lookup_int(PointerRNA *ptr, int key, PointerRNA *r_ptr)
+{
+ /* XXX this is a problem: we cannot return a particle iterator here because
+ * PointerRNA can only reference data that exists permanently in the DNA ...
+ */
+ NParticleState *state = ptr->data;
+ BKE_nparticle_iter_find_id(state, , NParticleID id)
+ BKE_nparticle_
+ void *data = BLI_pbuf_get(&state->data, key);
+ RNA_pointer_create(ptr->id.data, data_srna, data, r_ptr);
+ return true;
+}
+#endif
+
+
static NParticleAttribute *rna_NParticleSystem_attributes_new(NParticleSystem *psys, ReportList *reports, const char *name, int datatype)
{
if (BKE_nparticle_attribute_find(psys, name)) {
@@ -454,6 +512,15 @@ static void rna_def_nparticle_attribute_state(BlenderRNA *brna)
#undef DEF_ATTR_TYPE_RNA
}
+static void rna_def_nparticle_iterator(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "NParticleIterator", NULL);
+ RNA_def_struct_ui_text(srna, "Particle Iterator", "Access iterator for individual particles");
+}
+
static void rna_def_nparticle_state(BlenderRNA *brna)
{
StructRNA *srna;
@@ -469,6 +536,16 @@ static void rna_def_nparticle_state(BlenderRNA *brna)
"rna_NParticleState_attributes_lookup_string", NULL);
RNA_def_property_ui_text(prop, "Attributes", "Data layers associated to particles");
RNA_def_property_struct_type(prop, "NParticleAttributeState");
+
+#if 0
+ prop = RNA_def_property(srna, "particles", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, "NParticleIterator");
+ RNA_def_property_ui_text(prop, "Particles", "");
+ RNA_def_property_collection_funcs(prop, "rna_NParticleState_particles_begin", "rna_NParticleState_particles_next",
+ "rna_NParticleState_particles_end", "rna_NParticleState_particles_get",
+ "rna_NParticleState_particles_length", "rna_NParticleState_particles_lookup_int",
+ NULL, NULL);
+#endif
}
@@ -547,6 +624,7 @@ static void rna_def_nparticle_system(BlenderRNA *brna)
void RNA_def_nparticle(BlenderRNA *brna)
{
rna_def_nparticle_attribute_state(brna);
+ rna_def_nparticle_iterator(brna);
rna_def_nparticle_state(brna);
rna_def_nparticle_attribute(brna);
rna_def_nparticle_system(brna);
More information about the Bf-blender-cvs
mailing list