[Bf-blender-cvs] [ec0ebcdcc49] soc-2021-porting-modifiers-to-nodes-decimate: Changes based on review by Hans Goudey (HooglyBoogly) and Jacques Lucke (JacquesLucke)
Fabian Schempp
noreply at git.blender.org
Sat Aug 14 20:52:58 CEST 2021
Commit: ec0ebcdcc49da24fd91b7fae0eda87903f1a8cb2
Author: Fabian Schempp
Date: Sat Aug 14 20:52:49 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-decimate
https://developer.blender.org/rBec0ebcdcc49da24fd91b7fae0eda87903f1a8cb2
Changes based on review by Hans Goudey (HooglyBoogly) and Jacques Lucke
(JacquesLucke)
===================================================================
M source/blender/bmesh/intern/bmesh_mesh.c
M source/blender/bmesh/tools/bmesh_decimate_dissolve.c
M source/blender/makesdna/DNA_mesh_types.h
M source/blender/makesdna/DNA_node_types.h
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
===================================================================
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index e6a59b9c3a5..ef89451a587 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1453,15 +1453,9 @@ void BM_select_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_set(v, BM_ELEM_SELECT, true);
- }
- else {
- BM_elem_flag_set(v, BM_ELEM_SELECT, false);
- }
- i++;
+ int i;
+ BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) {
+ BM_elem_flag_set(v, BM_ELEM_SELECT, mask[i]);
}
}
@@ -1472,15 +1466,9 @@ void BM_select_edges(BMesh *bm, const bool *mask)
{
BMIter iter;
BMEdge *e;
- int i = 0;
- BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
- if (mask[i]) {
- BM_elem_flag_set(e, BM_ELEM_SELECT, true);
- }
- else {
- BM_elem_flag_set(e, BM_ELEM_SELECT, false);
- }
- i++;
+ int i;
+ BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) {
+ BM_elem_flag_set(e, BM_ELEM_SELECT, mask[i]);
}
}
@@ -1491,15 +1479,9 @@ void BM_select_faces(BMesh *bm, const bool *mask)
{
BMIter iter;
BMFace *f;
- int i = 0;
- BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
- if (mask[i]) {
- BM_elem_flag_set(f, BM_ELEM_SELECT, true);
- }
- else {
- BM_elem_flag_set(f, BM_ELEM_SELECT, false);
- }
- i++;
+ int i;
+ BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, i) {
+ BM_elem_flag_set(f, BM_ELEM_SELECT, mask[i]);
}
}
@@ -1507,15 +1489,9 @@ void BM_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_set(v, BM_ELEM_TAG, true);
- }
- else {
- BM_elem_flag_set(v, BM_ELEM_TAG, false);
- }
- i++;
+ int i;
+ BM_ITER_MESH_INDEX (v, &iter, bm, BM_VERTS_OF_MESH, i) {
+ BM_elem_flag_set(v, BM_ELEM_TAG, mask[i]);
}
}
@@ -1526,15 +1502,9 @@ void BM_tag_edges(BMesh *bm, const bool *mask)
{
BMIter iter;
BMEdge *e;
- int i = 0;
- BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
- if (mask[i]) {
- BM_elem_flag_set(e, BM_ELEM_TAG, true);
- }
- else {
- BM_elem_flag_set(e, BM_ELEM_TAG, false);
- }
- i++;
+ int i;
+ BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) {
+ BM_elem_flag_set(e, BM_ELEM_TAG, mask[i]);
}
}
@@ -1545,15 +1515,9 @@ void BM_tag_faces(BMesh *bm, const bool *mask)
{
BMIter iter;
BMFace *f;
- int i = 0;
- BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
- if (mask[i]) {
- BM_elem_flag_set(f, BM_ELEM_TAG, true);
- }
- else {
- BM_elem_flag_set(f, BM_ELEM_TAG, false);
- }
- i++;
+ int i;
+ BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, i) {
+ BM_elem_flag_set(f, BM_ELEM_TAG, mask[i]);
}
}
/** \} */
diff --git a/source/blender/bmesh/tools/bmesh_decimate_dissolve.c b/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
index 27f2c564672..349b89d4340 100644
--- a/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
+++ b/source/blender/bmesh/tools/bmesh_decimate_dissolve.c
@@ -115,8 +115,8 @@ static bool bm_edge_is_delimiter(const BMEdge *e,
}
}
if (delimit & BMO_DELIM_FACE_SELECTION) {
- if (BM_elem_flag_test(e->l->f, BM_ELEM_SELECT) !=
- BM_elem_flag_test(e->l->radial_next->f, BM_ELEM_SELECT)) {
+ if (BM_elem_flag_test(e->l->f, BM_ELEM_TAG) !=
+ BM_elem_flag_test(e->l->radial_next->f, BM_ELEM_TAG)) {
return true;
}
}
@@ -350,6 +350,7 @@ void BM_mesh_decimate_dissolve_ex(BMesh *bm,
BM_elem_index_set(e_iter, -1); /* set dirty */
}
bm->elem_index_dirty |= BM_EDGE;
+
/* build heap */
for (i = 0; i < einput_len; i++) {
BMEdge *e = einput_arr[i];
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 30af08db035..97f14b2195d 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -282,9 +282,9 @@ enum {
/* We can't have both flags enabled at once,
* flags defined in DNA_scene_types.h */
#define ME_EDIT_PAINT_SEL_MODE(_me) \
- (((_me)->editflag & ME_EDIT_PAINT_FACE_SEL) ? \
- SCE_SELECT_FACE : \
- ((_me)->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX : 0)
+ (((_me)->editflag & ME_EDIT_PAINT_FACE_SEL) ? SCE_SELECT_FACE : \
+ ((_me)->editflag & ME_EDIT_PAINT_VERT_SEL) ? SCE_SELECT_VERTEX : \
+ 0)
/* me->flag */
enum {
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index ede0767f072..d3e85ca2b7a 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1432,14 +1432,12 @@ typedef struct NodeGeometryRaycast {
typedef struct NodeGeometryCollapse {
/* GeometryNodeCollapseSymmetryAxis. */
- int symmetry_axis;
- char _pad[4];
+ int8_t symmetry_axis;
} NodeGeometryCollapse;
typedef struct NodeGeometryDissolve {
/* GeometryNodeDissolveDelimiter */
- int selection_type;
- char _pad[4];
+ int8_t selection_type;
} NodeGeometryDissolve;
/* script node mode */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 789ee23a477..fffc73c3ff5 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -10091,7 +10091,7 @@ static void def_geo_collapse(StructRNA *srna)
prop = RNA_def_property(srna, "symmetry_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, symmetry_axis_items);
RNA_def_property_ui_text(
- prop, "Symmetry", "Sets if and on what axis symmetry is applied by the operation");
+ prop, "Symmetry", "Set if and on what axis symmetry is applied by the operation");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
}
@@ -10101,17 +10101,17 @@ static void def_geo_dissolve(StructRNA *srna)
static EnumPropertyItem delimiter_items[] = {
{GEO_NODE_DISSOLVE_DELIMITTER_UNSELECTED,
- "selection",
+ "SELECTION",
0,
"Selection",
"Only dissolve selected"},
{GEO_NODE_DISSOLVE_DELIMITTER_LIMIT,
- "limit",
+ "LIMIT",
0,
"Limit",
- "Only dissolve unselected. Use e.g. for crease as delimiter"},
+ "Only dissolve unselected. Use especially for attributes on edge domain e.g. crease"},
{GEO_NODE_DISSOLVE_DELIMITTER_SELECTION_BORDER,
- "border",
+ "BORDER",
0,
"Border as Limit",
"Use border of selection as delimiter"},
@@ -10122,7 +10122,7 @@ static void def_geo_dissolve(StructRNA *srna)
prop = RNA_def_property(srna, "selection_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, delimiter_items);
- RNA_def_property_ui_text(prop, "Selection", "Defines how selection is applied");
+ RNA_def_property_ui_text(prop, "Selection", "Define how selection is applied");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
index abbc98bd133..c13ab362f17 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_collapse.cc
@@ -58,7 +58,7 @@ static void geo_node_collapse_init(bNodeTree *UNUSED(tree), bNode *node)
namespace blender::nodes {
static Mesh *collapse_mesh(const float factor,
- const VArray_Span<float> &selection,
+ const VArray<float> &selection,
const bool triangulate,
const int symmetry_axis,
const Mesh *mesh)
@@ -70,9 +70,8 @@ static Mesh *collapse_mesh(const float factor,
const float symmetry_eps = 0.00002f;
Array<float> mask(selection.size());
- for (const int i : selection.index_range()) {
- mask[i] = selection[i];
- }
+ selection.materialize(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);
@@ -93,12 +92,13 @@ static void geo_node_collapse_exec(GeoNodeExecParams params)
const float default_factor = 1.0f;
GVArray_Typed<float> selection_attribute = params.get_input_attribute<float>(
"Selection", mesh_component, ATTR_DOMAIN_POINT, default_factor);
- VArray_Span<float> selection{selection_attribute};
+ // VArray<float> selection(selection_attribute.to);
const Mesh *input_mesh = mesh_component.get_for_read();
const bNode &node = params.node();
const NodeGeometryCollapse &node_storage = *(NodeGeometryCollapse *)node.storage;
- Mesh *result = collapse_mesh(factor, selection, false, node_storage.symmetry_axis, input_mesh);
+ Mesh *result = collapse_mesh(
+ factor, selection_attribute, false, node_storage.symmetry_axis, input_mesh);
geometry_set.replace_mesh(result);
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
index 068f4e557f5..3d41fa80e75 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
@@ -53,7 +53,7 @@ static void geo_node_dissolve_init(bNodeTree *UNUSED(tree), bNode *node)
sizeof(NodeGeometryDissolve), __func__);
node->storage = node_storage;
- node_storage->selection_type = GEO_NODE_DISSOLVE_DELIMITTER_SELECTION_BORDER;
+ node_storage->selection_type = GEO_NODE_DISSOLVE_DELIMITTER_UNSELECTED;
}
namespace blender::nodes {
@@ -68,7 +68,7 @@ static Mesh *dissolve_mesh(const float angle,
true, 0, 0, 0, {CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX, CD_MASK_ORIGINDEX}};
BMesh *bm = BKE_mesh_to_bmesh_ex(mesh, &bmesh_create_params, &bmesh_from_mesh_params);
if (delimiter & BMO_DELIM_FACE_SELECTION) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list