diff --git a/README.md b/README.md index 0dd2133..26c14b1 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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! + diff --git a/node_to_python.py b/node_to_python.py index 2dce5cb..8026734 100644 --- a/node_to_python.py +++ b/node_to_python.py @@ -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"], @@ -74,6 +76,8 @@ "GeometryNodeProximity" : ["target_element"], "GeometryNodeMergeByDistance" : ["mode"], "GeometryNodeRaycast" : ["data_type", "mapping"], + "GeometryNodeSampleIndex" : ["data_type", "domain", "clamp"], + "GeometryNodeSampleNearest" : ["domain"], "GeometryNodeSeparateGeometry" : ["domain"], #input @@ -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"], @@ -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", @@ -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"