43 driver_relations_needed_(false),
45 property_rna_(nullptr),
48 driver_relations_needed_ = determine_relations_needed();
52 bool DriverDescriptor::determine_relations_needed()
78 return driver_relations_needed_;
89 if (!is_array_ || !other.is_array_) {
104 void DriverDescriptor::split_rna_path()
106 const char *last_dot = strrchr(fcu_->
rna_path,
'.');
107 if (last_dot ==
nullptr || last_dot[1] ==
'\0') {
117 bool DriverDescriptor::resolve_rna()
130 deque<const Node *>
queue;
133 while (!
queue.empty()) {
144 const Node *prev_node = relation->
from;
145 if (seen.
add(prev_node)) {
146 queue.push_back(prev_node);
176 if (adt ==
nullptr) {
187 if (fcu->rna_path ==
nullptr) {
202 int num_drivers = prefix_group.size();
203 if (num_drivers < 2) {
207 for (
int from_index = 0; from_index < num_drivers; ++from_index) {
212 for (
int to_offset = 1; to_offset < num_drivers; ++to_offset) {
213 const int to_index = (from_index + to_offset) % num_drivers;
221 if (op_from == op_to) {
struct AnimData * BKE_animdata_from_id(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
ThreadQueue * queue
all scheduled work for the cpu
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(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
virtual OperationNode * get_exit_operation()
virtual OperationNode * get_entry_operation()