[Bf-blender-cvs] [78322cbee66] soc-2021-porting-modifiers-to-nodes-decimate: Split decimate into three different nodes.

Fabian Schempp noreply at git.blender.org
Fri Jul 2 21:56:50 CEST 2021


Commit: 78322cbee66de5a9c8bef2969bd410e1e5c96f95
Author: Fabian Schempp
Date:   Fri Jul 2 20:49:28 2021 +0200
Branches: soc-2021-porting-modifiers-to-nodes-decimate
https://developer.blender.org/rB78322cbee66de5a9c8bef2969bd410e1e5c96f95

Split decimate into three different nodes.

===================================================================

M	release/scripts/startup/nodeitems_builtins.py
M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/node.cc
M	source/blender/makesdna/DNA_node_types.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/CMakeLists.txt
M	source/blender/nodes/NOD_geometry.h
M	source/blender/nodes/NOD_static_types.h
A	source/blender/nodes/geometry/nodes/node_geo_collapse.cc
M	source/blender/nodes/geometry/nodes/node_geo_decimate.cc
A	source/blender/nodes/geometry/nodes/node_geo_dissolve.cc
A	source/blender/nodes/geometry/nodes/node_geo_unsubdivide.cc

===================================================================

diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 29dc641505b..f491e76a16f 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -540,6 +540,9 @@ geometry_node_categories = [
         NodeItem("GeometryNodeSubdivisionSurface"),
         NodeItem("GeometryNodeSubdivide"),
         NodeItem("GeometryNodeDecimate"),
+        NodeItem("GeometryNodeCollapse"),
+        NodeItem("GeometryNodeUnsubdivide"),
+        NodeItem("GeometryNodeDissolve"),
     ]),
     GeometryNodeCategory("GEO_PRIMITIVES", "Mesh Primitives", items=[
         NodeItem("GeometryNodeMeshCircle"),
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 6b300dc5559..60fe0df17cb 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1440,7 +1440,9 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_CURVE_SUBDIVIDE 1060
 #define GEO_NODE_RAYCAST 1061
 #define GEO_NODE_DECIMATE 1062
-
+#define GEO_NODE_COLLAPSE 1063
+#define GEO_NODE_UNSUBDIVIDE 1064
+#define GEO_NODE_DISSOLVE 1065
 /** \} */
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 7884998f9e4..be6133a0e39 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5051,6 +5051,7 @@ static void registerGeometryNodes()
   register_node_type_geo_attribute_remove();
   register_node_type_geo_boolean();
   register_node_type_geo_bounding_box();
+  register_node_type_geo_collapse();
   register_node_type_geo_collection_info();
   register_node_type_geo_convex_hull();
   register_node_type_geo_curve_length();
@@ -5060,6 +5061,7 @@ static void registerGeometryNodes()
   register_node_type_geo_curve_reverse();
   register_node_type_geo_curve_subdivide();
   register_node_type_geo_decimate();
+  register_node_type_geo_dissolve();
   register_node_type_geo_delete_geometry();
   register_node_type_geo_edge_split();
   register_node_type_geo_input_material();
@@ -5093,6 +5095,7 @@ static void registerGeometryNodes()
   register_node_type_geo_switch();
   register_node_type_geo_transform();
   register_node_type_geo_triangulate();
+  register_node_type_geo_unsubdivide();
   register_node_type_geo_volume_to_mesh();
 }
 
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 12625d3408d..a8caa8b73e0 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1388,6 +1388,21 @@ typedef struct NodeGeometryRaycast {
   char _pad[1];
 } NodeGeometryRaycast;
 
+typedef struct NodeGeometryDecimate {
+  uint8_t mode;
+  char _pad[7];
+} NodeGeometryDecimate;
+
+typedef struct NodeGeometryCollapse {
+  int symmetry_axis;
+  char _pad[4];
+} NodeGeometryCollapse;
+
+typedef struct NodeGeometryDissolve {
+  int delimiter;
+  char _pad[4];
+} NodeGeometryDissolve;
+
 /* script node mode */
 #define NODE_SCRIPT_INTERNAL 0
 #define NODE_SCRIPT_EXTERNAL 1
@@ -1905,6 +1920,21 @@ typedef enum GeometryNodeRaycastMapMode {
   GEO_NODE_RAYCAST_NEAREST = 1,
 } GeometryNodeRaycastMapMode;
 
+typedef enum GeometryNodeCollapseSymmetryAxis {
+  GEO_NODE_COLLAPSE_SYMMETRY_AXIS_NONE = -1,
+  GEO_NODE_COLLAPSE_SYMMETRY_AXIS_X = 0,
+  GEO_NODE_COLLAPSE_SYMMETRY_AXIS_Y = 1,
+  GEO_NODE_COLLAPSE_SYMMETRY_AXIS_Z = 2,
+} GeometryNodeCollapseSymmetryAxis;
+
+typedef enum GeometryNodeDissolveDelimiter {
+  GEO_NODE_DISSOLVE_DELIMITTER_NORMAL = 1 << 0,
+  GEO_NODE_DISSOLVE_DELIMITTER_MATERIAL = 1 << 1,
+  GEO_NODE_DISSOLVE_DELIMITTER_SEAM = 1 << 2,
+  GEO_NODE_DISSOLVE_DELIMITTER_SHARP = 1 << 3,
+  GEO_NODE_DISSOLVE_DELIMITTER_UV = 1 << 4,
+} GeometryNodeDissolveDelimiter;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index 71af69f77a1..4367d365b88 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -75,6 +75,8 @@ 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 674e5845ccb..7071da1a9dc 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -2243,18 +2243,19 @@ 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 c26e9e883d6..f19a7b248cc 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -9859,6 +9859,59 @@ static void def_geo_curve_resample(StructRNA *srna)
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
 }
 
