Skip to content
Merged

V1.2 #18

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ I think Geometry Nodes is a powerful tool that's fairly accessible to people, an
* different node trees for different versions or settings
* interfacing with other parts of the software.

NodeToPython is compatible with Blender 3.0-3.3
NodeToPython is compatible with Blender 3.0-3.4

## Supported Versions
Blender 3.0 - 3.3
Expand All @@ -43,3 +43,14 @@ Download `node_to_python.py`, and install it to Blender like other add-ons. Then
* Textures

as they won't exist in every blend file. In the future, I may have the script automatically recreate these assets, espcially with materials.

## Bug Reports and Suggestions

When submitting an issue, please include

* Your version of Blender
* Your operating system
* A short description of what you were trying to accomplish, or steps to reproduce the issue

Suggestions for how to improve the add-on are more than welcome!

27 changes: 19 additions & 8 deletions node_to_python.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@
"GeometryNodeFillCurve" : ["mode"],
"GeometryNodeFilletCurve" : ["mode"],
"GeometryNodeResampleCurve" : ["mode"],
"GeometryNodeSampleCurve" : ["mode"],
"GeometryNodeSampleCurve" : ["data_type", "mode",
"use_all_curves"],
"GeometryNodeTrimCurve" : ["mode"],
"GeometryNodeSetCurveNormal" : ["mode"],
"GeometryNodeCurveHandleTypeSelection" : ["mode", "handle_type"],
"GeometryNodeSetCurveHandlePositions" : ["mode"],
"GeometryNodeCurveSetHandles" : ["mode", "handle_type"],
Expand All @@ -74,6 +76,8 @@
"GeometryNodeProximity" : ["target_element"],
"GeometryNodeMergeByDistance" : ["mode"],
"GeometryNodeRaycast" : ["data_type", "mapping"],
"GeometryNodeSampleIndex" : ["data_type", "domain", "clamp"],
"GeometryNodeSampleNearest" : ["domain"],
"GeometryNodeSeparateGeometry" : ["domain"],

#input
Expand All @@ -86,6 +90,8 @@
"GeometryNodeMeshBoolean" : ["operation"],
"GeometryNodeMeshToPoints" : ["mode"],
"GeometryNodeMeshToVolume" : ["resolution_mode"],
"GeometryNodeSampleNearestSurface" : ["data_type"],
"GeometryNodeSampleUVSurface" : ["data_type"],
"GeometryNodeSubdivisionSurface" : ["uv_smooth", "boundary_smooth"],
"GeometryNodeTriangulate" : ["quad_method", "ngon_method"],
"GeometryNodeScaleElements" : ["domain", "scale_mode"],
Expand All @@ -96,9 +102,13 @@
"GeometryNodeMeshCircle" : ["fill_type"],
"GeometryNodeMeshLine" : ["mode"],

#output
"GeometryNodeViewer" : ["domain"],

#point
"GeometryNodeDistributePointsOnFaces" : ["distribute_method"],
"GeometryNodePointsToVolume" : ["resolution_mode"],
"GeometryNodeDistributePointsInVolume" : ["mode"],
"GeometryNodeDistributePointsOnFaces" : ["distribute_method"],
"GeometryNodePointsToVolume" : ["resolution_mode"],

#text
"GeometryNodeStringToCurves" : ["overflow", "align_x", "align_y",
Expand Down Expand Up @@ -280,11 +290,12 @@ def process_node_group(node_group, level):
#special nodes
if node.bl_idname in node_settings:
for setting in node_settings[node.bl_idname]:
attr = getattr(node, setting)
if type(attr) == str:
attr = f"\'{attr}\'"
file.write((f"{inner}{node_name}.{setting} = "
f"{attr}\n"))
attr = getattr(node, setting, None)
if attr:
if type(attr) == str:
attr = f"\'{attr}\'"
file.write((f"{inner}{node_name}.{setting} "
f"= {attr}\n"))
elif node.bl_idname == 'GeometryNodeGroup':
file.write((f"{inner}{node_name}.node_tree = "
f"bpy.data.node_groups"
Expand Down