Fix: Drivers on hide_viewport and hide_render throw warnings

This partially fixes T73593.

The `add_relation(driver_key, property_entry_key, ...);` call can fail
in the following situation:

- A collection is linked, and instanced into the scene by an Empty.
- The collection contains an object with a driver on its `hide_render` or
  `hide_viewport` property.

As the object doesn't exist as a real object in the scene, it's added with
`base_index=-1` to the depsgraph (see `DepsgraphNodeBuilder::build_collection()`).
As a result the node for syncing the restrictflags back to the base
isn't present in the depsgraph, and the `add_relation()` call failed.

This commit fixes the warning, simply by not attempting to add the
offending relation.
This commit is contained in:
Sybren A. Stüvel
2020-02-21 11:16:59 +01:00
parent be2bc97eba
commit 94e180bd80

View File

@@ -1488,7 +1488,11 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
}
else {
/* If it's not a Bone, handle the generic single dependency case. */
add_relation(driver_key, property_entry_key, "Driver -> Driven Property");
Node *node_to = get_node(property_entry_key);
if (node_to != nullptr) {
add_relation(driver_key, property_entry_key, "Driver -> Driven Property");
}
/* Similar to the case with f-curves, driver might drive a nested
* data-block, which means driver execution should wait for that
* data-block to be copied. */