[Bf-blender-cvs] [c1b4abf527f] master: Geometry Nodes: Add Nodes to Get/Set Built-in Attributes

Johnny Matthews noreply at git.blender.org
Mon Oct 11 18:05:00 CEST 2021


Commit: c1b4abf527f102ca20114e8179eca511d90784b3
Author: Johnny Matthews
Date:   Mon Oct 11 11:03:57 2021 -0500
Branches: master
https://developer.blender.org/rBc1b4abf527f102ca20114e8179eca511d90784b3

Geometry Nodes: Add Nodes to Get/Set Built-in Attributes

This commit implements T91780, adding nodes to get and set builtin
attributes. Individual set nodes are used so that the values can be
exposed for direct editing, which is useful for attributes like shade
smooth and spline resolution. Individual input nodes are used to allow
reusing nodes for multiple components, and to allow grouping multiple
outputs conceptually in the same node in the future.

Input Nodes
 - Radius
 - Curve Tilt
 - Curve Handle Positions
 - Is Shade Smooth
 - Spline Resolution
 - Is Spline Cyclic

'Set' Nodes
 - Curve Radius
 - Point Radius
 - Curve Tilt
 - Curve Handle Positions
 - Is Shade Smooth
 - Spline Resolution
 - Is Spline Cyclic

Using hardcoded categories is necessary to add separators to the node
menu.

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

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

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/intern/rna_nodetree.c
M	source/blender/modifiers/intern/MOD_nodes_evaluator.cc
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_input_curve_handles.cc
A	source/blender/nodes/geometry/nodes/node_geo_input_curve_tilt.cc
A	source/blender/nodes/geometry/nodes/node_geo_input_radius.cc
A	source/blender/nodes/geometry/nodes/node_geo_input_shade_smooth.cc
A	source/blender/nodes/geometry/nodes/node_geo_input_spline_cyclic.cc
A	source/blender/nodes/geometry/nodes/node_geo_input_spline_resolution.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_curve_radius.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_curve_tilt.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_shade_smooth.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_spline_cyclic.cc
A	source/blender/nodes/geometry/nodes/node_geo_set_spline_resolution.cc

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

diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index d73fbe5dc76..b6bc70e36fc 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -80,6 +80,104 @@ node_tree_group_type = {
     'GeometryNodeTree': 'GeometryNodeGroup',
 }
 
