6 KiB
6 KiB
Settings Management
Summary
MatterControl uses a hierarchical settings system managing printer configurations, slicer parameters, and user preferences. Settings are organized into profiles with inheritance, preset support, and real-time validation.
Technical Description
Architecture
ProfileManager
├── ActiveProfiles (list of printer profiles)
└── PrinterSettings (per printer)
├── BaseLayer (OEM defaults)
├── OemLayer (manufacturer overrides)
├── UserLayer (user customizations)
└── MaterialPresets / QualityPresets
PrinterSettings Class
Central settings container with layered overrides:
public class PrinterSettings
{
public SettingsLayer OemLayer { get; }
public SettingsLayer UserLayer { get; }
public List<SettingsLayer> MaterialPresets { get; }
public List<SettingsLayer> QualityPresets { get; }
public string GetValue(string key);
public T GetValue<T>(string key);
public void SetValue(string key, string value);
}
Settings Layers
Settings resolution from highest to lowest priority:
- UserLayer - User customizations
- ActiveQualityPreset - Quality preset (Draft/Normal/Fine)
- ActiveMaterialPreset - Material preset (PLA/ABS/etc.)
- OemLayer - Manufacturer overrides
- BaseLayer - Application defaults
SettingsKey Constants
All settings keys defined in SettingsKey static class:
| Category | Sample Keys |
|---|---|
| Printer | printer_name, build_height, bed_size |
| Layer | layer_height, first_layer_height |
| Perimeters | perimeters, external_perimeter_speed |
| Infill | fill_density, infill_type |
| Support | support_material, support_type |
| Temperature | temperature, bed_temperature |
| Speed | travel_speed, perimeter_speed |
| Retraction | retract_length, retract_speed |
| G-code | start_gcode, end_gcode |
Profile Management
ProfileManager handles profile lifecycle:
public class ProfileManager
{
public static ProfileManager Instance { get; }
public IEnumerable<PrinterInfo> ActiveProfiles { get; }
public static Task<PrinterSettings> LoadSettingsAsync(string profileId);
public void SaveSettings(PrinterSettings settings);
public void DeleteProfile(string profileId);
}
Settings Validation
SettingsValidation checks configuration consistency:
| Check | Description |
|---|---|
| Temperature bounds | Min/max temperature limits |
| Speed limits | Reasonable speed ranges |
| Layer height | Compatible with nozzle diameter |
| Retraction | Valid retraction settings |
| Bed size | Build volume constraints |
UI Components
SliceSettingsWidget:
SliceSettingsWidget
├── Category Tabs (General, Infill, Support, etc.)
├── Settings Sections
│ └── SliceSettingsRow (individual settings)
└── PresetsToolbar
├── Material Preset Selector
└── Quality Preset Selector
SliceSettingsRow:
- Label and value editor
- Reset to default button
- Override indicator
- Help tooltip
Preset System
Material Presets:
- PLA, ABS, PETG, TPU, etc.
- Temperature profiles
- Retraction settings
- Fan settings
Quality Presets:
- Draft (fast, low quality)
- Normal (balanced)
- Fine (slow, high quality)
- Custom user presets
OEM Customization
Manufacturers can provide custom profiles via:
StaticData/
├── Printers/
│ └── {Manufacturer}/
│ └── {Model}.printer
│ ├── base.ini
│ ├── material_pla.ini
│ └── quality_normal.ini
└── OEMSettings/
└── OEMProfile.json
Settings Events
| Event | Description |
|---|---|
SettingChanged |
Individual setting modified |
AnyPrinterSettingChanged |
Static event for any printer |
ActiveProfileModified |
Active profile changed |
Design Rationale
Layered Settings: Inheritance hierarchy provides:
- Clear override semantics
- Easy reset to defaults
- Manufacturer customization
- User freedom to modify
Preset System: Separating presets allows:
- Quick switching between materials/quality
- Consistent printing results
- OEM-tuned profiles
Key-Value Model: String-based settings enable:
- Flexible storage
- Easy serialization
- Runtime modification
Reference
Core Classes
| Class | Location | Description |
|---|---|---|
PrinterSettings |
SlicerConfiguration/Settings/PrinterSettings.cs | Settings container |
SettingsLayer |
SlicerConfiguration/Settings/SettingsLayer.cs | Settings layer |
ProfileManager |
SlicerConfiguration/Settings/ProfileManager.cs | Profile manager |
SettingsKey |
SlicerConfiguration/Settings/SettingsKey.cs | Key constants |
UI Components
| Class | Location | Description |
|---|---|---|
SliceSettingsWidget |
SlicerConfiguration/SliceSettingsWidget.cs | Settings panel |
SliceSettingsRow |
SlicerConfiguration/SliceSettingsRow.cs | Settings row |
PresetSelectorWidget |
SlicerConfiguration/PresetSelectorWidget.cs | Preset dropdown |
Application Settings
| Class | Location | Description |
|---|---|---|
ApplicationSettings |
SettingsManagement/ApplicationSettings.cs | App-level settings |
UserSettings |
SettingsManagement/UserSettings.cs | User preferences |
OemSettings |
SettingsManagement/OemSettings.cs | OEM config |