[Bf-blender-cvs] [b42354672e8] master: Geometry Nodes: Allow for one vertex in grid node

Mattias Fredriksson noreply at git.blender.org
Sun Aug 29 23:40:07 CEST 2021


Commit: b42354672e804be79315315855d105e7d9e11899
Author: Mattias Fredriksson
Date:   Sun Aug 29 16:39:42 2021 -0500
Branches: master
https://developer.blender.org/rBb42354672e804be79315315855d105e7d9e11899

Geometry Nodes: Allow for one vertex in grid node

This commit allows setting the number of vertices in either direction
to 1, so that the primitive grid node will create a line instead of a
grid. To avoid confusion the soft limits of the input sockets are not
changed, so this is purely an increase in flexibility for when it is
helpful.

Differential Revision: https://developer.blender.org/D11772

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

M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
index 410290c79ee..ca1dafbdf5b 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
@@ -65,7 +65,7 @@ static Mesh *create_grid_mesh(const int verts_x,
                               const float size_x,
                               const float size_y)
 {
-  BLI_assert(verts_x > 1 && verts_y > 1);
+  BLI_assert(verts_x > 0 && verts_y > 0);
   const int edges_x = verts_x - 1;
   const int edges_y = verts_y - 1;
   Mesh *mesh = BKE_mesh_new_nomain(verts_x * verts_y,
@@ -101,6 +101,8 @@ static Mesh *create_grid_mesh(const int verts_x,
 
   /* Build the horizontal edges in the X direction. */
   const int y_edges_start = 0;
+  const short edge_flag = (edges_x == 0 || edges_y == 0) ? ME_LOOSEEDGE :
+                                                           ME_EDGEDRAW | ME_EDGERENDER;
   int edge_index = 0;
   for (const int x : IndexRange(verts_x)) {
     for (const int y : IndexRange(edges_y)) {
@@ -108,7 +110,7 @@ static Mesh *create_grid_mesh(const int verts_x,
       MEdge &edge = edges[edge_index++];
       edge.v1 = vert_index;
       edge.v2 = vert_index + 1;
-      edge.flag = ME_EDGEDRAW | ME_EDGERENDER;
+      edge.flag = edge_flag;
     }
   }
 
@@ -120,7 +122,7 @@ static Mesh *create_grid_mesh(const int verts_x,
       MEdge &edge = edges[edge_index++];
       edge.v1 = vert_index;
       edge.v2 = vert_index + verts_y;
-      edge.flag = ME_EDGEDRAW | ME_EDGERENDER;
+      edge.flag = edge_flag;
     }
   }
 
@@ -148,7 +150,9 @@ static Mesh *create_grid_mesh(const int verts_x,
     }
   }
 
-  calculate_uvs(mesh, verts, loops, size_x, size_y);
+  if (mesh->totpoly != 0) {
+    calculate_uvs(mesh, verts, loops, size_x, size_y);
+  }
 
   return mesh;
 }
@@ -159,13 +163,7 @@ static void geo_node_mesh_primitive_grid_exec(GeoNodeExecParams params)
   const float size_y = params.extract_input<float>("Size Y");
   const int verts_x = params.extract_input<int>("Vertices X");
   const int verts_y = params.extract_input<int>("Vertices Y");
-  if (verts_x < 2 || verts_y < 2) {
-    if (verts_x < 2) {
-      params.error_message_add(NodeWarningType::Info, TIP_("Vertices X must be at least 2"));
-    }
-    if (verts_y < 2) {
-      params.error_message_add(NodeWarningType::Info, TIP_("Vertices Y must be at least 2"));
-    }
+  if (verts_x < 1 || verts_y < 1) {
     params.set_output("Geometry", GeometrySet());
     return;
   }



More information about the Bf-blender-cvs mailing list