+# Custom Menu for Geometry Node Curves
+def curve_node_items(context):
+    if context is None:
+        return
+    space = context.space_data
+    if not space:
+        return
+    if not space.edit_tree:
+        return
+
+    if geometry_nodes_legacy_poll(context):
+        yield NodeItem("GeometryNodeLegacyCurveEndpoints")
+        yield NodeItem("GeometryNodeLegacyCurveReverse")
+        yield NodeItem("GeometryNodeLegacyCurveSubdivide")
+        yield NodeItem("GeometryNodeLegacyCurveToPoints")
+        yield NodeItem("GeometryNodeLegacyMeshToCurve")
+        yield NodeItem("GeometryNodeLegacyCurveSelectHandles")
+        yield NodeItem("GeometryNodeLegacyCurveSetHandles")
+        yield NodeItem("GeometryNodeLegacyCurveSplineType")
+        yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+
+    yield NodeItem("GeometryNodeCurveFill")
+    yield NodeItem("GeometryNodeCurveFillet")
+    yield NodeItem("GeometryNodeCurveLength")
+    yield NodeItem("GeometryNodeCurveReverse")
+    yield NodeItem("GeometryNodeCurveSample")
+    yield NodeItem("GeometryNodeCurveSubdivide")
+    yield NodeItem("GeometryNodeCurveToMesh")
+    yield NodeItem("GeometryNodeCurveTrim")
+    yield NodeItem("GeometryNodeCurveResample")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeInputCurveHandlePositions")
+    yield NodeItem("GeometryNodeCurveParameter")
+    yield NodeItem("GeometryNodeInputTangent")
+    yield NodeItem("GeometryNodeInputCurveTilt")
+    yield NodeItem("GeometryNodeCurveHandleTypeSelection")
+    yield NodeItem("GeometryNodeInputSplineCyclic")
+    yield NodeItem("GeometryNodeSplineLength")
+    yield NodeItem("GeometryNodeInputSplineResolution")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeSetCurveRadius")
+    yield NodeItem("GeometryNodeSetCurveTilt")
+    yield NodeItem("GeometryNodeSetCurveHandlePositions")
+    yield NodeItem("GeometryNodeCurveSetHandles")
+    yield NodeItem("GeometryNodeSetSplineCyclic")
+    yield NodeItem("GeometryNodeSetSplineResolution")
+    yield NodeItem("GeometryNodeCurveSplineType")
+
+# Custom Menu for Geometry Node Curves
+def mesh_node_items(context):
+    if context is None:
+        return
+    space = context.space_data
+    if not space:
+        return
+    if not space.edit_tree:
+        return
+
+    if geometry_nodes_legacy_poll(context):
+        yield NodeItem("GeometryNodeLegacyEdgeSplit", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacySubdivisionSurface", poll=geometry_nodes_legacy_poll)
+        yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+
+    yield NodeItem("GeometryNodeBoolean")
+    yield NodeItem("GeometryNodeMeshSubdivide")
+    yield NodeItem("GeometryNodePointsToVertices")
+    yield NodeItem("GeometryNodeTriangulate")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeInputShadeSmooth")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeSetShadeSmooth")
+
+# Custom Menu for Geometry Node Curves
+def point_node_items(context):
+    if context is None:
+        return
+    space = context.space_data
+    if not space:
+        return
+    if not space.edit_tree:
+        return
+
+    if geometry_nodes_legacy_poll(context):
+        yield NodeItem("GeometryNodeLegacyAlignRotationToVector", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacyPointDistribute", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacyPointInstance", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacyPointScale", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacyPointSeparate", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacyPointTranslate", poll=geometry_nodes_legacy_poll)
+        yield NodeItem("GeometryNodeLegacyRotatePoints", poll=geometry_nodes_legacy_poll)
+        yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+        
+    yield NodeItem("GeometryNodeDistributePointsOnFaces")
+    yield NodeItem("GeometryNodeInstanceOnPoints")
+    yield NodeItem("GeometryNodeMeshToPoints")
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+    yield NodeItem("GeometryNodeSetPointRadius")
 
 # generic node group items generator for shader, compositor, geometry and texture node groups
 def node_group_items(context):
@@ -510,32 +608,7 @@ geometry_node_categories = [
         NodeItem("ShaderNodeSeparateRGB"),
         NodeItem("ShaderNodeCombineRGB"),
     ]),
