[Bf-blender-cvs] [6715600796c] functions: flatten float3 attribute of container
Jacques Lucke
noreply at git.blender.org
Sat Jul 6 17:30:30 CEST 2019
Commit: 6715600796c1fac720d041b3c099d27c4ab82996
Author: Jacques Lucke
Date: Sat Jul 6 16:49:12 2019 +0200
Branches: functions
https://developer.blender.org/rB6715600796c1fac720d041b3c099d27c4ab82996
flatten float3 attribute of container
===================================================================
M source/blender/simulations/bparticles/attributes.hpp
M source/blender/simulations/bparticles/c_wrapper.cpp
M source/blender/simulations/bparticles/particles_container.cpp
M source/blender/simulations/bparticles/particles_container.hpp
===================================================================
diff --git a/source/blender/simulations/bparticles/attributes.hpp b/source/blender/simulations/bparticles/attributes.hpp
index 803818430a7..04fbc931828 100644
--- a/source/blender/simulations/bparticles/attributes.hpp
+++ b/source/blender/simulations/bparticles/attributes.hpp
@@ -103,6 +103,15 @@ class AttributesInfo {
return m_types[index];
}
+ /**
+ * Get the type of an attribute identified by its name.
+ * Asserts when the name does not exist.
+ */
+ AttributeType type_of(StringRef name) const
+ {
+ return this->type_of(this->attribute_index(name));
+ }
+
/**
* Get the types of all attributes. The index into the array is the index of the corresponding
* attribute.
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 6e669fe8abe..79243b9d9b9 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -692,9 +692,12 @@ Mesh *BParticles_test_mesh_from_state(BParticlesState state_c)
{
SCOPED_TIMER(__func__);
- uint particle_count = BParticles_state_particle_count(state_c);
- SmallVector<float3> positions(particle_count);
- BParticles_state_get_positions(state_c, (float(*)[3])positions.begin());
+ ParticlesState &state = *unwrap(state_c);
+
+ SmallVector<float3> positions;
+ for (ParticlesContainer *container : state.particle_containers().values()) {
+ positions.extend(container->flatten_attribute_float3("Position"));
+ }
return distribute_tetrahedons(positions, 0.025f);
}
diff --git a/source/blender/simulations/bparticles/particles_container.cpp b/source/blender/simulations/bparticles/particles_container.cpp
index 54d2d45e70d..318ec66ec43 100644
--- a/source/blender/simulations/bparticles/particles_container.cpp
+++ b/source/blender/simulations/bparticles/particles_container.cpp
@@ -135,6 +135,14 @@ void ParticlesContainer::flatten_attribute_data(StringRef attribute_name, void *
}
}
+SmallVector<float3> ParticlesContainer::flatten_attribute_float3(StringRef attribute_name)
+{
+ BLI_assert(m_attributes_info.type_of(attribute_name) == AttributeType::Float3);
+ SmallVector<float3> result(this->count_active());
+ this->flatten_attribute_data(attribute_name, (void *)result.begin());
+ return result;
+}
+
void ParticlesBlock::MoveUntilFull(ParticlesBlock &from, ParticlesBlock &to)
{
BLI_assert(&from.container() == &to.container());
diff --git a/source/blender/simulations/bparticles/particles_container.hpp b/source/blender/simulations/bparticles/particles_container.hpp
index cb34db0e4c8..a833573e134 100644
--- a/source/blender/simulations/bparticles/particles_container.hpp
+++ b/source/blender/simulations/bparticles/particles_container.hpp
@@ -79,6 +79,11 @@ class ParticlesContainer {
*/
void flatten_attribute_data(StringRef attribute_name, void *dst);
+ /**
+ * Get a vector containing a a float3 attribute value from every particle.
+ */
+ SmallVector<float3> flatten_attribute_float3(StringRef attribute_name);
+
friend bool operator==(const ParticlesContainer &a, const ParticlesContainer &b);
};
More information about the Bf-blender-cvs
mailing list