prepare list implementation

This commit is contained in:
Nicolas Predella 2026-10-12 14:52:55 +03:00
parent a6ddbda49f
commit 12bc6ba08b
2 changed files with 41 additions and 0 deletions

1
.gitignore vendored
View file

@ -9,3 +9,4 @@ release/
*.dylib
*.dll
debug_dumps
scratch

View file

@ -0,0 +1,40 @@
Type,Category,Node Name,Class Name,File,Archetype,First Input Socket,Other Input Sockets,Output Socket(s),First Input Shape,Output Shape,Single Item Behavior,List Behavior
Object,List Joiners (New),Objects to List,SLICENODE_ObjectsToList,core/nodeslicer/nodes/inputs.py,List Joiner,Multi-input NodeSocketObject (Object),None,NodeSocketObject (Objects),Standard / LIST,Fixed LIST,Wraps single item into a 1-element list [Obj1],Flattens incoming lists and combines all objects into list[bpy.types.Object]. Output appearance is LIST.
Mesh,List Joiners (New),Meshes to List,SLICENODE_MeshesToList,core/nodeslicer/nodes/mesh.py,List Joiner,Multi-input SLICESOCK_Mesh (Mesh),None,SLICESOCK_Mesh (Meshes),Standard / LIST,Fixed LIST,Wraps single mesh into a 1-element list [Mesh1],Flattens incoming lists and bundles all meshes into list[SlicingCollection]. Output appearance is LIST.
Path,List Joiners (New),Paths to List,SLICENODE_PathsToList,core/nodeslicer/nodes/path.py,List Joiner,Multi-input SLICESOCK_Paths (Paths),None,SLICESOCK_Paths (Paths),Standard / LIST,Fixed LIST,Wraps single path into a 1-element list [Path1],Flattens incoming lists and bundles all toolpaths into list[SlicePaths]. Output appearance is LIST.
Gcode,List Joiners (New),Gcodes to List,SLICENODE_GcodesToList,core/nodeslicer/nodes/gcode.py,List Joiner,Multi-input NodeSocketString (Gcode),None,NodeSocketString (Gcode),Standard / LIST,Fixed LIST,Wraps single G-code string into a 1-element list [Gcode1],Flattens incoming lists and bundles all G-code blocks into list[str]. Output appearance is LIST.
Mesh,Existing Joiners,Join Mesh Parts,SLICENODE_JoinMesh,core/nodeslicer/nodes/mesh.py,Data Joiner (Flattener),Multi-input SLICESOCK_Mesh (Mesh),None,SLICESOCK_Mesh (Mesh),Dynamic (Displays LIST if linked to list),Standard (CIRCLE),Merges multiple mesh inputs into one SlicingCollection,"Flattens incoming lists when joining (e.g. [M1, M2] + M3 -> M1 + M2 + M3). Output is a single merged mesh (CIRCLE)."
Mesh,Existing Joiners,Join Mesh Groups,SLICENODE_JoinMeshGroups,core/nodeslicer/nodes/mesh.py,Data Joiner (Flattener),Multi-input SLICESOCK_Mesh (Mesh),None,SLICESOCK_Mesh (Mesh),Dynamic (Displays LIST if linked to list),Standard (Group),Bundles multiple SlicingCollections into a SlicingGroup,Flattens incoming lists of collections into a single SlicingGroup.
Gcode,Existing Joiners,Join Gcode,SLICENODE_JoinGcode,core/nodeslicer/nodes/gcode.py,Data Joiner (Flattener),Multi-input NodeSocketString (Gcode),None,NodeSocketString (Gcode),Dynamic (Displays LIST if linked to list),Standard (CIRCLE),Concatenates multiple G-code strings with newline '\n',"Flattens incoming G-code lists and strings, concatenating all sequentially into a single G-code string (CIRCLE)."
Object,Geometry & Mesh,Get Mesh,SLICENODE_GetMesh,core/nodeslicer/nodes/mesh.py,Element-wise Operator,NodeSocketObject (Object),include_children (prop),SLICESOCK_Mesh (Mesh),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Converts single Object into SlicingCollection,"First input is list [Obj1, Obj2, ...]. Converts each element into SlicingCollection. Output is [Mesh1, Mesh2, ...]. Both sockets switch to LIST."
Object,Path Processing,Get Paths,SLICENODE_GetPaths,core/nodeslicer/nodes/path.py,Element-wise Operator,NodeSocketObject (Object),Extrusion/Feedrate/Extra Attributes (cannot be list),SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Extracts mesh edges as SlicePaths,"First input is list [Obj1, Obj2, ...]. Extracts toolpaths for each object using the same attribute settings. Output is [Paths1, Paths2, ...]. Both sockets switch to LIST."
Mesh,Geometry & Mesh,Rename Mesh,SLICENODE_RenameMesh,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Geometry),NodeSocketString Name (cannot be list),SLICESOCK_Mesh (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Renames geometry using name template,"First input is list [Mesh1, Mesh2, ...]. Renames each mesh using the same name template. Output is [Renamed1, Renamed2, ...]. Sockets switch to LIST."
Mesh,Geometry & Mesh,Transform Geometry,SLICENODE_TransformGeometry,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Geometry (Geometry),"Translation, Rotation, Scale (cannot be list)",SLICESOCK_Geometry (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),"Transforms single Mesh or Paths by T, R, S","First input is list [G1, G2, ...]. Transforms each item using the same T, R, S values. Output is [T(G1), T(G2), ...]. Sockets switch to LIST."
Mesh,Geometry & Mesh,Drop Geometry,SLICENODE_DropGeometry,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Mesh),NodeSocketFloat Z (cannot be list),"SLICESOCK_Mesh (Mesh), NodeSocketVector (Translation)",Dynamic (Changes to LIST if input is list),Dynamic (Both outputs change to LIST if input is list),"Translates mesh to target minimum Z; outputs dropped mesh and (0,0,dz)","First input is list [Mesh1, Mesh2, ...]. Drops each mesh independently to the same target Z. Outputs are [Dropped1, Dropped2, ...] and [T1, T2, ...]. Sockets switch to LIST."
Mesh,Geometry & Mesh,Separate Mesh,SLICENODE_SeparateMesh,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Mesh),"Attribute (String), Value (Float) (cannot be list)","Selection (Mesh), Inverted (Mesh)",Dynamic (Changes to LIST if input is list),Dynamic (Both outputs change to LIST if input is list),Splits collection into Selection and Inverted based on attribute condition,"First input is list [Mesh1, Mesh2, ...]. Applies separation to each mesh using same attribute/value. Outputs are Selection: [Sel1, Sel2, ...] and Inverted: [Inv1, Inv2, ...]. Sockets switch to LIST."
Mesh,Geometry & Mesh,Separate Mesh by Range,SLICENODE_SeparateMeshByRange,core/nodeslicer/nodes/mesh.py,Element-wise Demux,SLICESOCK_Mesh (Mesh),"Attribute, Start, End (cannot be list)","Dynamic numeric sockets '0', '1', ...",Dynamic (Changes to LIST if input is list),Dynamic (All outputs change to LIST if input is list),Splits single mesh into multiple output sockets across integer range Start..End,"First input is list [Mesh1, Mesh2, ...]. For each range output socket, delivers list of matching parts across all meshes: e.g. socket '0' gets [Mesh1_0, Mesh2_0, ...]. Outputs switch to LIST."
Mesh,Geometry & Mesh,Arrange Slicing Group,SLICENODE_ArrangeMesh,core/nodeslicer/nodes/mesh.py,Multi-Entity Packer,SLICESOCK_Mesh (Slicing Group),"Bed X, Bed Y, Spacing, Method, Allow Rotations (cannot be list)",SLICESOCK_Mesh (Slicing Group),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Nests collections in SlicingGroup on build plate using libnest2d,"First input is list [Mesh1, Mesh2, ...]. Packs all meshes in the list simultaneously on the build plate without collisions. Output is [Mesh1_packed, Mesh2_packed, ...]. Sockets switch to LIST."
Mesh,PDF Exporter,Assign PDF Properties,SLICENODE_AssignPdfProperties,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Geometry),"Line Width, Line Color, Show Name (cannot be list)",SLICESOCK_Mesh (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Attaches stroke line width and color metadata to geometry,"First input is list [G1, G2, ...]. Attaches the same stroke properties to each item in the list. Output is [G1', G2', ...]. Sockets switch to LIST."
Mesh,PDF Exporter,Assign PDF Object Properties,SLICENODE_AssignPropertyToObject,core/nodeslicer/nodes/mesh.py,Element-wise Operator,SLICESOCK_Mesh (Geometry),Settings (cannot be list),SLICESOCK_Mesh (Geometry),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Attaches property callouts to geometry for PDF drawing tables,"First input is list [G1, G2, ...]. Attaches property callouts to each item in the list. Output is [G1', G2', ...]. Sockets switch to LIST."
Mesh,Path Processing,Slice Shells,SLICENODE_SliceShells,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Mesh (Mesh),"Layer Height, First Layer Height, Rotation, Ignore Holes (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Slices single mesh into 2D SlicePaths polygons,"First input is list [Mesh1, Mesh2, ...]. Slices each mesh independently using the same layer parameters. Output is [Paths1, Paths2, ...]. Sockets switch to LIST."
Mesh,PDF Exporter,Mesh to PDF,SLICENODE_MeshToPdf,core/nodeslicer/nodes/output.py,Batch Sink,SLICESOCK_Mesh (Geometry) or SLICESOCK_Paths (Paths),"Folder, Settings, Template, Header, Margins (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Renders orthographic 1:1 scale vector PDF drawing,"First input is list [Geom1, Geom2, ...]. Renders and exports a separate PDF file for each item using the same settings and naming template."
Path,Path Processing,Buffer Shells,SLICENODE_BufferShells,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Rotation, Miter (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Offsets 2D closed polygon boundaries by distance,"First input is list [P1, P2, ...]. Buffers each path block using the same distance. Output is [Buf(P1), Buf(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Buffer Curve,SLICENODE_BufferCurve,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Cap Style, Join Style, Single Sided, Rotation (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Dilates open or closed curves by distance,"First input is list [P1, P2, ...]. Buffers each curve using the same parameters. Output is [Buf(P1), Buf(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Offset Curve,SLICENODE_OffsetCurve,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Join Style, Rotation (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Generates parallel offset curves using Shapely,"First input is list [P1, P2, ...]. Offsets each curve using the same distance. Output is [Off(P1), Off(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Path Offset,SLICENODE_PathOffset,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),Offset Vector (cannot be list),SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Translates toolpaths by 3D XYZ vector,"First input is list [P1, P2, ...]. Translates each path set by the same vector. Output is [P1 + V, P2 + V, ...]. Sockets switch to LIST."
Path,Path Processing,Rotate Path,SLICENODE_RotatePath,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Angle, Center (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Rotates toolpaths around Z axis at center point,"First input is list [P1, P2, ...]. Rotates each path set by the same angle around the center. Output is [Rot(P1), Rot(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Buffer Shells Multiple,SLICENODE_BufferShellsMultiple,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Distance, Width Step, Count, Rotation, Miter (cannot be list)","Paths, Outermost Path, Innermost Path",Dynamic (Changes to LIST if input is list),Dynamic (All 3 outputs change to LIST if input is list),"Generates multiple concentric perimeter passes, plus outermost and innermost boundaries","First input is list [P1, P2, ...]. Computes concentric passes per item using same distance/step/count. Outputs are [Passes1, Passes2, ...], [Out1, Out2, ...], [In1, In2, ...]. All outputs switch to LIST."
Path,Path Processing,Infill,SLICENODE_Infill,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Density, Infill Rotation, Layer Rotation, Infill Type (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Generates infill pattern clipped to boundary paths,"First input is list [P1, P2, ...]. Generates infill for each boundary block using the same density and rotation. Output is [Inf(P1), Inf(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Overhang Mask,SLICENODE_OverhangMask,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),Tolerance (cannot be list),SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Calculates downward accumulated overhang mask across layers,"First input is list [P1, P2, ...]. Calculates overhang mask for each path set using the same tolerance. Output is [Mask(P1), Mask(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Simplify Paths,SLICENODE_SimplifyPaths,core/nodeslicer/nodes/path.py,Element-wise Operator,SLICESOCK_Paths (Paths),"Tolerance, Preserve Topology (cannot be list)",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Simplifies toolpath vertices using Douglas-Peucker algorithm,"First input is list [P1, P2, ...]. Simplifies each path set using the same tolerance. Output is [Simp(P1), Simp(P2), ...]. Sockets switch to LIST."
Path,Path Processing,Seam Placement,SLICENODE_SeamPlacement,core/nodeslicer/nodes/path.py,Primary-List Operation,SLICESOCK_Paths (Paths) [Can be a list],"SLICESOCK_Mesh (Cutting Mesh), Seam Staggering, Mode, Acquire Transforms [Cannot be a list]",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Repositions start seams of closed paths to intersection points with cutting mesh,"First input is list [P1, P2, ...]. Other inputs cannot be a list. The seam placement operation is done for each element P_i of the list using the same cutting mesh and parameters. Output is [P1', P2', ...]. Sockets switch to LIST."
Path,Path Processing,Path Operations,SLICENODE_PathOperations,core/nodeslicer/nodes/path.py,Primary-List Operation,Input 0: SLICESOCK_Paths (Paths) [Can be a list],"Inputs 1..N: SLICESOCK_Paths (Paths), connect_along_boundary [Cannot be a list]",SLICESOCK_Paths (Paths),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),"Performs Zip, Extend, Max Coverage (Union), Min Coverage, Intersect, Subtract, or XOR across inputs","The first input can be a list [P1, P2, ...], and the other inputs cannot be a list (Q1, Q2...). The operation (Zip, Extend, Union, Subtract, Intersect, etc.) is done for each element of the list using the same other inputs: [op(P1, Q...), op(P2, Q...), ...]. Output is [R1, R2, ...]. Sockets switch to LIST."
Path,G-code Processing,Paths to Gcode,SLICENODE_PathsToGcode,core/nodeslicer/nodes/gcode.py,Element-wise Operator,SLICESOCK_Paths (Paths),"SLICESOCK_Intrinsics (Intrinsics), Header (cannot be list)",NodeSocketString (Gcode),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Converts single SlicePaths into standard G-code string via Pather,"First input is list [P1, P2, ...]. Converts each toolpath block into a G-code string using the same intrinsics. Output is [Gcode1, Gcode2, ...]. Sockets switch to LIST."
Gcode,G-code Processing,Gcode Regex Replace,SLICENODE_GcodeRegexReplace,core/nodeslicer/nodes/gcode.py,Element-wise Operator,NodeSocketString (Gcode),"Find, Replace (cannot be list)",NodeSocketString (Gcode),Dynamic (Changes to LIST if input is list),Dynamic (Changes to LIST if input is list),Runs regex find & replace on G-code string,"First input is list [G1, G2, ...]. Runs regex search and replace on each G-code string using the same pattern. Output is [G1', G2', ...]. Sockets switch to LIST."
Gcode,Action & I/O,Gcode to File,SLICENODE_GcodeToFile,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Folder, Name (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Saves G-code string to .gcode or .bgcode file on disk,"First input is list [G1, G2, ...]. Saves a separate file for each element using the same folder/name template with zero-padded numbering (Part00.gcode, Part01.gcode) or metadata names."
Gcode,Action & I/O,Gcode to Text Block,SLICENODE_GcodeToTextBlock,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list],Text Block Name (cannot be list),Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Writes G-code string to an active Blender text editor data-block,"First input is list [G1, G2, ...]. Writes separate numbered Blender text blocks (NodeSlicer_00.gcode, NodeSlicer_01.gcode) using the base name."
Gcode,Action & I/O,Start Print,SLICENODE_StartPrint,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list],SLICESOCK_Printer (cannot be list),Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Uploads and starts print on network printer,"First input is list [G1, G2, ...]. Sequentially queues and sends each G-code print job to the target printer using the same printer configuration."
Gcode,Action & I/O,Baserow Submit,SLICENODE_BaserowSubmit,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Settings, Host, Token, Table ID, Record ID (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Uploads G-code attachment and creates/updates row in Baserow database,"First input is list [G1, G2, ...]. Submits each G-code as a separate record and attachment in Baserow using the same database credentials."
Gcode,Action & I/O,Airtable Submit,SLICENODE_AirtableSubmit,core/nodeslicer/nodes/output.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Settings, PAT File, Base ID, Table ID, Record ID (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Uploads G-code attachment and creates/updates row in Airtable base,"First input is list [G1, G2, ...]. Submits each G-code as a separate record and attachment in Airtable using the same database credentials."
Gcode,Action & I/O,Gcode to Preview Mesh,SLICENODE_GcodeToMesh,core/nodeslicer/nodes/preview.py,Batch Sink,NodeSocketString (Gcode) [Can be a list or multi-input],"Name, show_e_0 (cannot be list)",Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Decodes toolpaths and reconstructs 3D wireframe preview mesh object in Blender,"First input is list [G1, G2, ...]. Generates a separate preview mesh object in the scene (Preview00, Preview01, ...) for each G-code in the list."
Gcode,Action & I/O,Printer List,SLICENODE_PrinterList,core/nodeslicer/nodes/system.py,Batch Sink,Dynamic G-code sockets per printer [Can be a list],Config File JSON (cannot be list),Execution Link,Dynamic (Displays LIST if input is list),Standard Execution Link,Sends G-code to corresponding printer defined in config JSON,"If a printer socket receives a list [G1, G2, ...], queues and dispatches all jobs for that printer."
1 Type Category Node Name Class Name File Archetype First Input Socket Other Input Sockets Output Socket(s) First Input Shape Output Shape Single Item Behavior List Behavior
2 Object List Joiners (New) Objects to List SLICENODE_ObjectsToList core/nodeslicer/nodes/inputs.py List Joiner Multi-input NodeSocketObject (Object) None NodeSocketObject (Objects) Standard / LIST Fixed LIST Wraps single item into a 1-element list [Obj1] Flattens incoming lists and combines all objects into list[bpy.types.Object]. Output appearance is LIST.
3 Mesh List Joiners (New) Meshes to List SLICENODE_MeshesToList core/nodeslicer/nodes/mesh.py List Joiner Multi-input SLICESOCK_Mesh (Mesh) None SLICESOCK_Mesh (Meshes) Standard / LIST Fixed LIST Wraps single mesh into a 1-element list [Mesh1] Flattens incoming lists and bundles all meshes into list[SlicingCollection]. Output appearance is LIST.
4 Path List Joiners (New) Paths to List SLICENODE_PathsToList core/nodeslicer/nodes/path.py List Joiner Multi-input SLICESOCK_Paths (Paths) None SLICESOCK_Paths (Paths) Standard / LIST Fixed LIST Wraps single path into a 1-element list [Path1] Flattens incoming lists and bundles all toolpaths into list[SlicePaths]. Output appearance is LIST.
5 Gcode List Joiners (New) Gcodes to List SLICENODE_GcodesToList core/nodeslicer/nodes/gcode.py List Joiner Multi-input NodeSocketString (Gcode) None NodeSocketString (Gcode) Standard / LIST Fixed LIST Wraps single G-code string into a 1-element list [Gcode1] Flattens incoming lists and bundles all G-code blocks into list[str]. Output appearance is LIST.
6 Mesh Existing Joiners Join Mesh Parts SLICENODE_JoinMesh core/nodeslicer/nodes/mesh.py Data Joiner (Flattener) Multi-input SLICESOCK_Mesh (Mesh) None SLICESOCK_Mesh (Mesh) Dynamic (Displays LIST if linked to list) Standard (CIRCLE) Merges multiple mesh inputs into one SlicingCollection Flattens incoming lists when joining (e.g. [M1, M2] + M3 -> M1 + M2 + M3). Output is a single merged mesh (CIRCLE).
7 Mesh Existing Joiners Join Mesh Groups SLICENODE_JoinMeshGroups core/nodeslicer/nodes/mesh.py Data Joiner (Flattener) Multi-input SLICESOCK_Mesh (Mesh) None SLICESOCK_Mesh (Mesh) Dynamic (Displays LIST if linked to list) Standard (Group) Bundles multiple SlicingCollections into a SlicingGroup Flattens incoming lists of collections into a single SlicingGroup.
8 Gcode Existing Joiners Join Gcode SLICENODE_JoinGcode core/nodeslicer/nodes/gcode.py Data Joiner (Flattener) Multi-input NodeSocketString (Gcode) None NodeSocketString (Gcode) Dynamic (Displays LIST if linked to list) Standard (CIRCLE) Concatenates multiple G-code strings with newline '\n' Flattens incoming G-code lists and strings, concatenating all sequentially into a single G-code string (CIRCLE).
9 Object Geometry & Mesh Get Mesh SLICENODE_GetMesh core/nodeslicer/nodes/mesh.py Element-wise Operator NodeSocketObject (Object) include_children (prop) SLICESOCK_Mesh (Mesh) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Converts single Object into SlicingCollection First input is list [Obj1, Obj2, ...]. Converts each element into SlicingCollection. Output is [Mesh1, Mesh2, ...]. Both sockets switch to LIST.
10 Object Path Processing Get Paths SLICENODE_GetPaths core/nodeslicer/nodes/path.py Element-wise Operator NodeSocketObject (Object) Extrusion/Feedrate/Extra Attributes (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Extracts mesh edges as SlicePaths First input is list [Obj1, Obj2, ...]. Extracts toolpaths for each object using the same attribute settings. Output is [Paths1, Paths2, ...]. Both sockets switch to LIST.
11 Mesh Geometry & Mesh Rename Mesh SLICENODE_RenameMesh core/nodeslicer/nodes/mesh.py Element-wise Operator SLICESOCK_Mesh (Geometry) NodeSocketString Name (cannot be list) SLICESOCK_Mesh (Geometry) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Renames geometry using name template First input is list [Mesh1, Mesh2, ...]. Renames each mesh using the same name template. Output is [Renamed1, Renamed2, ...]. Sockets switch to LIST.
12 Mesh Geometry & Mesh Transform Geometry SLICENODE_TransformGeometry core/nodeslicer/nodes/mesh.py Element-wise Operator SLICESOCK_Geometry (Geometry) Translation, Rotation, Scale (cannot be list) SLICESOCK_Geometry (Geometry) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Transforms single Mesh or Paths by T, R, S First input is list [G1, G2, ...]. Transforms each item using the same T, R, S values. Output is [T(G1), T(G2), ...]. Sockets switch to LIST.
13 Mesh Geometry & Mesh Drop Geometry SLICENODE_DropGeometry core/nodeslicer/nodes/mesh.py Element-wise Operator SLICESOCK_Mesh (Mesh) NodeSocketFloat Z (cannot be list) SLICESOCK_Mesh (Mesh), NodeSocketVector (Translation) Dynamic (Changes to LIST if input is list) Dynamic (Both outputs change to LIST if input is list) Translates mesh to target minimum Z; outputs dropped mesh and (0,0,dz) First input is list [Mesh1, Mesh2, ...]. Drops each mesh independently to the same target Z. Outputs are [Dropped1, Dropped2, ...] and [T1, T2, ...]. Sockets switch to LIST.
14 Mesh Geometry & Mesh Separate Mesh SLICENODE_SeparateMesh core/nodeslicer/nodes/mesh.py Element-wise Operator SLICESOCK_Mesh (Mesh) Attribute (String), Value (Float) (cannot be list) Selection (Mesh), Inverted (Mesh) Dynamic (Changes to LIST if input is list) Dynamic (Both outputs change to LIST if input is list) Splits collection into Selection and Inverted based on attribute condition First input is list [Mesh1, Mesh2, ...]. Applies separation to each mesh using same attribute/value. Outputs are Selection: [Sel1, Sel2, ...] and Inverted: [Inv1, Inv2, ...]. Sockets switch to LIST.
15 Mesh Geometry & Mesh Separate Mesh by Range SLICENODE_SeparateMeshByRange core/nodeslicer/nodes/mesh.py Element-wise Demux SLICESOCK_Mesh (Mesh) Attribute, Start, End (cannot be list) Dynamic numeric sockets '0', '1', ... Dynamic (Changes to LIST if input is list) Dynamic (All outputs change to LIST if input is list) Splits single mesh into multiple output sockets across integer range Start..End First input is list [Mesh1, Mesh2, ...]. For each range output socket, delivers list of matching parts across all meshes: e.g. socket '0' gets [Mesh1_0, Mesh2_0, ...]. Outputs switch to LIST.
16 Mesh Geometry & Mesh Arrange Slicing Group SLICENODE_ArrangeMesh core/nodeslicer/nodes/mesh.py Multi-Entity Packer SLICESOCK_Mesh (Slicing Group) Bed X, Bed Y, Spacing, Method, Allow Rotations (cannot be list) SLICESOCK_Mesh (Slicing Group) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Nests collections in SlicingGroup on build plate using libnest2d First input is list [Mesh1, Mesh2, ...]. Packs all meshes in the list simultaneously on the build plate without collisions. Output is [Mesh1_packed, Mesh2_packed, ...]. Sockets switch to LIST.
17 Mesh PDF Exporter Assign PDF Properties SLICENODE_AssignPdfProperties core/nodeslicer/nodes/mesh.py Element-wise Operator SLICESOCK_Mesh (Geometry) Line Width, Line Color, Show Name (cannot be list) SLICESOCK_Mesh (Geometry) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Attaches stroke line width and color metadata to geometry First input is list [G1, G2, ...]. Attaches the same stroke properties to each item in the list. Output is [G1', G2', ...]. Sockets switch to LIST.
18 Mesh PDF Exporter Assign PDF Object Properties SLICENODE_AssignPropertyToObject core/nodeslicer/nodes/mesh.py Element-wise Operator SLICESOCK_Mesh (Geometry) Settings (cannot be list) SLICESOCK_Mesh (Geometry) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Attaches property callouts to geometry for PDF drawing tables First input is list [G1, G2, ...]. Attaches property callouts to each item in the list. Output is [G1', G2', ...]. Sockets switch to LIST.
19 Mesh Path Processing Slice Shells SLICENODE_SliceShells core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Mesh (Mesh) Layer Height, First Layer Height, Rotation, Ignore Holes (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Slices single mesh into 2D SlicePaths polygons First input is list [Mesh1, Mesh2, ...]. Slices each mesh independently using the same layer parameters. Output is [Paths1, Paths2, ...]. Sockets switch to LIST.
20 Mesh PDF Exporter Mesh to PDF SLICENODE_MeshToPdf core/nodeslicer/nodes/output.py Batch Sink SLICESOCK_Mesh (Geometry) or SLICESOCK_Paths (Paths) Folder, Settings, Template, Header, Margins (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Renders orthographic 1:1 scale vector PDF drawing First input is list [Geom1, Geom2, ...]. Renders and exports a separate PDF file for each item using the same settings and naming template.
21 Path Path Processing Buffer Shells SLICENODE_BufferShells core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Distance, Rotation, Miter (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Offsets 2D closed polygon boundaries by distance First input is list [P1, P2, ...]. Buffers each path block using the same distance. Output is [Buf(P1), Buf(P2), ...]. Sockets switch to LIST.
22 Path Path Processing Buffer Curve SLICENODE_BufferCurve core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Distance, Cap Style, Join Style, Single Sided, Rotation (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Dilates open or closed curves by distance First input is list [P1, P2, ...]. Buffers each curve using the same parameters. Output is [Buf(P1), Buf(P2), ...]. Sockets switch to LIST.
23 Path Path Processing Offset Curve SLICENODE_OffsetCurve core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Distance, Join Style, Rotation (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Generates parallel offset curves using Shapely First input is list [P1, P2, ...]. Offsets each curve using the same distance. Output is [Off(P1), Off(P2), ...]. Sockets switch to LIST.
24 Path Path Processing Path Offset SLICENODE_PathOffset core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Offset Vector (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Translates toolpaths by 3D XYZ vector First input is list [P1, P2, ...]. Translates each path set by the same vector. Output is [P1 + V, P2 + V, ...]. Sockets switch to LIST.
25 Path Path Processing Rotate Path SLICENODE_RotatePath core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Angle, Center (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Rotates toolpaths around Z axis at center point First input is list [P1, P2, ...]. Rotates each path set by the same angle around the center. Output is [Rot(P1), Rot(P2), ...]. Sockets switch to LIST.
26 Path Path Processing Buffer Shells Multiple SLICENODE_BufferShellsMultiple core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Distance, Width Step, Count, Rotation, Miter (cannot be list) Paths, Outermost Path, Innermost Path Dynamic (Changes to LIST if input is list) Dynamic (All 3 outputs change to LIST if input is list) Generates multiple concentric perimeter passes, plus outermost and innermost boundaries First input is list [P1, P2, ...]. Computes concentric passes per item using same distance/step/count. Outputs are [Passes1, Passes2, ...], [Out1, Out2, ...], [In1, In2, ...]. All outputs switch to LIST.
27 Path Path Processing Infill SLICENODE_Infill core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Density, Infill Rotation, Layer Rotation, Infill Type (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Generates infill pattern clipped to boundary paths First input is list [P1, P2, ...]. Generates infill for each boundary block using the same density and rotation. Output is [Inf(P1), Inf(P2), ...]. Sockets switch to LIST.
28 Path Path Processing Overhang Mask SLICENODE_OverhangMask core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Tolerance (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Calculates downward accumulated overhang mask across layers First input is list [P1, P2, ...]. Calculates overhang mask for each path set using the same tolerance. Output is [Mask(P1), Mask(P2), ...]. Sockets switch to LIST.
29 Path Path Processing Simplify Paths SLICENODE_SimplifyPaths core/nodeslicer/nodes/path.py Element-wise Operator SLICESOCK_Paths (Paths) Tolerance, Preserve Topology (cannot be list) SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Simplifies toolpath vertices using Douglas-Peucker algorithm First input is list [P1, P2, ...]. Simplifies each path set using the same tolerance. Output is [Simp(P1), Simp(P2), ...]. Sockets switch to LIST.
30 Path Path Processing Seam Placement SLICENODE_SeamPlacement core/nodeslicer/nodes/path.py Primary-List Operation SLICESOCK_Paths (Paths) [Can be a list] SLICESOCK_Mesh (Cutting Mesh), Seam Staggering, Mode, Acquire Transforms [Cannot be a list] SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Repositions start seams of closed paths to intersection points with cutting mesh First input is list [P1, P2, ...]. Other inputs cannot be a list. The seam placement operation is done for each element P_i of the list using the same cutting mesh and parameters. Output is [P1', P2', ...]. Sockets switch to LIST.
31 Path Path Processing Path Operations SLICENODE_PathOperations core/nodeslicer/nodes/path.py Primary-List Operation Input 0: SLICESOCK_Paths (Paths) [Can be a list] Inputs 1..N: SLICESOCK_Paths (Paths), connect_along_boundary [Cannot be a list] SLICESOCK_Paths (Paths) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Performs Zip, Extend, Max Coverage (Union), Min Coverage, Intersect, Subtract, or XOR across inputs The first input can be a list [P1, P2, ...], and the other inputs cannot be a list (Q1, Q2...). The operation (Zip, Extend, Union, Subtract, Intersect, etc.) is done for each element of the list using the same other inputs: [op(P1, Q...), op(P2, Q...), ...]. Output is [R1, R2, ...]. Sockets switch to LIST.
32 Path G-code Processing Paths to Gcode SLICENODE_PathsToGcode core/nodeslicer/nodes/gcode.py Element-wise Operator SLICESOCK_Paths (Paths) SLICESOCK_Intrinsics (Intrinsics), Header (cannot be list) NodeSocketString (Gcode) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Converts single SlicePaths into standard G-code string via Pather First input is list [P1, P2, ...]. Converts each toolpath block into a G-code string using the same intrinsics. Output is [Gcode1, Gcode2, ...]. Sockets switch to LIST.
33 Gcode G-code Processing Gcode Regex Replace SLICENODE_GcodeRegexReplace core/nodeslicer/nodes/gcode.py Element-wise Operator NodeSocketString (Gcode) Find, Replace (cannot be list) NodeSocketString (Gcode) Dynamic (Changes to LIST if input is list) Dynamic (Changes to LIST if input is list) Runs regex find & replace on G-code string First input is list [G1, G2, ...]. Runs regex search and replace on each G-code string using the same pattern. Output is [G1', G2', ...]. Sockets switch to LIST.
34 Gcode Action & I/O Gcode to File SLICENODE_GcodeToFile core/nodeslicer/nodes/output.py Batch Sink NodeSocketString (Gcode) [Can be a list or multi-input] Folder, Name (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Saves G-code string to .gcode or .bgcode file on disk First input is list [G1, G2, ...]. Saves a separate file for each element using the same folder/name template with zero-padded numbering (Part00.gcode, Part01.gcode) or metadata names.
35 Gcode Action & I/O Gcode to Text Block SLICENODE_GcodeToTextBlock core/nodeslicer/nodes/output.py Batch Sink NodeSocketString (Gcode) [Can be a list] Text Block Name (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Writes G-code string to an active Blender text editor data-block First input is list [G1, G2, ...]. Writes separate numbered Blender text blocks (NodeSlicer_00.gcode, NodeSlicer_01.gcode) using the base name.
36 Gcode Action & I/O Start Print SLICENODE_StartPrint core/nodeslicer/nodes/output.py Batch Sink NodeSocketString (Gcode) [Can be a list] SLICESOCK_Printer (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Uploads and starts print on network printer First input is list [G1, G2, ...]. Sequentially queues and sends each G-code print job to the target printer using the same printer configuration.
37 Gcode Action & I/O Baserow Submit SLICENODE_BaserowSubmit core/nodeslicer/nodes/output.py Batch Sink NodeSocketString (Gcode) [Can be a list or multi-input] Settings, Host, Token, Table ID, Record ID (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Uploads G-code attachment and creates/updates row in Baserow database First input is list [G1, G2, ...]. Submits each G-code as a separate record and attachment in Baserow using the same database credentials.
38 Gcode Action & I/O Airtable Submit SLICENODE_AirtableSubmit core/nodeslicer/nodes/output.py Batch Sink NodeSocketString (Gcode) [Can be a list or multi-input] Settings, PAT File, Base ID, Table ID, Record ID (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Uploads G-code attachment and creates/updates row in Airtable base First input is list [G1, G2, ...]. Submits each G-code as a separate record and attachment in Airtable using the same database credentials.
39 Gcode Action & I/O Gcode to Preview Mesh SLICENODE_GcodeToMesh core/nodeslicer/nodes/preview.py Batch Sink NodeSocketString (Gcode) [Can be a list or multi-input] Name, show_e_0 (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Decodes toolpaths and reconstructs 3D wireframe preview mesh object in Blender First input is list [G1, G2, ...]. Generates a separate preview mesh object in the scene (Preview00, Preview01, ...) for each G-code in the list.
40 Gcode Action & I/O Printer List SLICENODE_PrinterList core/nodeslicer/nodes/system.py Batch Sink Dynamic G-code sockets per printer [Can be a list] Config File JSON (cannot be list) Execution Link Dynamic (Displays LIST if input is list) Standard Execution Link Sends G-code to corresponding printer defined in config JSON If a printer socket receives a list [G1, G2, ...], queues and dispatches all jobs for that printer.