22 Vector<GeometryInstanceGroup> &r_sets);
26 Vector<GeometryInstanceGroup> &r_sets);
31 &
const_cast<Object &
>(
object));
33 if (
mesh !=
nullptr) {
43 if (
object.runtime.geometry_set_eval !=
nullptr) {
45 geometry_set = *
object.runtime.geometry_set_eval;
50 if (
object.runtime.geometry_set_eval !=
nullptr) {
51 GeometrySet geometry_set = *
object.runtime.geometry_set_eval;
65 if (
object.
type ==
OB_EMPTY &&
object.instance_collection !=
nullptr) {
67 Collection &collection = *
object.instance_collection;
101 const Object &
object = *collection_object->ob;
106 BLI_assert(collection_child->collection !=
nullptr);
107 const Collection &collection = *collection_child->collection;
125 for (
const int i : transforms.index_range()) {
129 switch (reference.
type()) {
138 collection, instance_transform, r_sets);
167 switch (reference.type()) {
169 const Object &
object = reference.object();
175 Collection &collection = reference.collection();
184 const GeometrySet &instance_geometry_set = reference.geometry_set();
200 new_references.
reserve(references_.size());
202 switch (reference.type()) {
206 new_references.
add_new(reference);
212 const Object &
object = reference.object();
219 new_references.
add_new(std::move(object_geometry_set));
228 Collection &collection = reference.collection();
230 const int handle =
component.add_reference(*
object);
231 component.add_instance(handle, object->obmat);
237 new_references.
add_new(std::move(collection_geometry_set));
242 references_ = std::move(new_references);
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
General operations, lookup, etc. for materials.
void BKE_mesh_wrapper_ensure_mdata(struct Mesh *me)
struct Mesh * BKE_modifier_get_evaluated_mesh_from_evaluated_object(struct Object *ob_eval)
General operations for point clouds.
#define LISTBASE_FOREACH(type, var, list)
MINLINE void sub_v3_v3(float r[3], const float a[3])
static uint8 component(Color32 c, uint i)
Object groups, one object can be in many groups at once.
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
Collection & collection() const
const GeometrySet & geometry_set() const
blender::Span< int > instance_reference_handles() const
void foreach_referenced_geometry(blender::FunctionRef< void(const GeometrySet &geometry_set)> callback) const
int add_reference(const InstanceReference &reference)
blender::Span< InstanceReference > references() const
void add_instance(int instance_handle, const blender::float4x4 &transform)
blender::MutableSpan< blender::float4x4 > instance_transforms()
void ensure_geometry_instances()
void reserve(const int64_t n)
void add_new(const Key &key)
void append(const T &value)
DEGForeachIDComponentCallback callback
static void add_final_mesh_as_geometry_component(const Object &object, GeometrySet &geometry_set)
void geometry_set_gather_instances(const GeometrySet &geometry_set, Vector< GeometryInstanceGroup > &r_instance_groups)
static void geometry_set_collect_recursive_object(const Object &object, const float4x4 &transform, Vector< GeometryInstanceGroup > &r_sets)
GeometrySet object_get_evaluated_geometry_set(const Object &object)
static void geometry_set_collect_recursive(const GeometrySet &geometry_set, const float4x4 &transform, Vector< GeometryInstanceGroup > &r_sets)
static void geometry_set_collect_recursive_collection_instance(const Collection &collection, const float4x4 &transform, Vector< GeometryInstanceGroup > &r_sets)
static void geometry_set_collect_recursive_collection(const Collection &collection, const float4x4 &transform, Vector< GeometryInstanceGroup > &r_sets)
void replace_mesh(Mesh *mesh, GeometryOwnershipType ownership=GeometryOwnershipType::Owned)
GeometryComponent & get_component_for_write(GeometryComponentType component_type)
const GeometryComponent * get_component_for_read(GeometryComponentType component_type) const
bool has_instances() const
static float4x4 identity()