27 driver_relations_needed_(false),
29 property_rna_(nullptr),
32 driver_relations_needed_ = determine_relations_needed();
36 bool DriverDescriptor::determine_relations_needed()
62 return driver_relations_needed_;
72 if (!is_array_ || !other.is_array_) {
87 void DriverDescriptor::split_rna_path()
89 const char *last_dot = strrchr(fcu_->
rna_path,
'.');
90 if (last_dot ==
nullptr || last_dot[1] ==
'\0') {
100 bool DriverDescriptor::resolve_rna()
113 deque<const Node *>
queue;
116 while (!
queue.empty()) {
127 const Node *prev_node = relation->
from;
128 if (seen.
add(prev_node)) {
129 queue.push_back(prev_node);
159 if (adt ==
nullptr) {
170 if (fcu->rna_path ==
nullptr) {
185 int num_drivers = prefix_group.size();
186 if (num_drivers < 2) {
190 for (
int from_index = 0; from_index < num_drivers; ++from_index) {
195 for (
int to_offset = 1; to_offset < num_drivers; ++to_offset) {
196 const int to_index = (from_index + to_offset) % num_drivers;
204 if (op_from == op_to) {
struct AnimData * BKE_animdata_from_id(const struct ID *id)
#define LISTBASE_FOREACH(type, var, list)
Value & lookup_or_add_default_as(ForwardKey &&key)
ValueIterator values() const
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)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
PropertyType RNA_property_type(PropertyRNA *prop)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
virtual OperationNode * get_exit_operation()
virtual OperationNode * get_entry_operation()