Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/geometry_set.cc
| Show First 20 Lines • Show All 470 Lines • ▼ Show 20 Lines | void InstancesComponent::clear() | ||||
| positions_.clear(); | positions_.clear(); | ||||
| rotations_.clear(); | rotations_.clear(); | ||||
| scales_.clear(); | scales_.clear(); | ||||
| } | } | ||||
| void InstancesComponent::add_instance(Object *object, | void InstancesComponent::add_instance(Object *object, | ||||
| blender::float3 position, | blender::float3 position, | ||||
| blender::float3 rotation, | blender::float3 rotation, | ||||
| blender::float3 scale) | blender::float3 scale, | ||||
| const int id) | |||||
| { | { | ||||
| InstancedData data; | InstancedData data; | ||||
| data.type = INSTANCE_DATA_TYPE_OBJECT; | data.type = INSTANCE_DATA_TYPE_OBJECT; | ||||
| data.data.object = object; | data.data.object = object; | ||||
| this->add_instance(data, position, rotation, scale); | this->add_instance(data, position, rotation, scale, id); | ||||
| } | } | ||||
| void InstancesComponent::add_instance(Collection *collection, | void InstancesComponent::add_instance(Collection *collection, | ||||
| blender::float3 position, | blender::float3 position, | ||||
| blender::float3 rotation, | blender::float3 rotation, | ||||
| blender::float3 scale) | blender::float3 scale, | ||||
| const int id) | |||||
| { | { | ||||
| InstancedData data; | InstancedData data; | ||||
| data.type = INSTANCE_DATA_TYPE_COLLECTION; | data.type = INSTANCE_DATA_TYPE_COLLECTION; | ||||
| data.data.collection = collection; | data.data.collection = collection; | ||||
| this->add_instance(data, position, rotation, scale); | this->add_instance(data, position, rotation, scale, id); | ||||
| } | } | ||||
| void InstancesComponent::add_instance(InstancedData data, | void InstancesComponent::add_instance(InstancedData data, | ||||
| blender::float3 position, | blender::float3 position, | ||||
| blender::float3 rotation, | blender::float3 rotation, | ||||
| blender::float3 scale) | blender::float3 scale, | ||||
| const int id) | |||||
| { | { | ||||
| instanced_data_.append(data); | instanced_data_.append(data); | ||||
| positions_.append(position); | positions_.append(position); | ||||
| rotations_.append(rotation); | rotations_.append(rotation); | ||||
| scales_.append(scale); | scales_.append(scale); | ||||
| ids_.append(id); | |||||
| } | } | ||||
| Span<InstancedData> InstancesComponent::instanced_data() const | Span<InstancedData> InstancesComponent::instanced_data() const | ||||
| { | { | ||||
| return instanced_data_; | return instanced_data_; | ||||
| } | } | ||||
| Span<float3> InstancesComponent::positions() const | Span<float3> InstancesComponent::positions() const | ||||
| { | { | ||||
| return positions_; | return positions_; | ||||
| } | } | ||||
| blender::Span<blender::float3> InstancesComponent::rotations() const | Span<float3> InstancesComponent::rotations() const | ||||
| { | { | ||||
| return rotations_; | return rotations_; | ||||
| } | } | ||||
| blender::Span<blender::float3> InstancesComponent::scales() const | Span<float3> InstancesComponent::scales() const | ||||
| { | { | ||||
| return scales_; | return scales_; | ||||
| } | } | ||||
| Span<int> InstancesComponent::ids() const | |||||
| { | |||||
| return ids_; | |||||
| } | |||||
| MutableSpan<float3> InstancesComponent::positions() | MutableSpan<float3> InstancesComponent::positions() | ||||
| { | { | ||||
| return positions_; | return positions_; | ||||
| } | } | ||||
| int InstancesComponent::instances_amount() const | int InstancesComponent::instances_amount() const | ||||
| { | { | ||||
| const int size = instanced_data_.size(); | const int size = instanced_data_.size(); | ||||
| Show All 23 Lines | |||||
| { | { | ||||
| return geometry_set->get_component_for_read<InstancesComponent>() != nullptr; | return geometry_set->get_component_for_read<InstancesComponent>() != nullptr; | ||||
| } | } | ||||
| int BKE_geometry_set_instances(const GeometrySet *geometry_set, | int BKE_geometry_set_instances(const GeometrySet *geometry_set, | ||||
| float (**r_positions)[3], | float (**r_positions)[3], | ||||
| float (**r_rotations)[3], | float (**r_rotations)[3], | ||||
| float (**r_scales)[3], | float (**r_scales)[3], | ||||
| int **r_ids, | |||||
| InstancedData **r_instanced_data) | InstancedData **r_instanced_data) | ||||
| { | { | ||||
| const InstancesComponent *component = geometry_set->get_component_for_read<InstancesComponent>(); | const InstancesComponent *component = geometry_set->get_component_for_read<InstancesComponent>(); | ||||
| if (component == nullptr) { | if (component == nullptr) { | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| *r_positions = (float(*)[3])component->positions().data(); | *r_positions = (float(*)[3])component->positions().data(); | ||||
| *r_rotations = (float(*)[3])component->rotations().data(); | *r_rotations = (float(*)[3])component->rotations().data(); | ||||
| *r_scales = (float(*)[3])component->scales().data(); | *r_scales = (float(*)[3])component->scales().data(); | ||||
| *r_ids = (int *)component->ids().data(); | |||||
| *r_instanced_data = (InstancedData *)component->instanced_data().data(); | |||||
| *r_instanced_data = (InstancedData *)component->instanced_data().data(); | *r_instanced_data = (InstancedData *)component->instanced_data().data(); | ||||
| return component->instances_amount(); | return component->instances_amount(); | ||||
| } | } | ||||
| /** \} */ | /** \} */ | ||||