Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohnny Matthews <guitargeek>2021-10-11 19:03:57 +0300
committerHans Goudey <h.goudey@me.com>2021-10-11 19:03:57 +0300
commitc1b4abf527f102ca20114e8179eca511d90784b3 (patch)
treeef5c074ada59fc25acf11034cd9e3d5daf1ae4e6 /release
parent83f87d9f21fada613a70e7296120752e1e876dc3 (diff)
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
Diffstat (limited to 'release')
-rw-r--r--release/scripts/startup/nodeitems_builtins.py152
1 files changed, 103 insertions, 49 deletions
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"),