2.7 KiB
2.7 KiB
PrusaSlicer Profiles Module
This module handles the parsing, management, and evaluation of PrusaSlicer configuration profiles (.ini files). It supports profile inheritance, compatibility evaluation using PrusaSlicer's expression language, and generating merged configurations for slicing.
Core Components
1. profiles.py
ProfileClass: Represents a single PrusaSlicer profile (Printer, Filament, or Print).- Stores configuration as a dictionary (
conf_dict). - Handles inheritance logic via
generate_inherited_confs. - Supports compatibility checks via
evaluate_compatibility.
- Stores configuration as a dictionary (
generate_confFunction: Recursively merges inherited profiles into a single configuration dictionary.
2. profile_cache.py
LocalCacheClass: Manages a collection of profiles loaded from disk.- Scans directories for
.inifiles and tracks changes using file metadata. - Categorizes profiles into
printers,print, andfilament. evaluate_compatibility: Checks which filament and print profiles are compatible with specific printer profiles.generate_conf_writer: Creates aConfigWriterby merging a printer, print, and one or more filament profiles (multi-extruder support).
- Scans directories for
ConfigWriterClass: Helper to write the merged configuration to a file (e.g., for passing to a slicer or embedding in a 3MF).- Utility Functions:
ini_to_dictandini_content_to_dictuseConfigParserto parse PrusaSlicer's INI format.
3. expression_parser.py
- Implements a recursive descent parser for PrusaSlicer's expression language (used in
compatible_printers_conditionand similar fields). - AST Nodes:
ExprNode,LiteralNode,VarNode,IndexNode,UnaryOpNode,BinaryOpNode. ParserClass: Tokenizes and parses expression strings into an AST that can be evaluated against a configuration dictionary.
4. prusaslicer_fields.py
- Loads metadata about PrusaSlicer configuration fields from
prusaslicer_fields.jsonandprusaslicer_modifier_fields.csv. - Provides
search_in_dbandsearch_in_mod_dbfor looking up field definitions, types, and labels.
Data Files
prusaslicer_fields.json: Exhaustive database of PrusaSlicer settings, including types, default values, and labels.prusaslicer_modifier_fields.csv: List of fields that are valid as modifiers.
Typical Workflow
- Initialize
LocalCache. - Call
cache.load([paths_to_profiles]). - Select a printer, print, and filament profile(s).
- (Optional) Evaluate compatibility using
cache.evaluate_compatibility. - Generate a merged config using
cache.generate_conf_writer. - Use
ConfigWriterto output the final configuration for slicing.