164 lines
12 KiB
Markdown
164 lines
12 KiB
Markdown
# Node & Socket Reference
|
|
|
|
## Node Sockets
|
|
|
|
| Socket ID | Type | Underlying Data Structure | Purpose |
|
|
|-----------|------|---------------------------|---------|
|
|
| `SLICESOCK_Object` | `bpy.types.Object` | Blender RNA Object | Reference to a Blender Object |
|
|
| `SLICESOCK_Float` | `float` | Python float | Numeric value |
|
|
| `SLICESOCK_Int` | `int` | Python int | Integer value |
|
|
| `SLICESOCK_String` | `str` | Python string | Text/Path value |
|
|
| `SLICESOCK_Vector` | `tuple` | Python tuple (3) | XYZ or Euler rotation value |
|
|
| `SLICESOCK_Mesh` | `SlicingObject` | NumPy NDArray (Triangles) | Internal mesh data (Transformed/Scaled) |
|
|
| `SLICESOCK_Paths` | `SlicePaths` (list) | List of paths (N, 3) + groups | Generic toolpaths or slice boundaries |
|
|
| `SLICESOCK_Gcode` | `str` | Multi-line string | Generated G-code text |
|
|
| `SLICESOCK_Settings` | `dict[str, str]` | Python dictionary | Mapping of configuration fields to values |
|
|
| `SLICESOCK_SettingsRo` | `dict[str, str]` | Python dictionary | Read-only merged configuration overrides |
|
|
|
|
## Detailed Data Types
|
|
|
|
### SlicingObject (`SLICESOCK_Mesh`)
|
|
The `SlicingObject` class wraps a high-performance NumPy representation of a Blender mesh.
|
|
- **`.mesh`**: A NumPy `ndarray` of type `float64` with shape `(N, 3, 3)`.
|
|
- `N`: Number of triangles.
|
|
- `[i, 0:3, :]`: The three vertices of the $i$-th triangle.
|
|
- **Coordinates**: Transformed to world space and scaled by the Blender scene unit scale (multiplied by 1000 for mm-standard G-code).
|
|
|
|
### SlicePaths (`SLICESOCK_Paths`)
|
|
A custom list subclass `SlicePaths(list[np.ndarray])` containing toolpaths.
|
|
- **Content**: Each `np.ndarray` has shape `(N, 3)`.
|
|
- **Groups**: Maintains a `.groups` list of integers mapping each path to a layer or logical group.
|
|
- **Extra Attributes**: Maintains an `.extra_attributes` dictionary mapping G-code prefixes (e.g., `S`, `M`) to lists of NumPy arrays, enabling per-segment custom parameters.
|
|
- **Z-Awareness**: Coordinates are stored as 3D `(X, Y, Z)` to maintain the correct layer height.
|
|
- **Topology**: Generated and cleaned using `pyclipper`.
|
|
|
|
### Gcode (`SLICESOCK_Gcode`)
|
|
A standard Python string containing formatted G-code.
|
|
- **Format**: `G0` for travels, `G1` for extrusions.
|
|
- **Extrusion**: Calculated as absolute `E` values based on Euclidean distance and a configurable `EXTRUSION_RATE`.
|
|
- **Metadata**: Includes `;OFFSET_X=` and `;OFFSET_Y=` comments to allow reconstruction of original coordinates.
|
|
|
|
## Nodes
|
|
|
|
All nodes are found in the **Add (Shift+A)** menu under the **SliceNodes** category.
|
|
|
|
### Data & Input
|
|
- **Object**: Blender object picker.
|
|
- **Float**: Single float input.
|
|
- **Integer**: Single integer input.
|
|
- **String**: Single string/path input.
|
|
- **Settings**: Read-only/write configuration settings dictionary.
|
|
- **Wipe Tower**: Configures the Wipe Tower printbed position (`wipe_tower_position`) passed to 3MF metadata (`Prusa_Slicer_wipe_tower_information.xml`) without injecting into profile INI settings.
|
|
- **Position X**: X coordinate of the wipe tower on the printbed.
|
|
- **Position Y**: Y coordinate of the wipe tower on the printbed.
|
|
- **Offset Object**: Configures the object placement transform offset (`offset_object`) applied to `<item transform="...">` inside 3MF model build data (`3D/3dmodel.model`) without injecting into profile INI settings.
|
|
- **Offset X**: X translation offset for the build item.
|
|
- **Offset Y**: Y translation offset for the build item.
|
|
- **Offset Z**: Z translation offset for the build item.
|
|
- **Printer Intrinsics**: Configures bed size, extrusion/travel rates, retraction distance & feedrate, and Z-lift.
|
|
- **Gcode Block**: Manual text area for entering raw G-code.
|
|
|
|
### Geometry Processing
|
|
- **Get Mesh**: Converts a Blender Object into internal `SlicingObject` format.
|
|
- **Rename Mesh**: Overrides the internal metadata name of a `SlicingObject`, `SlicingCollection`, or `SlicingGroup`.
|
|
- **Geometry**: Input geometry data.
|
|
- **Name**: String input socket or property for the new name.
|
|
- **Transform Geometry**: Moves, rotates, and scales a `SlicingCollection` or `SlicingGroup` relative to the origin.
|
|
- **Mesh**: Input mesh data.
|
|
- **Translation**: 3D vector specifying the translation offset.
|
|
- **Rotation**: 3D vector/Euler rotation values.
|
|
- **Scale**: 3D vector specifying scaling factors along the X, Y, and Z axes (defaults to `1.0, 1.0, 1.0`).
|
|
- **Drop Geometry**: Moves a `SlicingCollection` or `SlicingGroup` along Z so that its minimum Z sits at the specified value.
|
|
- **Mesh**: Input mesh data.
|
|
- **Z**: Target minimum Z coordinate (defaults to `0.0`).
|
|
- **Get Paths**: Extracts existing edges from a mesh as paths.
|
|
- **Extrusion Multiplier Attribute**: Mesh attribute to use for per-segment extrusion rates.
|
|
- **Feedrate Attribute**: Mesh attribute to use for per-segment feedrates.
|
|
- **Extra Attributes**: Dictionary mapping mesh attribute names to custom G-code prefixes (e.g., `opening_size` -> `S`).
|
|
- **Path Offset**: Offsets `SlicePaths` by a 3D vector.
|
|
- **Rotate Path**: Rotates `SlicePaths` around the Z-axis.
|
|
- **Angle**: Rotation angle in degrees.
|
|
- **Center**: Optional center of rotation. If not provided, it defaults to the midpoint of the first layer.
|
|
- **Slice Shells**: Slices a `SlicingObject` into 2D `SlicePaths` at a given layer height. Automatically aligns path seams to the sharpest concave angle (inner corner) of each layer. Supports rotation for slicing at an angle.
|
|
- **Buffer Shells**: Offsets/buffers 2D `SlicePaths`. Supports rotated offsetting and multiple miter types.
|
|
- **Buffer Curve**: Buffers open/closed curves using Shapely, allowing open path offsetting.
|
|
- **Cap Style**: Style of the curve ends (Round, Flat, Square).
|
|
- **Join Style**: Style of corner joins (Round, Mitre, Bevel).
|
|
- **Single Sided**: Buffers only on one side of the curve if enabled.
|
|
- **Distance**: The buffer distance.
|
|
- **Rotation**: Optional Euler rotation for non-planar offsetting.
|
|
- **Offset Curve**: Offsets/shifts open/closed curves by a distance using Shapely, producing parallel curves.
|
|
- **Join Style**: Style of corner joins (Round, Mitre, Bevel).
|
|
- **Distance**: The offset distance (positive for left side, negative for right side).
|
|
- **Rotation**: Optional Euler rotation for non-planar offsetting.
|
|
- **Infill**: Generates a cross-hatch grid or parallel lines clipped by boundary paths.
|
|
- **Infill Type**: Switch between **Grid** (cross-hatch) and **Rectilinear** (alternating parallel lines).
|
|
- **Density**: Distance between lines in units.
|
|
- **Infill Rotation**: Base rotation of the infill pattern.
|
|
- **Layer Rotation**: Rotation of the entire slice to align infill with specific planes.
|
|
- **Get Infill Mask**: Computes the intersection of all closed paths in each group (layer) using Shapely.
|
|
- **Overhang Mask**: Computes the accumulated overhang mask for each layer, propagating support requirements from top to bottom.
|
|
- **Boolean Paths**: Performs 2D boolean operations (`UNION`, `INTERSECTION`, `DIFFERENCE`, `XOR`) on multiple slice sets.
|
|
- **Arrange Slicing Group**: Arranges the slicing collections in a slicing group on the build plate using the `libnest2d` bin-packing library. It nests their 2D bounding boxes to prevent collisions.
|
|
- **Method**: Switch between **NFP** (No-Fit Polygon placer + First-Fit selection), **Bottom-Left** (Bottom-Left placer + First-Fit selection), and **DJD Heuristic** (No-Fit Polygon placer + Dyckhoff's heuristic).
|
|
- **Allow Rotations**: Toggle whether to allow rotating objects (by 90-degree steps) during nesting.
|
|
- **Bed X / Y**: The build plate dimensions in mm.
|
|
- **Spacing**: The minimum distance between arranged objects in mm.
|
|
|
|
### Utility & Joiners
|
|
- **Join Mesh**: Merges multiple `SlicingObject` instances into one.
|
|
- **Join Paths**: Combines multiple `SlicePaths`. Supports Sequential or Interleaved modes.
|
|
- **Join Gcode**: Concatenates multiple G-code strings.
|
|
- **Join Settings**: Sequentially merges multiple override dictionaries. Later inputs overwrite earlier ones for matching keys.
|
|
- **Integer Math**: Simple integer operations (Add, Multiply, etc.).
|
|
|
|
### Action & I/O
|
|
- **Paths to Gcode**: Converts `SlicePaths` into G-code blocks.
|
|
- **Header**: Toggles the generation of standard NodeSlicer G-code headers and units setup.
|
|
- **Load Gcode**: Reads a G-code file from disk.
|
|
- **Gcode to File**: Writes G-code string to a file on disk.
|
|
- **Automatic Binary Conversion**: If the G-code contains the comment `; binary_gcode = 1`, the node automatically converts the output to Prusa's binary G-code format (`.bgcode`) using MeatPack encoding and Heatshrink compression.
|
|
- **Mesh to PDF**: Generates a 1:1 true-scale 2D top-view (+Z orthographic) vector PDF from a `SlicingGroup` or `SlicingCollection` with a custom grid and background color.
|
|
- **Geometry**: Input socket accepting a `SlicingGroup`, `SlicingCollection`, or `SlicingObject`.
|
|
- **Folder**: Target folder or PDF file path on disk.
|
|
- **Settings**: Input socket accepting configuration settings or attribute names to render as `<name>: <value>` next to each object.
|
|
- **Wireframe**: Checkbox to render all projected 3D wireframe edges.
|
|
- **Boundary (1 Face)**: Checkbox to render open mesh boundary edges owned by only 1 face.
|
|
- **Contour**: Checkbox to render outer boundary silhouette contour.
|
|
- **Crease Angle**: Checkbox to render crease lines above specified dihedral angle.
|
|
- **Bounding Box**: Checkbox to render the 2D bounding box rectangle of each `SlicingObject`.
|
|
- **BBox Color**: Color picker for the bounding box rectangle lines (default blue).
|
|
- **Show Name**: Checkbox to render the object name to the right of the rightmost vertex of each `SlicingObject`.
|
|
- **Bounding Box Sizes**: Checkbox to render 2D bounding box size dimensions (e.g. `X: 120mm Y: 230mm` or `X: 1.2m Y: 2.3m`) next to each object label.
|
|
- **Holes**: Checkbox to render circular bore/hole diameter callouts (Ø) with ISO 129-1 compliant markings.
|
|
- **Arcs**: Checkbox to render arc cutouts and corner fillet radius callouts (R) with ISO 129-1 compliant markings.
|
|
- **Chamfers**: Checkbox to render bevel/chamfer callouts (C) with ISO 129-1 compliant markings.
|
|
- **Step Features**: Checkbox to render interior step/notch feature segment length callouts with ISO 129-1 compliant markings.
|
|
- **Line Width (mm)**: Stroke width in millimeters for the exported lines. Set to 0 for automatic sizing (5% of minor grid spacing).
|
|
- **Font Size (pt)**: Font size in PostScript points for all text labels and measurement callouts. Set to 0 for automatic sizing (equal to minor grid spacing).
|
|
- **Margin (mm)**: Margin around the geometry grid in mm.
|
|
- **Background**: Color picker for the canvas background.
|
|
- **Wireframe**: Color picker for the wireframe lines and grid.
|
|
- **Baserow Submit**: Sends G-code and metadata to a Baserow database.
|
|
- **Host**: Baserow host URL.
|
|
- **Token File**: Path to a file containing the Baserow API token.
|
|
- **Table ID**: The ID of the target Baserow table.
|
|
- **Record ID**: Optional ID of an existing record to update.
|
|
- **Gcode Field**: The name of the attachment field in Baserow.
|
|
- **Airtable Submit**: Sends G-code and metadata to an Airtable base.
|
|
- **PAT File**: Path to a file containing the Airtable Personal Access Token (PAT).
|
|
- **Base ID**: The ID of the target Airtable base.
|
|
- **Table ID**: The ID or name of the target Airtable table.
|
|
- **Record ID**: Optional ID of an existing record to update.
|
|
- **Gcode Field**: The name of the attachment field in Airtable.
|
|
- **PrusaSlicer Slice**: Exports the current mesh and configuration to a 3MF file and calls PrusaSlicer to generate G-code.
|
|
- **Executable**: Path to the PrusaSlicer executable.
|
|
- **Object**: The Blender object to slice.
|
|
- **Config**: PrusaSlicer configuration (from the **PrusaSlicer Config** node).
|
|
- **Gcode**: Output socket providing the generated G-code string.
|
|
- **Gcode to Text Block**: Creates a new Blender text block containing the G-code and opens it in any active text editors.
|
|
- **Gcode to Preview Mesh**: Decodes G-code and creates a Blender mesh ("Debug" object) for visualization.
|
|
- **PrusaSlicer Preview**: Launches PrusaSlicer's built-in G-code viewer to visualize a G-code string.
|
|
- **Executable**: Path to the PrusaSlicer executable (default: `flatpak run com.prusa3d.PrusaSlicer`).
|
|
- **Gcode**: Input socket for the G-code string to preview.
|
|
- **Test**: Triggers evaluation for debugging purposes.
|