[Bf-blender-cvs] [b13451f3c31] bevelv2: Added map from vertex to BevelVertexData.
Howard Trickey
noreply at git.blender.org
Mon Jul 4 19:39:06 CEST 2022
Commit: b13451f3c315e6bf96f262993fdac6c2d1bf29aa
Author: Howard Trickey
Date: Mon Jul 4 13:38:12 2022 -0400
Branches: bevelv2
https://developer.blender.org/rBb13451f3c315e6bf96f262993fdac6c2d1bf29aa
Added map from vertex to BevelVertexData.
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
===================================================================
diff --git a/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
index f2a846c2094..838c67097d4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
@@ -583,7 +583,13 @@ void BevelVertexData::construct_vertex_bevel(int vert, float amount, const MeshT
}
class BevelData {
+ /* BevelVertexData for just the affected vertices. */
Array<BevelVertexData> bevel_vert_data_;
+ /* A map from mesh vertex index to index in bevel_vert_data_.
+ * If we wanted more speed at expense of space, we could also use
+ * an Array of size equal to the number of mesh vertices here.
+ */
+ Map<int, int> vert_to_bvd_index_;
public:
MeshTopology topo;
@@ -595,11 +601,35 @@ class BevelData {
{
}
+ /* Initial calculation of position of boundary and edge attachments for vertex bevel. */
void calculate_vertex_bevels(const IndexMask to_bevel, VArray<float> amounts);
+ /* Sets up internal Map for fast access to the BevelVertexData for a given mesh vert. */
+ void setup_vert_map();
+
+ /* What is the BevelVertexData for mesh vertex `vert`? May return nullptr if `vert` isn't
+ * involved in beveling. */
+ BevelVertexData *bevel_vertex_data(int vert)
+ {
+ int slot = vert_to_bvd_index_.lookup_default(vert, -1);
+ if (slot != -1) {
+ return &bevel_vert_data_[slot];
+ }
+ return nullptr;
+ }
+
void print(const std::string &label) const;
};
+/* Make a transation map from mesh vertex index to indices in bevel_vert_data_. */
+void BevelData::setup_vert_map()
+{
+ vert_to_bvd_index_.reserve(bevel_vert_data_.size());
+ for (const int i : bevel_vert_data_.index_range()) {
+ vert_to_bvd_index_.add_new(bevel_vert_data_[i].vertex_cap().vert, i);
+ }
+}
+
void BevelData::print(const std::string &label) const
{
if (label.size() > 0) {
@@ -627,6 +657,7 @@ void BevelData::calculate_vertex_bevels(const IndexMask to_bevel, VArray<float>
bevel_vert_data_[i].construct_vertex_bevel(vert, amounts[vert], topo);
}
});
+ setup_vert_map();
}
static void bevel_mesh_vertices(MeshComponent &component,
More information about the Bf-blender-cvs
mailing list