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 it can be cleared once iteration is completed. | ||||||||||
mont29: `defined so that it can` ? | ||||||||||
mont29Unsubmitted Done Inline ActionsNope, not done :P mont29: Nope, not done :P | ||||||||||
campbellbartonAuthorUnsubmitted 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); | |||||||||
mont29Unsubmitted 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… | ||||||||||
campbellbartonAuthorUnsubmitted 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… | ||||||||||
mont29Unsubmitted 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 ?