nodeslicer/AGENTS.md
2026-08-03 13:24:59 +03:00

2.8 KiB

NodeSlicer Agent Instructions

Project Overview

NodeSlicer is a high-performance Blender extension providing a custom node-based interface for mesh slicing and G-code generation.

Critical Context

  • Purpose: 3D printing slicing, CNC toolpathing, and procedural geometry tasks
  • Main Technologies: Python, Blender API (bpy), NumPy, Pyclipper, Shapely
  • Blender Version: 4.2 or newer (required for the Extension platform)
  • Architecture: Separates Blender-specific UI and data capture (infra/) from core geometric and slicing algorithms (core/)

Development Conventions

Registration

All Blender classes (Nodes, Sockets, Operators, Menus) must be decorated with @register_class from registry.py to ensure they are registered correctly during initialization.

Node Evaluation

Nodes follow a pull-based evaluation model. Use resolve_input(self.inputs.get("SocketName")) within a node's evaluate_output method to trigger the evaluation of upstream nodes.

Performance

For any geometry processing, prioritize NumPy vectorized operations over standard Python loops to maintain high performance.

Scaling

2D polygon operations via Pyclipper use a SCALE factor (defined in core/slice.py) to convert floats to integers, as Pyclipper operates in integer space.

Type Hinting

Use exhaustive type hints for all new functions and classes.

Documentation

Update doc/NODES.md when adding new nodes and doc/MODULES.md when adding new modules.

Project Structure

  • __init__.py: Main entry point. Defines the NodeSlicer Tree, custom Sockets, and all Nodes.
  • registry.py: Utility for automatic registration of Blender classes using the @register_class decorator.
  • core/slice.py: Core slicing engine (plane-mesh intersection), buffering (offsetting), and infill generation.
  • core/geometry.py: Shared geometry utility functions.
  • infra/blender_mesh_capture.py: Logic for extracting mesh data from Blender objects into NumPy arrays.
  • infra/blender_slice_nodes_generic.py: Base classes for the node system and the evaluation logic (resolve_input).
  • doc/: Comprehensive documentation on modules and nodes.

Commands

  • Build the extension: ./build.sh (generates a zip file in the release/ directory)
  • Install dependencies: uv sync

Testing & Token Efficiency

  • Tests are located in the tests/ directory
  • Requires the virtual environment: source .venv/bin/activate or .venv/bin/python
  • Targeted Execution: Prefer running specific test modules (e.g. .venv/bin/python -m unittest tests.test_pdf_exporter) over running full test discovery.
  • Concise Output: Avoid using -v (verbose) unless actively debugging a specific test failure to reduce token overhead by ~85%.
  • Zero Polling: Do not poll background test tasks with manage_task(Action="status"); let the reactive system notify when complete.