[Bf-blender-cvs] [1512c5c973f] soc-2021-porting-modifiers-to-nodes-decimate: changes based on review by Hans Goudey (HooglyBoogly)
Fabian Schempp
noreply at git.blender.org
Wed Jul 7 09:19:03 CEST 2021
Commit: 1512c5c973f9836271e35629d7d000005499c06b
Author: Fabian Schempp
Date: Wed Jul 7 09:15:47 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-decimate
https://developer.blender.org/rB1512c5c973f9836271e35629d7d000005499c06b
changes based on review by Hans Goudey (HooglyBoogly)
===================================================================
M source/blender/bmesh/intern/bmesh_mesh.c
M source/blender/bmesh/intern/bmesh_mesh.h
M source/blender/makesrna/RNA_enum_types.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/geometry/nodes/node_geo_collapse.cc
M source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
M source/blender/nodes/geometry/nodes/node_geo_unsubdivide.cc
===================================================================
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index b2958a9e744..3feab285a09 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1446,4 +1446,20 @@ void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm,
}
}
+/**
+ * Use to temporary tag bmesh mesh data based on an array of bool.
+ */
+void BM_temporary_tag_vertices(BMesh *bm, const bool *mask)
+{
+ BMIter iter;
+ BMVert *v;
+ int i = 0;
+ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+ if (mask[i]) {
+ BM_elem_flag_enable(v, BM_ELEM_TAG);
+ }
+ i++;
+ }
+}
+
/** \} */
diff --git a/source/blender/bmesh/intern/bmesh_mesh.h b/source/blender/bmesh/intern/bmesh_mesh.h
index 456275cf157..cb9a481af83 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.h
+++ b/source/blender/bmesh/intern/bmesh_mesh.h
@@ -134,3 +134,4 @@ void BM_mesh_vert_coords_apply(BMesh *bm, const float (*vert_coords)[3]);
void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm,
const float (*vert_coords)[3],
const float mat[4][4]);
+void BM_temporary_tag_vertices(BMesh *bm, const bool *mask);
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index a5da91e2184..c8010a0e1ae 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -75,8 +75,6 @@ extern const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[];
extern const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[];
extern const EnumPropertyItem rna_enum_modifier_shrinkwrap_mode_items[];
-extern const EnumPropertyItem modifier_decim_mode_items[];
-
extern const EnumPropertyItem rna_enum_image_type_items[];
extern const EnumPropertyItem rna_enum_image_color_mode_items[];
extern const EnumPropertyItem rna_enum_image_color_depth_items[];
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 18a70578aa4..7def9bdb636 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -2244,19 +2244,18 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
RNA_define_lib_overridable(false);
}
-const EnumPropertyItem modifier_decim_mode_items[] = {
- {MOD_DECIM_MODE_COLLAPSE, "COLLAPSE", 0, "Collapse", "Use edge collapsing"},
- {MOD_DECIM_MODE_UNSUBDIV, "UNSUBDIV", 0, "Un-Subdivide", "Use un-subdivide face reduction"},
- {MOD_DECIM_MODE_DISSOLVE,
- "DISSOLVE",
- 0,
- "Planar",
- "Dissolve geometry to form planar polygons"},
- {0, NULL, 0, NULL, NULL},
-};
-
static void rna_def_modifier_decimate(BlenderRNA *brna)
{
+ static const EnumPropertyItem modifier_decim_mode_items[] = {
+ {MOD_DECIM_MODE_COLLAPSE, "COLLAPSE", 0, "Collapse", "Use edge collapsing"},
+ {MOD_DECIM_MODE_UNSUBDIV, "UNSUBDIV", 0, "Un-Subdivide", "Use un-subdivide face reduction"},
+ {MOD_DECIM_MODE_DISSOLVE,
+ "DISSOLVE",
+ 0,
+ "Planar",
+ "Dissolve geometry to form planar polygons"},
+ {0, NULL, 0, NULL, NULL},
+ };
/* NOTE: keep in sync with operator 'MESH_OT_decimate'. */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index c1afe8bdefd..7579e158fbc 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9979,7 +9979,7 @@ static void def_geo_collapse(StructRNA *srna)
PropertyRNA *prop;
static EnumPropertyItem symmetry_axis_items[] = {
- {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_NONE, "OFF", 0, "Off", "No Symmetry is applied"},
+ {GEO_NODE_COLLAPSE_SYMMETRY_AXIS_NONE, "NONE", 0, "None", "No Symmetry is applied"},
{GEO_NODE_COLLAPSE_SYMMETRY_AXIS_X, "X", 0, "X", "Symmetry is applied on X axis"},
{GEO_NODE_COLLAPSE_SYMMETRY_AXIS_Y, "Y", 0, "Y", "Symmetry is applied on Y axis"},
{GEO_NODE_COLLAPSE_SYMMETRY_AXIS_Z, "Z", 0, "Z", "Symmetry is applied on Z axis"},
diff --git a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
index 37974931bea..50185c31bbc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
@@ -40,33 +40,46 @@ static bNodeSocketTemplate geo_node_collapse_out[] = {
{-1, ""},
};
+static void geo_node_collapse_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiItemR(layout, ptr, "symmetry_axis", 0, nullptr, ICON_NONE);
+}
+
+static void geo_node_collapse_init(bNodeTree *UNUSED(tree), bNode *node)
+{
+ NodeGeometryCollapse *node_storage = (NodeGeometryCollapse *)MEM_callocN(
+ sizeof(NodeGeometryCollapse), __func__);
+
+ node->storage = node_storage;
+ node_storage->symmetry_axis = -1;
+}
+
namespace blender::nodes {
-static Mesh *collapseMesh(const float factor,
- const GVArrayPtr &selection,
- const bool triangulate,
- const int symmetry_axis,
- Mesh *mesh)
+static Mesh *collapse_mesh(const float factor,
+ const GVArrayPtr &selection,
+ const bool triangulate,
+ const int symmetry_axis,
+ Mesh *mesh)
{
if (factor == 1.0f) {
return mesh;
}
- BMesh *bm;
-
- float *mask = (float *)MEM_malloc_arrayN(mesh->totvert, sizeof(float), __func__);
- for (int i : selection->typed<float>().index_range()) {
- mask[i] = selection->typed<float>()[i];
+ const GVArray_Typed<float> selection_as_typed = selection->typed<float>();
+ Array<float> mask(mesh->totvert);
+ for (const int i : selection_as_typed.index_range()) {
+ mask[i] = selection_as_typed[i];
}
- BMeshCreateParams bmesh_create_params = {0};
- BMeshFromMeshParams bmesh_from_mesh_params = {
+ const BMeshCreateParams bmesh_create_params = {0};
+ const BMeshFromMeshParams bmesh_from_mesh_params = {
true, 0, 0, 0, {CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX}};
- bm = BKE_mesh_to_bmesh_ex(mesh, &bmesh_create_params, &bmesh_from_mesh_params);
+ BMesh *bm = BKE_mesh_to_bmesh_ex(mesh, &bmesh_create_params, &bmesh_from_mesh_params);
const float symmetry_eps = 0.00002f;
- BM_mesh_decimate_collapse(bm, factor, mask, 1.0f, triangulate, symmetry_axis, symmetry_eps);
- MEM_freeN(mask);
+ BM_mesh_decimate_collapse(
+ bm, factor, mask.data(), 1.0f, triangulate, symmetry_axis, symmetry_eps);
Mesh *result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL, mesh);
BM_mesh_free(bm);
@@ -74,30 +87,16 @@ static Mesh *collapseMesh(const float factor,
return result;
}
-static void geo_node_collapse_init(bNodeTree *UNUSED(tree), bNode *node)
-{
- NodeGeometryCollapse *node_storage = (NodeGeometryCollapse *)MEM_callocN(
- sizeof(NodeGeometryCollapse), __func__);
-
- node->storage = node_storage;
- node_storage->symmetry_axis = -1;
-}
-
-static void geo_node_collapse_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
-{
- uiItemR(layout, ptr, "symmetry_axis", UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
-}
-
static void geo_node_collapse_exec(GeoNodeExecParams params)
{
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
- float factor = params.extract_input<float>("Factor");
+ const float factor = params.extract_input<float>("Factor");
if (geometry_set.has_mesh()) {
MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
- float default_factor = 1.0f;
- GVArrayPtr selection = params.get_input_attribute(
+ const float default_factor = 1.0f;
+ const GVArrayPtr selection = params.get_input_attribute(
"Selection", mesh_component, ATTR_DOMAIN_POINT, CD_PROP_FLOAT, &default_factor);
if (!selection) {
return;
@@ -112,8 +111,8 @@ static void geo_node_collapse_exec(GeoNodeExecParams params)
const bool triangulate = params.extract_input<bool>("Triangulate");
const bNode &node = params.node();
- NodeGeometryCollapse &node_storage = *(NodeGeometryCollapse *)node.storage;
- Mesh *result = collapseMesh(
+ const NodeGeometryCollapse &node_storage = *(NodeGeometryCollapse *)node.storage;
+ Mesh *result = collapse_mesh(
factor, selection, triangulate, node_storage.symmetry_axis, input_mesh);
geometry_set.replace_mesh(result);
}
@@ -130,8 +129,8 @@ void register_node_type_geo_collapse()
node_type_socket_templates(&ntype, geo_node_collapse_in, geo_node_collapse_out);
node_type_storage(
&ntype, "NodeGeometryCollapse", node_free_standard_storage, node_copy_standard_storage);
- node_type_init(&ntype, blender::nodes::geo_node_collapse_init);
+ node_type_init(&ntype, geo_node_collapse_init);
ntype.geometry_node_execute = blender::nodes::geo_node_collapse_exec;
- ntype.draw_buttons = blender::nodes::geo_node_collapse_layout;
+ ntype.draw_buttons = geo_node_collapse_layout;
nodeRegisterType(&ntype);
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
index f4b2ced51c0..79a6debfafc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
@@ -39,25 +39,11 @@ static bNodeSocketTemplate geo_node_dissolve_out[] = {
{-1, ""},
};
-namespace blender::nodes {
-
-static Mesh *dissolveMesh(const float angle,
- const bool all_boundaries,
- const int delimiter,
- Mesh *mesh)
+static void geo_node_dissolve_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
{
- BMesh *bm;
- BMeshCreateParams bmesh_create_params = {0};
- BMeshFromMeshParams bmesh_from_mesh_params = {
- true, 0, 0, 0, {CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX}};
- bm = BKE_mesh_t
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list