-    GeometryNodeCategory("GEO_CURVE", "Curve", items=[
-        NodeItem("GeometryNodeLegacyCurveSubdivide", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyCurveReverse", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyCurveSplineType", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyCurveSetHandles", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyCurveSelectHandles", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyMeshToCurve", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyCurveToPoints", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyCurveEndpoints", poll=geometry_nodes_legacy_poll),
-
-        NodeItem("GeometryNodeCurveToMesh"),
-        NodeItem("GeometryNodeCurveResample"),
-        NodeItem("GeometryNodeCurveFill"),
-        NodeItem("GeometryNodeCurveTrim"),
-        NodeItem("GeometryNodeCurveLength"),
-        NodeItem("GeometryNodeCurveSplineType"),
-        NodeItem("GeometryNodeSplineLength"),
-        NodeItem("GeometryNodeCurveSubdivide"),
-        NodeItem("GeometryNodeCurveParameter"),
-        NodeItem("GeometryNodeCurveSetHandles"),
-        NodeItem("GeometryNodeInputTangent"),
-        NodeItem("GeometryNodeCurveSample"),
-        NodeItem("GeometryNodeCurveHandleTypeSelection"),
-        NodeItem("GeometryNodeCurveFillet"),
-        NodeItem("GeometryNodeCurveReverse"),
-    ]),
+    GeometryNodeCategory("GEO_CURVE", "Curve", items=curve_node_items),
     GeometryNodeCategory("GEO_PRIMITIVES_CURVE", "Curve Primitives", items=[
         NodeItem("GeometryNodeCurvePrimitiveLine"),
         NodeItem("GeometryNodeCurvePrimitiveCircle"),
@@ -562,7 +635,6 @@ geometry_node_categories = [
     ]),
     GeometryNodeCategory("GEO_INPUT", "Input", items=[
         NodeItem("FunctionNodeLegacyRandomFloat", poll=geometry_nodes_legacy_poll),
-
         NodeItem("GeometryNodeObjectInfo"),
         NodeItem("GeometryNodeCollectionInfo"),
         NodeItem("ShaderNodeValue"),
@@ -570,8 +642,9 @@ geometry_node_categories = [
         NodeItem("FunctionNodeInputVector"),
         NodeItem("GeometryNodeInputMaterial"),
         NodeItem("GeometryNodeIsViewport"),
-        NodeItem("GeometryNodeInputPosition"),
         NodeItem("GeometryNodeInputIndex"),
+        NodeItem("GeometryNodeInputPosition"),
+        NodeItem("GeometryNodeInputRadius"),
         NodeItem("GeometryNodeInputNormal"),
     ]),
     GeometryNodeCategory("GEO_MATERIAL", "Material", items=[
@@ -582,15 +655,7 @@ geometry_node_categories = [
         NodeItem("GeometryNodeMaterialSelection"),
         NodeItem("GeometryNodeMaterialReplace"),
     ]),
-    GeometryNodeCategory("GEO_MESH", "Mesh", items=[
-        NodeItem("GeometryNodeLegacyEdgeSplit", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacySubdivisionSurface", poll=geometry_nodes_legacy_poll),
-
-        NodeItem("GeometryNodeBoolean"),
-        NodeItem("GeometryNodeTriangulate"),
-        NodeItem("GeometryNodeMeshSubdivide"),
-        NodeItem("GeometryNodePointsToVertices"),
-    ]),
+    GeometryNodeCategory("GEO_MESH", "Mesh", items=mesh_node_items),
     GeometryNodeCategory("GEO_PRIMITIVES_MESH", "Mesh Primitives", items=[
         NodeItem("GeometryNodeMeshCircle"),
         NodeItem("GeometryNodeMeshCone"),
@@ -601,18 +666,7 @@ geometry_node_categories = [
         NodeItem("GeometryNodeMeshLine"),
         NodeItem("GeometryNodeMeshUVSphere"),
     ]),
-    GeometryNodeCategory("GEO_POINT", "Point", items=[
-        NodeItem("GeometryNodeMeshToPoints"),
-        NodeItem("GeometryNodeInstanceOnPoints"),
-        NodeItem("GeometryNodeDistributePointsOnFaces"),
-        NodeItem("GeometryNodeLegacyPointDistribute", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyPointInstance", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyPointSeparate", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyPointScale", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyPointTranslate", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyRotatePoints", poll=geometry_nodes_legacy_poll),
-        NodeItem("GeometryNodeLegacyAlignRotationToVector", poll=geometry_nodes_legacy_poll),
-    ]),
+    GeometryNodeCategory("GEO_POINT", "Point", items=point_node_items),
     GeometryNodeCategory("GEO_TEXT", "Text", items=[
         NodeItem("FunctionNodeStringLength"),
         NodeItem("FunctionNodeStringSubstring"),
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index ef9021fd465..e0aeb6e875f 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1517,6 +1517,19 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
 #define GEO_NODE_CURVE_HANDLE_TYPE_SELECTION 1102
 #define GEO_NODE_DELETE_GEOMETRY 1103
 #define GEO_NODE_SEPARATE_GEOMETR

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list