diff options
-rw-r--r-- | source/blender/depsgraph/DEG_depsgraph_query.h | 7 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_query.cc | 16 |
2 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h index 902a2ea3981..508714db218 100644 --- a/source/blender/depsgraph/DEG_depsgraph_query.h +++ b/source/blender/depsgraph/DEG_depsgraph_query.h @@ -85,6 +85,13 @@ struct Object *DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct ID *DEG_get_evaluated_id(const struct Depsgraph *depsgraph, struct ID *id); + +/* Get original version of object for given evaluated one. */ +struct Object *DEG_get_original_object(struct Object *object); + +/* Get original version of given evaluated ID datablock. */ +struct ID *DEG_get_original_id(struct ID *id); + /* ************************ DEG iterators ********************* */ enum { diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc b/source/blender/depsgraph/intern/depsgraph_query.cc index 3bffbf4d88e..63eb1f18281 100644 --- a/source/blender/depsgraph/intern/depsgraph_query.cc +++ b/source/blender/depsgraph/intern/depsgraph_query.cc @@ -166,3 +166,19 @@ ID *DEG_get_evaluated_id(const Depsgraph *depsgraph, ID *id) return id_node->id_cow; } +Object *DEG_get_original_object(Object *object) +{ + return (Object *)DEG_get_original_id(&object->id); +} + +ID *DEG_get_original_id(ID *id) +{ + if (id == NULL) { + return NULL; + } + if (id->orig_id == NULL) { + return id; + } + BLI_assert((id->tag & LIB_TAG_COPY_ON_WRITE) != 0); + return (ID *)id->orig_id; +} |