23 &
const_cast<Object &
>(
object));
25 if (mesh !=
nullptr) {
38 if (
object.runtime->geometry_set_eval !=
nullptr) {
40 geometry_set = *
object.runtime->geometry_set_eval;
45 if (
object.runtime->geometry_set_eval !=
nullptr) {
46 GeometrySet geometry_set = *
object.runtime->geometry_set_eval;
60 if (
object.type ==
OB_EMPTY &&
object.instance_collection !=
nullptr) {
61 Collection &collection = *
object.instance_collection;
62 std::unique_ptr<Instances> instances = std::make_unique<Instances>();
63 const int handle = instances->add_reference(collection);
76 switch (reference.type()) {
78 const Object &
object = reference.object();
84 Collection &collection = reference.collection();
93 const GeometrySet &instance_geometry_set = reference.geometry_set();
107 new_references.
reserve(references_.size());
109 switch (reference.type()) {
116 new_references.
append(reference);
122 Object &
object = reference.object();
131 new_references.
append(std::move(object_geometry_set));
137 std::unique_ptr<Instances> instances = std::make_unique<Instances>();
138 Collection &collection = reference.collection();
146 instances->resize(objects.size());
149 for (
const int i : objects.index_range()) {
150 handles[i] = instances->add_reference(*objects[i]);
151 transforms[i] = objects[i]->object_to_world();
152 transforms[i].location() -= collection.instance_offset;
154 instances->ensure_geometry_instances();
160 references_ = std::move(new_references);
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
void BKE_mesh_wrapper_ensure_mdata(Mesh *mesh)
Mesh * BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval)
bool DEG_object_geometry_is_evaluated(const Object &object)
Object groups, one object can be in many groups at once.
Object is a sort of wrapper for general info.
void append(const T &value)
void reserve(const int64_t min_capacity)
Span< float4x4 > transforms() const
void foreach_referenced_geometry(FunctionRef< void(const GeometrySet &geometry_set)> callback) const
void ensure_geometry_instances()
DEGForeachIDComponentCallback callback
static void add_final_mesh_as_geometry_component(const Object &object, GeometrySet &geometry_set)
GeometrySet object_get_evaluated_geometry_set(const Object &object)
static MatBase identity()
static GeometrySet from_instances(Instances *instances, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
Instances * get_instances_for_write()
bool has_instances() const
void replace_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)