30 driver_relations_needed_(
false),
32 property_rna_(nullptr),
35 driver_relations_needed_ = determine_relations_needed();
39bool DriverDescriptor::determine_relations_needed()
65 return driver_relations_needed_;
75 if (!is_array_ || !other.is_array_) {
90void DriverDescriptor::split_rna_path()
92 const char *last_dot = strrchr(fcu_->
rna_path,
'.');
93 if (last_dot ==
nullptr || last_dot[1] ==
'\0') {
103bool DriverDescriptor::resolve_rna()
116 deque<const Node *> queue;
119 while (!queue.empty()) {
121 const Node *visit = queue.back();
130 const Node *prev_node = relation->from;
131 if (seen.
add(prev_node)) {
132 queue.push_back(prev_node);
162 if (adt ==
nullptr) {
172 if (fcu->rna_path ==
nullptr) {
187 int num_drivers = prefix_group.size();
188 if (num_drivers < 2) {
192 for (
int from_index = 0; from_index < num_drivers; ++from_index) {
197 for (
int to_offset = 1; to_offset < num_drivers; ++to_offset) {
198 const int to_index = (from_index + to_offset) % num_drivers;
206 if (op_from == op_to) {
AnimData * BKE_animdata_from_id(const ID *id)
#define LISTBASE_FOREACH(type, var, list)
ValueIterator values() const
Value & lookup_or_add_default_as(ForwardKey &&key)
TimeSourceNode * get_node(const TimeSourceKey &key) const
Relation * add_operation_relation(OperationNode *node_from, OperationNode *node_to, const char *description, int flags=0)
virtual void build_driver_relations()
bool driver_relations_needed() const
OperationKey depsgraph_key() const
DriverDescriptor(PointerRNA *id_ptr, FCurve *fcu)
bool is_same_array_as(const DriverDescriptor &other) const
static bool is_reachable(const Node *const from, const Node *const to)
bool RNA_property_array_check(PropertyRNA *prop)
PropertyType RNA_property_type(PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
virtual OperationNode * get_entry_operation()
virtual OperationNode * get_exit_operation()