Changeset View
Standalone View
source/blender/makesrna/intern/rna_depsgraph.c
| Show All 37 Lines | ||||||||||
| # include "DEG_depsgraph_build.h" | # include "DEG_depsgraph_build.h" | |||||||||
| # include "DEG_depsgraph_debug.h" | # include "DEG_depsgraph_debug.h" | |||||||||
| # include "DEG_depsgraph_query.h" | # include "DEG_depsgraph_query.h" | |||||||||
| # include "MEM_guardedalloc.h" | # include "MEM_guardedalloc.h" | |||||||||
| /* **************** Object Instance **************** */ | /* **************** Object Instance **************** */ | |||||||||
| typedef struct RNA_DepsgraphIterator { | ||||||||||
| BLI_Iterator iter; | ||||||||||
| # ifdef WITH_PYTHON | ||||||||||
| /** | ||||||||||
| * This is defined is so the Python object can be set as freed once iteration is completed. | ||||||||||
mont29: `defined so that it can` ? | ||||||||||
Done Inline ActionsNope, not done :P mont29: Nope, not done :P | ||||||||||
Done Inline ActionsThought the re-wording addressed your comment, re-worked again for better clarity. campbellbarton: Thought the re-wording addressed your comment, re-worked again for better clarity. | ||||||||||
Not Done Inline Actions
Damn never saw there was a 'suggest edit', much easier to communicate! mont29: Damn never saw there was a 'suggest edit', much easier to communicate! | ||||||||||
| * Otherwise accessing from Python (console auto-complete for e.g.) crashes, see: T100286. */ | ||||||||||
| void *py_instance; | ||||||||||
| # endif | ||||||||||
| } RNA_DepsgraphIterator; | ||||||||||
| # ifdef WITH_PYTHON | ||||||||||
| void **rna_DepsgraphIterator_instance(PointerRNA *ptr) | ||||||||||
| { | ||||||||||
| RNA_DepsgraphIterator *di = ptr->data; | ||||||||||
| return &di->py_instance; | ||||||||||
| } | ||||||||||
| # endif | ||||||||||
| static PointerRNA rna_DepsgraphObjectInstance_object_get(PointerRNA *ptr) | static PointerRNA rna_DepsgraphObjectInstance_object_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| return rna_pointer_inherit_refine(ptr, &RNA_Object, iterator->current); | return rna_pointer_inherit_refine(ptr, &RNA_Object, di->iter.current); | |||||||||
| } | } | |||||||||
| static int rna_DepsgraphObjectInstance_is_instance_get(PointerRNA *ptr) | static int rna_DepsgraphObjectInstance_is_instance_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| return (deg_iter->dupli_object_current != NULL); | return (deg_iter->dupli_object_current != NULL); | |||||||||
| } | } | |||||||||
| static PointerRNA rna_DepsgraphObjectInstance_instance_object_get(PointerRNA *ptr) | static PointerRNA rna_DepsgraphObjectInstance_instance_object_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| Object *instance_object = NULL; | Object *instance_object = NULL; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| instance_object = deg_iter->dupli_object_current->ob; | instance_object = deg_iter->dupli_object_current->ob; | |||||||||
| } | } | |||||||||
| return rna_pointer_inherit_refine(ptr, &RNA_Object, instance_object); | return rna_pointer_inherit_refine(ptr, &RNA_Object, instance_object); | |||||||||
| } | } | |||||||||
| static bool rna_DepsgraphObjectInstance_show_self_get(PointerRNA *ptr) | static bool rna_DepsgraphObjectInstance_show_self_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| int ob_visibility = BKE_object_visibility(iterator->current, deg_iter->eval_mode); | int ob_visibility = BKE_object_visibility(di->iter.current, deg_iter->eval_mode); | |||||||||
| return (ob_visibility & OB_VISIBLE_SELF) != 0; | return (ob_visibility & OB_VISIBLE_SELF) != 0; | |||||||||
| } | } | |||||||||
| static bool rna_DepsgraphObjectInstance_show_particles_get(PointerRNA *ptr) | static bool rna_DepsgraphObjectInstance_show_particles_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| int ob_visibility = BKE_object_visibility(iterator->current, deg_iter->eval_mode); | int ob_visibility = BKE_object_visibility(di->iter.current, deg_iter->eval_mode); | |||||||||
| return (ob_visibility & OB_VISIBLE_PARTICLES) != 0; | return (ob_visibility & OB_VISIBLE_PARTICLES) != 0; | |||||||||
| } | } | |||||||||
| static PointerRNA rna_DepsgraphObjectInstance_parent_get(PointerRNA *ptr) | static PointerRNA rna_DepsgraphObjectInstance_parent_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| Object *dupli_parent = NULL; | Object *dupli_parent = NULL; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| dupli_parent = deg_iter->dupli_parent; | dupli_parent = deg_iter->dupli_parent; | |||||||||
| } | } | |||||||||
| return rna_pointer_inherit_refine(ptr, &RNA_Object, dupli_parent); | return rna_pointer_inherit_refine(ptr, &RNA_Object, dupli_parent); | |||||||||
| } | } | |||||||||
| static PointerRNA rna_DepsgraphObjectInstance_particle_system_get(PointerRNA *ptr) | static PointerRNA rna_DepsgraphObjectInstance_particle_system_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| struct ParticleSystem *particle_system = NULL; | struct ParticleSystem *particle_system = NULL; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| particle_system = deg_iter->dupli_object_current->particle_system; | particle_system = deg_iter->dupli_object_current->particle_system; | |||||||||
| } | } | |||||||||
| return rna_pointer_inherit_refine(ptr, &RNA_ParticleSystem, particle_system); | return rna_pointer_inherit_refine(ptr, &RNA_ParticleSystem, particle_system); | |||||||||
| } | } | |||||||||
| static void rna_DepsgraphObjectInstance_persistent_id_get(PointerRNA *ptr, int *persistent_id) | static void rna_DepsgraphObjectInstance_persistent_id_get(PointerRNA *ptr, int *persistent_id) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| memcpy(persistent_id, | memcpy(persistent_id, | |||||||||
| deg_iter->dupli_object_current->persistent_id, | deg_iter->dupli_object_current->persistent_id, | |||||||||
| sizeof(deg_iter->dupli_object_current->persistent_id)); | sizeof(deg_iter->dupli_object_current->persistent_id)); | |||||||||
| } | } | |||||||||
| else { | else { | |||||||||
| memset(persistent_id, 0, sizeof(deg_iter->dupli_object_current->persistent_id)); | memset(persistent_id, 0, sizeof(deg_iter->dupli_object_current->persistent_id)); | |||||||||
| } | } | |||||||||
| } | } | |||||||||
| static unsigned int rna_DepsgraphObjectInstance_random_id_get(PointerRNA *ptr) | static unsigned int rna_DepsgraphObjectInstance_random_id_get(PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| return deg_iter->dupli_object_current->random_id; | return deg_iter->dupli_object_current->random_id; | |||||||||
| } | } | |||||||||
| else { | else { | |||||||||
| return 0; | return 0; | |||||||||
| } | } | |||||||||
| } | } | |||||||||
| static void rna_DepsgraphObjectInstance_matrix_world_get(PointerRNA *ptr, float *mat) | static void rna_DepsgraphObjectInstance_matrix_world_get(PointerRNA *ptr, float *mat) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| copy_m4_m4((float(*)[4])mat, deg_iter->dupli_object_current->mat); | copy_m4_m4((float(*)[4])mat, deg_iter->dupli_object_current->mat); | |||||||||
| } | } | |||||||||
| else { | else { | |||||||||
| /* We can return actual object's matrix here, no reason to return identity matrix | /* We can return actual object's matrix here, no reason to return identity matrix | |||||||||
| * when this is not actually an instance... */ | * when this is not actually an instance... */ | |||||||||
| Object *ob = (Object *)iterator->current; | Object *ob = (Object *)di->iter.current; | |||||||||
| copy_m4_m4((float(*)[4])mat, ob->obmat); | copy_m4_m4((float(*)[4])mat, ob->obmat); | |||||||||
| } | } | |||||||||
| } | } | |||||||||
| static void rna_DepsgraphObjectInstance_orco_get(PointerRNA *ptr, float *orco) | static void rna_DepsgraphObjectInstance_orco_get(PointerRNA *ptr, float *orco) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| copy_v3_v3(orco, deg_iter->dupli_object_current->orco); | copy_v3_v3(orco, deg_iter->dupli_object_current->orco); | |||||||||
| } | } | |||||||||
| else { | else { | |||||||||
| zero_v3(orco); | zero_v3(orco); | |||||||||
| } | } | |||||||||
| } | } | |||||||||
| static void rna_DepsgraphObjectInstance_uv_get(PointerRNA *ptr, float *uv) | static void rna_DepsgraphObjectInstance_uv_get(PointerRNA *ptr, float *uv) | |||||||||
| { | { | |||||||||
| BLI_Iterator *iterator = ptr->data; | RNA_DepsgraphIterator *di = ptr->data; | |||||||||
| DEGObjectIterData *deg_iter = (DEGObjectIterData *)iterator->data; | DEGObjectIterData *deg_iter = (DEGObjectIterData *)di->iter.data; | |||||||||
| if (deg_iter->dupli_object_current != NULL) { | if (deg_iter->dupli_object_current != NULL) { | |||||||||
| copy_v2_v2(uv, deg_iter->dupli_object_current->uv); | copy_v2_v2(uv, deg_iter->dupli_object_current->uv); | |||||||||
| } | } | |||||||||
| else { | else { | |||||||||
| zero_v2(uv); | zero_v2(uv); | |||||||||
| } | } | |||||||||
| } | } | |||||||||
| ▲ Show 20 Lines • Show All 143 Lines • ▼ Show 20 Lines | ||||||||||
| * Contains extra information about duplicator and persistent ID. | * Contains extra information about duplicator and persistent ID. | |||||||||
| */ | */ | |||||||||
| /* XXX Ugly python seems to query next item of an iterator before using current one (see T57558). | /* XXX Ugly python seems to query next item of an iterator before using current one (see T57558). | |||||||||
| * This forces us to use that nasty ping-pong game between two sets of iterator data, | * This forces us to use that nasty ping-pong game between two sets of iterator data, | |||||||||
| * so that previous one remains valid memory for python to access to. Yuck. | * so that previous one remains valid memory for python to access to. Yuck. | |||||||||
| */ | */ | |||||||||
| typedef struct RNA_Depsgraph_Instances_Iterator { | typedef struct RNA_Depsgraph_Instances_Iterator { | |||||||||
| BLI_Iterator iterators[2]; | RNA_DepsgraphIterator iterators[2]; | |||||||||
| DEGObjectIterData deg_data[2]; | DEGObjectIterData deg_data[2]; | |||||||||
| DupliObject dupli_object_current[2]; | DupliObject dupli_object_current[2]; | |||||||||
| int counter; | int counter; | |||||||||
| } RNA_Depsgraph_Instances_Iterator; | } RNA_Depsgraph_Instances_Iterator; | |||||||||
| static void rna_Depsgraph_object_instances_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) | static void rna_Depsgraph_object_instances_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| RNA_Depsgraph_Instances_Iterator *di_it = iter->internal.custom = MEM_callocN(sizeof(*di_it), | RNA_Depsgraph_Instances_Iterator *di_it = iter->internal.custom = MEM_callocN(sizeof(*di_it), | |||||||||
| __func__); | __func__); | |||||||||
| DEGObjectIterData *data = &di_it->deg_data[0]; | DEGObjectIterData *data = &di_it->deg_data[0]; | |||||||||
| data->graph = (Depsgraph *)ptr->data; | data->graph = (Depsgraph *)ptr->data; | |||||||||
| data->flag = DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET | | data->flag = DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET | | |||||||||
| DEG_ITER_OBJECT_FLAG_VISIBLE | DEG_ITER_OBJECT_FLAG_DUPLI; | DEG_ITER_OBJECT_FLAG_VISIBLE | DEG_ITER_OBJECT_FLAG_DUPLI; | |||||||||
| di_it->iterators[0].valid = true; | di_it->iterators[0].iter.valid = true; | |||||||||
| DEG_iterator_objects_begin(&di_it->iterators[0], data); | DEG_iterator_objects_begin(&di_it->iterators[0].iter, data); | |||||||||
| iter->valid = di_it->iterators[0].valid; | iter->valid = di_it->iterators[0].iter.valid; | |||||||||
| } | } | |||||||||
| static void rna_Depsgraph_object_instances_next(CollectionPropertyIterator *iter) | static void rna_Depsgraph_object_instances_next(CollectionPropertyIterator *iter) | |||||||||
| { | { | |||||||||
| RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *) | RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *) | |||||||||
| iter->internal.custom; | iter->internal.custom; | |||||||||
| /* We need to copy current iterator status to next one being worked on. */ | /* We need to copy current iterator status to next one being worked on. */ | |||||||||
| di_it->iterators[(di_it->counter + 1) % 2] = di_it->iterators[di_it->counter % 2]; | di_it->iterators[(di_it->counter + 1) % 2].iter = di_it->iterators[di_it->counter % 2].iter; | |||||||||
| di_it->deg_data[(di_it->counter + 1) % 2] = di_it->deg_data[di_it->counter % 2]; | di_it->deg_data[(di_it->counter + 1) % 2] = di_it->deg_data[di_it->counter % 2]; | |||||||||
| di_it->counter++; | di_it->counter++; | |||||||||
| di_it->iterators[di_it->counter % 2].data = &di_it->deg_data[di_it->counter % 2]; | di_it->iterators[di_it->counter % 2].iter.data = &di_it->deg_data[di_it->counter % 2]; | |||||||||
| DEG_iterator_objects_next(&di_it->iterators[di_it->counter % 2]); | DEG_iterator_objects_next(&di_it->iterators[di_it->counter % 2].iter); | |||||||||
| /* Dupli_object_current is also temp memory generated during the iterations, | /* Dupli_object_current is also temp memory generated during the iterations, | |||||||||
| * it may be freed when last item has been iterated, | * it may be freed when last item has been iterated, | |||||||||
| * so we have same issue as with the iterator itself: | * so we have same issue as with the iterator itself: | |||||||||
| * we need to keep a local copy, which memory remains valid a bit longer, | * we need to keep a local copy, which memory remains valid a bit longer, | |||||||||
| * for Python accesses to work. */ | * for Python accesses to work. */ | |||||||||
| if (di_it->deg_data[di_it->counter % 2].dupli_object_current != NULL) { | if (di_it->deg_data[di_it->counter % 2].dupli_object_current != NULL) { | |||||||||
| di_it->dupli_object_current[di_it->counter % 2] = | di_it->dupli_object_current[di_it->counter % 2] = | |||||||||
| *di_it->deg_data[di_it->counter % 2].dupli_object_current; | *di_it->deg_data[di_it->counter % 2].dupli_object_current; | |||||||||
| di_it->deg_data[di_it->counter % 2].dupli_object_current = | di_it->deg_data[di_it->counter % 2].dupli_object_current = | |||||||||
| &di_it->dupli_object_current[di_it->counter % 2]; | &di_it->dupli_object_current[di_it->counter % 2]; | |||||||||
| } | } | |||||||||
| iter->valid = di_it->iterators[di_it->counter % 2].valid; | iter->valid = di_it->iterators[di_it->counter % 2].iter.valid; | |||||||||
| } | } | |||||||||
| static void rna_Depsgraph_object_instances_end(CollectionPropertyIterator *iter) | static void rna_Depsgraph_object_instances_end(CollectionPropertyIterator *iter) | |||||||||
| { | { | |||||||||
| RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *) | RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *) | |||||||||
| iter->internal.custom; | iter->internal.custom; | |||||||||
| DEG_iterator_objects_end(&di_it->iterators[0]); | for (int i = 0; i < ARRAY_SIZE(di_it->iterators); i++) { | |||||||||
| DEG_iterator_objects_end(&di_it->iterators[1]); | RNA_DepsgraphIterator *di = &di_it->iterators[i]; | |||||||||
| DEG_iterator_objects_end(&di->iter); | ||||||||||
| # ifdef WITH_PYTHON | ||||||||||
| if (di->py_instance) { | ||||||||||
| BPY_DECREF_RNA_INVALIDATE(di->py_instance); | ||||||||||
| } | ||||||||||
| # endif | ||||||||||
| } | ||||||||||
| MEM_freeN(di_it); | MEM_freeN(di_it); | |||||||||
| } | } | |||||||||
| static PointerRNA rna_Depsgraph_object_instances_get(CollectionPropertyIterator *iter) | static PointerRNA rna_Depsgraph_object_instances_get(CollectionPropertyIterator *iter) | |||||||||
| { | { | |||||||||
| RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *) | RNA_Depsgraph_Instances_Iterator *di_it = (RNA_Depsgraph_Instances_Iterator *) | |||||||||
| iter->internal.custom; | iter->internal.custom; | |||||||||
| BLI_Iterator *iterator = &di_it->iterators[di_it->counter % 2]; | RNA_DepsgraphIterator *di = &di_it->iterators[di_it->counter % 2]; | |||||||||
| return rna_pointer_inherit_refine(&iter->parent, &RNA_DepsgraphObjectInstance, iterator); | return rna_pointer_inherit_refine(&iter->parent, &RNA_DepsgraphObjectInstance, di); | |||||||||
Not Done Inline Actionseeeek! Guess this works currently because of where di->iter is defined in the struct, was even wrong already in existing code... mont29: eeeek! Guess this works currently because of where `di->iter` is defined in the struct, was… | ||||||||||
Not Done Inline ActionsFor this iterator the BLI_Iterator was used, not BLI_Iterator.current unlike rna_Depsgraph_ids_get. This is working as intended, and doesn't depend on the location of BLI_Iterator in RNA_DepsgraphIterator, double checked that putting py_instance first works. campbellbarton: For this iterator the `BLI_Iterator` was used, not `BLI_Iterator.current` unlike… | ||||||||||
Not Done Inline ActionsOooooh right, all members of the DepsgraphObjectInstance are only accessors, so the only thing that matters is that they all agree on the type of ptr.data! mont29: Oooooh right, all members of the `DepsgraphObjectInstance` are only accessors, so the only… | ||||||||||
| } | } | |||||||||
| /* Iteration over evaluated IDs */ | /* Iteration over evaluated IDs */ | |||||||||
| static void rna_Depsgraph_ids_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) | static void rna_Depsgraph_ids_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) | |||||||||
| { | { | |||||||||
| iter->internal.custom = MEM_callocN(sizeof(BLI_Iterator), __func__); | iter->internal.custom = MEM_callocN(sizeof(BLI_Iterator), __func__); | |||||||||
| DEGIDIterData *data = MEM_callocN(sizeof(DEGIDIterData), __func__); | DEGIDIterData *data = MEM_callocN(sizeof(DEGIDIterData), __func__); | |||||||||
| ▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | static void rna_def_depsgraph_instance(BlenderRNA *brna) | |||||||||
| PropertyRNA *prop; | PropertyRNA *prop; | |||||||||
| srna = RNA_def_struct(brna, "DepsgraphObjectInstance", NULL); | srna = RNA_def_struct(brna, "DepsgraphObjectInstance", NULL); | |||||||||
| RNA_def_struct_ui_text(srna, | RNA_def_struct_ui_text(srna, | |||||||||
| "Dependency Graph Object Instance", | "Dependency Graph Object Instance", | |||||||||
| "Extended information about dependency graph object iterator " | "Extended information about dependency graph object iterator " | |||||||||
| "(Warning: All data here is 'evaluated' one, not original .blend IDs)"); | "(Warning: All data here is 'evaluated' one, not original .blend IDs)"); | |||||||||
| # ifdef WITH_PYTHON | ||||||||||
| RNA_def_struct_register_funcs(srna, NULL, NULL, "rna_DepsgraphIterator_instance"); | ||||||||||
| # endif | ||||||||||
| prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); | prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); | |||||||||
| RNA_def_property_struct_type(prop, "Object"); | RNA_def_property_struct_type(prop, "Object"); | |||||||||
| RNA_def_property_ui_text(prop, "Object", "Evaluated object the iterator points to"); | RNA_def_property_ui_text(prop, "Object", "Evaluated object the iterator points to"); | |||||||||
| RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE); | RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE); | |||||||||
| RNA_def_property_pointer_funcs(prop, "rna_DepsgraphObjectInstance_object_get", NULL, NULL, NULL); | RNA_def_property_pointer_funcs(prop, "rna_DepsgraphObjectInstance_object_get", NULL, NULL, NULL); | |||||||||
| prop = RNA_def_property(srna, "show_self", PROP_BOOLEAN, PROP_NONE); | prop = RNA_def_property(srna, "show_self", PROP_BOOLEAN, PROP_NONE); | |||||||||
| RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE); | RNA_def_property_clear_flag(prop, PROP_ANIMATABLE | PROP_EDITABLE); | |||||||||
| ▲ Show 20 Lines • Show All 279 Lines • Show Last 20 Lines | ||||||||||
defined so that it can ?