34 driver_relations_needed_(
false),
39 driver_relations_needed_ = determine_relations_needed();
43bool DriverDescriptor::determine_relations_needed()
69 return driver_relations_needed_;
79 if (!is_array_ || !other.is_array_) {
94void DriverDescriptor::split_rna_path()
96 const char *last_dot = strrchr(fcu_->
rna_path,
'.');
97 if (last_dot ==
nullptr || last_dot[1] ==
'\0') {
107bool DriverDescriptor::resolve_rna()
120 std::deque<const Node *> queue;
123 while (!queue.empty()) {
125 const Node *visit = queue.back();
134 const Node *prev_node = relation->
from;
135 if (seen.
add(prev_node)) {
136 queue.push_back(prev_node);
166 if (adt ==
nullptr) {
176 if (fcu->rna_path ==
nullptr) {
191 int num_drivers = prefix_group.size();
192 if (num_drivers < 2) {
196 for (
int from_index = 0; from_index < num_drivers; ++from_index) {
201 for (
int to_offset = 1; to_offset < num_drivers; ++to_offset) {
202 const int to_index = (from_index + to_offset) % num_drivers;
210 if (op_from == op_to) {
255 const Object &ob = *
reinterpret_cast<const Object *
>(&id);
257 return !is_thread_safe;
263 const bool is_thread_safe = data_path.
startswith(
"key_blocks[") &&
265 return !is_thread_safe;
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)
constexpr bool startswith(StringRef prefix) const
constexpr bool endswith(StringRef suffix) 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 data_path_maybe_shared(const ID &id, const StringRef data_path)
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()