+static void def_geo_decimate(StructRNA *srna)
+{
+  PropertyRNA *prop;
+
+  RNA_def_struct_sdna_from(srna, "NodeGeometryDecimate", "storage");
+
+  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+  RNA_def_property_enum_items(prop, modifier_decim_mode_items);
+  RNA_def_property_ui_text(prop, "Mode", "Sets the algorithm");
+  RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
+}
+
+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_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"},
+      {0, NULL, 0, NULL, NULL},
+  };
+
+  RNA_def_struct_sdna_from(srna, "NodeGeometryCollapse", "storage");
+
+  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");
+  RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
+}
+
+static void def_geo_dissolve(StructRNA *srna)
+{
+  PropertyRNA *prop;
+
+  static EnumPropertyItem delimiter_items[] = {
+      {GEO_NODE_DISSOLVE_DELIMITTER_NORMAL, "normal", 0,"Normal", "No Symmetry is applied"},
+      {GEO_NODE_DISSOLVE_DELIMITTER_MATERIAL, "material", 0,"Material", "Symmetry is applied on X axis"},
+      {GEO_NODE_DISSOLVE_DELIMITTER_SEAM, "seam", 0,"Seam", "Symmetry is applied on Y axis"},
+      {GEO_NODE_DISSOLVE_DELIMITTER_SHARP, "sharp", 0,"Sharp", "Symmetry is applied on Z axis"},
+      {GEO_NODE_DISSOLVE_DELIMITTER_UV, "uv", 0,"UV", "Symmetry is applied on Z axis"},
+      {0, NULL, 0, NULL, NULL},
+  };
+
+  RNA_def_struct_sdna_from(srna, "NodeGeometryDissolve", "storage");
+
+  prop = RNA_def_property(srna, "delimiter", PROP_ENUM, PROP_NONE);
+  RNA_def_property_enum_items(prop, delimiter_items);
+  RNA_def_property_ui_text(prop, "Limit", "Sets if and on what axis symmetry is applied by the operation");
+  RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
+}
+
 static void def_geo_curve_subdivide(StructRNA *srna)
 {
   PropertyRNA *prop;
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 99d44bb7ff9..8e6989b8cee 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -160,6 +160,7 @@ set(SRC
   geometry/nodes/node_geo_attribute_vector_rotate.cc
   geometry/nodes/node_geo_boolean.cc
   geometry/nodes/node_geo_bounding_box.cc
+  geometry/nodes/node_geo_collapse.cc
   geometry/nodes/node_geo_collection_info.cc
   geometry/nodes/node_geo_common.cc
   geometry/nodes/node_geo_convex_hull.cc
@@ -170,7 +171,8 @@ set(SRC
   geometry/nodes/node_geo_curve_reverse.cc
   geometry/nodes/node_geo_curve_subdivide.cc
   geometry/nodes/node_geo_delete_geometry.cc
-
+  geometry/nodes/node_geo_dissolve.cc
+  geometry/nodes/node_geo_decimate.cc
   geometry/nodes/node_geo_edge_split.cc
   geometry/nodes/node_geo_input_material.cc
   geometry/nodes/node_geo_is_viewport.cc
@@ -202,6 +204,7 @@ set(SRC
   geometry/nodes/node_geo_switch.cc
   geometry/nodes/node_geo_transform.cc
   geometry/nodes/node_geo_triangulate.cc
+  geometry/nodes/node_geo_unsubdivide.cc
   geometry/nodes/node_geo_volume_to_mesh.cc
   geometry/node_geometry_exec.cc
   geometry/node_geometry_tree.cc
diff --git a/source/blender/nodes/NOD_geometry.h b/sourc

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list