Orca filament library and support cross-vendor/machine filament reuse (#8057)

# Description

1. Implement a centralized Orca filament library. Previously, OrcaSlicer
required that filament profiles be contained within a printer vendor's
profiles, making it impractical to add printer-vendor-independent
filament profiles. With this new implementation, Orca now supports a
centralized filament library, accommodating all filament vendors for any
printer, or offering specialized versions for specific printer models.
![Screenshot 2025-01-15 at 11 06
32 PM](https://github.com/user-attachments/assets/341c092d-78c0-4226-828e-860c3b26923a)

2. Support the reuse of filaments across various vendors and machines
Users can now share any personal filament and print configurations
across all printers.


https://github.com/user-attachments/assets/5c324d07-7bbf-4913-8abf-2506a255759f


<!--
> Please provide a summary of the changes made in this PR. Include
details such as:
  > * What issue does this PR address or fix?
  > * What new features or enhancements does this PR introduce?
> * Are there any breaking changes or dependencies that need to be
considered?
-->

# Screenshots/Recordings/Graphs

<!--
> Please attach relevant screenshots to showcase the UI changes.
> Please attach images that can help explain the changes.
-->

## Tests

<!--
> Please describe the tests that you have conducted to verify the
changes made in this PR.
-->
This commit is contained in:
SoftFever 2025-01-24 22:12:51 +08:00 committed by GitHub
commit e0faedc891
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
66 changed files with 1022 additions and 2078 deletions

View File

@ -36,3 +36,4 @@ The guide below takes you through the key calibration tests in Orca - flow rate,
- [How to build Orca Slicer](./How-to-build) - [How to build Orca Slicer](./How-to-build)
- [Localization and translation guide](Localization_guide) - [Localization and translation guide](Localization_guide)
- [Developer Reference](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/developer-reference/Home.md) - [Developer Reference](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/developer-reference/Home.md)
- [How to create profiles](./How-to-create-profiles)

View File

@ -0,0 +1,180 @@
# Guide: Develop Profiles for OrcaSlicer
## Introduction
This guide will help you develop profiles for OrcaSlicer.
## High-level Overview
OrcaSlicer uses JSON files to store profiles. There are four types of profiles:
1. Printer model (type `machine_model`). Example: `Orca 3D Fuse1.json`
2. Printer variant (type `machine`). Example: `Orca 3D Fuse1 0.2 nozzle.json`
3. Filament (type `filament`). Example: `Generic PLA @Orca 3D Fuse1@.json`
4. Process (type `process`). Example: `0.10mm Standard @Orca 3D Fuse1 0.2.json`
Additionally, there is an overall meta file for each vendor (`Orca 3D.json`).
For easier understanding, let's consider a scenario with a printer manufacturer called `Orca 3D`. The manufacturer offers one printer model called `Fuse 1`, which supports 0.2/0.4/0.6/0.8mm nozzles and common market filaments.
In this case:
- Vendor profile: `Orca 3D`
- Printer profile: `Orca 3D Fuse1`
- Printer variant profile: `Orca 3D Fuse1 0.4 nozzle`
- Filament profile: `Generic PLA @Orca 3D Fuse1@`
- Process profile: `0.20mm Standard @Orca 3D Fuse1 0.4`
The profile name should be same as the filename without the `.json` extension in principal.
Naming conventions:
1. Vendor profile: `vendor_name.json`
2. Printer profile: `vendor_name` + `printer_name` + `.json`
3. Printer variant profile: `vendor_name` + `printer_variant_name` + `.json` (where `printer_variant_name` typically includes `printer_name` + `nozzle_diameter`)
4. Filament profile: `filament_vendor_name` + `filament_name` + " @" + `vendor_name` + `printer_name`/`printer_variant_name` + `.json`
5. Process profile: `layer_height` + `preset_name` + " @" + `vendor_name` + `printer_name`/`printer_variant_name` + `.json` (`preset_name` typically includes "standard," "fine," "fast," "draft," etc.)
A typical file structure for a vendor:
```
resources\profiles\
- Orca 3D.json
- Orca 3D\
- machine\
- Orca 3D Fuse1.json
- Orca 3D Fuse1 0.2 nozzle.json
- Orca 3D Fuse1 0.4 nozzle.json
- process\
- 0.10mm Standard @Orca 3D Fuse1 0.2.json
- 0.20mm Standard @Orca 3D Fuse1 0.4.json
- filament\
- Generic PLA @Orca 3D Fuse1@.json
```
**NOTE 1**: Use short vendor names in filenames to avoid excessive length.
**NOTE 2**: Filament profiles are **optional**. Create them only if the vendor has specifically tuned profiles for the given printer. See [Filament profiles](#filament-profiles) for details.
## Filament Profiles
OrcaSlicer features a global filament library called `OrcaFilamentLibrary`, which is automatically available for all printers. It includes generic filaments like `Generic PLA @System` and `Generic ABS @System` etc.
Printer vendors can override specific filaments in the global library for certain printer models by creating new filament profiles.
Relationship diagram:
```mermaid
graph TD;
OrcaFilamentLibrary-->Orca_3D_filament;
OrcaFilamentLibrary-->Vendor_A_filament;
OrcaFilamentLibrary-->Vendor_B_filament;
```
**NOTE**: Create new filament profiles only if you have truly specifically tuned the filament for the given printer. Otherwise, use the global library. The global library has a better chance to receive optimizations and updates from OrcaSlicer contributors, which will benefit users of all printers.
### Adding Filament Profiles to the Global Library
In this section, we will discuss how to add a new filament profile into the global library.
If you want to add a new generic profile into the global library, you need to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament` folder. If a base type already exists in the global library, you can use this file as a base profile by inheriting it.
The following sample JSON file shows how to create a new generic filament profile `Generic PLA-GF @System` in the global library.
1. The first step is to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament` folder. The file name should be `Generic PLA-GF @System.json`. Please note that we leave the `compatible_printers` field empty so that it is available for all printers.
```json
{
"type": "filament",
"filament_id": "GFL99",
"setting_id": "GFSA05",
"name": "Generic PLA-GF @System",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_type": ["PLA-GF"],
"filament_flow_ratio": [
"0.96"
],
"compatible_printers": []
}
```
2. Register the profile in `resources\profiles\OrcaFilamentLibrary.json`:
```json
{
"name": "OrcaFilamentLibrary",
"version": "02.02.00.04",
"force_update": "0",
"description": "Orca Filament Library",
"filament_list": [
// ...
{
"name": "Generic PLA-GF @System",
"sub_path": "filament/Generic PLA-GF @System.json"
}
]
}
```
3. The last step is to validate the newly added filament profiles. You can run OrcaSlicer to verify if the filament you just added is available and usable. You can also use the [Orca profile validator](https://github.com/SoftFever/Orca_tools/releases/tag/1) tool to help debug any errors. **NOTE**: You need to delete the `%appdata%/OrcaSlicer/system` folder to force OrcaSlicer to reload your lastest changes.
The process is the same if you want to add a new brand filament profile into the global library. You need to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament\brand_name` folder. The only difference is that you should put the file into the brand's own subfolder.`resources\profiles\OrcaFilamentLibrary\filament\brand_name`.
### Adding Filament Profiles to Printer Vendor Library
In this section, we will discuss how to add a new filament profile for a certain vendor.
If you want to add a new filament profile, whether it's a brand new profile or a specialized version of a global filament profile for a given printer, you need to create a new file in the `resources\profiles\vendor_name\filament` folder. If a base type already exists in the global library, you can use this file as a base profile by inheriting it.
Below is a sample JSON file showing how to create a specialized `Generic ABS` filament profile for the ToolChanger printer.
Please note that here we must leave the compatible_printers field non-empty, unlike in the global library.
```json
{
"type": "filament",
"setting_id": "GFB99_MTC_0",
"name": "Generic ABS @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "Generic ABS @System",
"filament_cooling_final_speed": [
"3.5"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_moves": [
"2"
],
"filament_load_time": [
"10.5"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
],
"filament_unload_time": [
"8.5"
],
"filament_unloading_speed": [
"100"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}
```
## Process Profiles
WIP...
## Printer Profiles
WIP...
## Printer Variant Profiles
WIP...

View File

@ -1,6 +1,6 @@
{ {
"name": "Custom Printer", "name": "Custom Printer",
"version": "02.02.00.04", "version": "02.02.00.05",
"force_update": "0", "force_update": "0",
"description": "My configurations", "description": "My configurations",
"machine_model_list": [ "machine_model_list": [
@ -173,120 +173,44 @@
], ],
"filament_list": [ "filament_list": [
{ {
"name": "fdm_filament_common", "name": "Generic PLA @MyToolChanger",
"sub_path": "filament/fdm_filament_common.json" "sub_path": "filament/Generic PLA @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_pla", "name": "Generic PLA-CF @MyToolChanger",
"sub_path": "filament/fdm_filament_pla.json" "sub_path": "filament/Generic PLA-CF @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_tpu", "name": "Generic PETG @MyToolChanger",
"sub_path": "filament/fdm_filament_tpu.json" "sub_path": "filament/Generic PETG @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_pet", "name": "Generic ABS @MyToolChanger",
"sub_path": "filament/fdm_filament_pet.json" "sub_path": "filament/Generic ABS @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_abs", "name": "Generic TPU @MyToolChanger",
"sub_path": "filament/fdm_filament_abs.json" "sub_path": "filament/Generic TPU @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_pc", "name": "Generic ASA @MyToolChanger",
"sub_path": "filament/fdm_filament_pc.json" "sub_path": "filament/Generic ASA @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_asa", "name": "Generic PC @MyToolChanger",
"sub_path": "filament/fdm_filament_asa.json" "sub_path": "filament/Generic PC @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_pva", "name": "Generic PVA @MyToolChanger",
"sub_path": "filament/fdm_filament_pva.json" "sub_path": "filament/Generic PVA @MyToolChanger.json"
}, },
{ {
"name": "fdm_filament_pa", "name": "Generic PA @MyToolChanger",
"sub_path": "filament/fdm_filament_pa.json" "sub_path": "filament/Generic PA @MyToolChanger.json"
}, },
{ {
"name": "My Generic PLA", "name": "Generic PA-CF @MyToolChanger",
"sub_path": "filament/My Generic PLA.json" "sub_path": "filament/Generic PA-CF @MyToolChanger.json"
},
{
"name": "My Generic PLA-CF",
"sub_path": "filament/My Generic PLA-CF.json"
},
{
"name": "My Generic PETG",
"sub_path": "filament/My Generic PETG.json"
},
{
"name": "My Generic ABS",
"sub_path": "filament/My Generic ABS.json"
},
{
"name": "My Generic TPU",
"sub_path": "filament/My Generic TPU.json"
},
{
"name": "My Generic ASA",
"sub_path": "filament/My Generic ASA.json"
},
{
"name": "My Generic PC",
"sub_path": "filament/My Generic PC.json"
},
{
"name": "My Generic PVA",
"sub_path": "filament/My Generic PVA.json"
},
{
"name": "My Generic PA",
"sub_path": "filament/My Generic PA.json"
},
{
"name": "My Generic PA-CF",
"sub_path": "filament/My Generic PA-CF.json"
},
{
"name": "My Generic PLA @MyToolChanger",
"sub_path": "filament/My Generic PLA @MyToolChanger.json"
},
{
"name": "My Generic PLA-CF @MyToolChanger",
"sub_path": "filament/My Generic PLA-CF @MyToolChanger.json"
},
{
"name": "My Generic PETG @MyToolChanger",
"sub_path": "filament/My Generic PETG @MyToolChanger.json"
},
{
"name": "My Generic ABS @MyToolChanger",
"sub_path": "filament/My Generic ABS @MyToolChanger.json"
},
{
"name": "My Generic TPU @MyToolChanger",
"sub_path": "filament/My Generic TPU @MyToolChanger.json"
},
{
"name": "My Generic ASA @MyToolChanger",
"sub_path": "filament/My Generic ASA @MyToolChanger.json"
},
{
"name": "My Generic PC @MyToolChanger",
"sub_path": "filament/My Generic PC @MyToolChanger.json"
},
{
"name": "My Generic PVA @MyToolChanger",
"sub_path": "filament/My Generic PVA @MyToolChanger.json"
},
{
"name": "My Generic PA @MyToolChanger",
"sub_path": "filament/My Generic PA @MyToolChanger.json"
},
{
"name": "My Generic PA-CF @MyToolChanger",
"sub_path": "filament/My Generic PA-CF @MyToolChanger.json"
} }
], ],
"machine_list": [ "machine_list": [

View File

@ -1,17 +1,11 @@
{ {
"type": "filament", "type": "filament",
"filament_id": "GFB99",
"setting_id": "GFB99_MTC_0", "setting_id": "GFB99_MTC_0",
"name": "My Generic ABS @MyToolChanger", "name": "Generic ABS @MyToolChanger",
"renamed_from": "My Generic ABS @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_abs", "inherits": "Generic ABS @System",
"filament_flow_ratio": [
"0.926"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_cooling_final_speed": [ "filament_cooling_final_speed": [
"3.5" "3.5"
], ],

View File

@ -1,17 +1,11 @@
{ {
"type": "filament", "type": "filament",
"filament_id": "GFB98",
"setting_id": "GFB98_MTC_0", "setting_id": "GFB98_MTC_0",
"name": "My Generic ASA @MyToolChanger", "name": "Generic ASA @MyToolChanger",
"renamed_from": "My Generic ASA @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_asa", "inherits": "Generic ASA @System",
"filament_flow_ratio": [
"0.93"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_cooling_final_speed": [ "filament_cooling_final_speed": [
"3.5" "3.5"
], ],

View File

@ -1,20 +1,11 @@
{ {
"type": "filament", "type": "filament",
"filament_id": "GFN99",
"setting_id": "GFN99_MTC_0", "setting_id": "GFN99_MTC_0",
"name": "My Generic PA @MyToolChanger", "name": "Generic PA @MyToolChanger",
"renamed_from": "My Generic PA @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_pa", "inherits": "Generic PA @System",
"nozzle_temperature_initial_layer": [
"280"
],
"nozzle_temperature": [
"280"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_cooling_final_speed": [ "filament_cooling_final_speed": [
"3.5" "3.5"
], ],

View File

@ -0,0 +1,51 @@
{
"type": "filament",
"setting_id": "GFN98_MTC_0",
"name": "Generic PA-CF @MyToolChanger",
"renamed_from": "My Generic PA-CF @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "Generic PA-CF @System",
"filament_cooling_final_speed": [
"3.5"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_moves": [
"2"
],
"filament_load_time": [
"10.5"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
],
"filament_unload_time": [
"8.5"
],
"filament_unloading_speed": [
"100"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}

View File

@ -2,16 +2,11 @@
"type": "filament", "type": "filament",
"filament_id": "GFC99", "filament_id": "GFC99",
"setting_id": "GFC99_MTC_0", "setting_id": "GFC99_MTC_0",
"name": "My Generic PC @MyToolChanger", "name": "Generic PC @MyToolChanger",
"renamed_from": "My Generic PC @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_pc", "inherits": "Generic PC @System",
"filament_max_volumetric_speed": [
"12"
],
"filament_flow_ratio": [
"0.94"
],
"filament_cooling_final_speed": [ "filament_cooling_final_speed": [
"3.5" "3.5"
], ],

View File

@ -0,0 +1,52 @@
{
"type": "filament",
"filament_id": "GFG99",
"setting_id": "GFG99_MTC_0",
"name": "Generic PETG @MyToolChanger",
"renamed_from": "My Generic PETG @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "Generic PETG @System",
"filament_cooling_final_speed": [
"3.5"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_moves": [
"2"
],
"filament_load_time": [
"10.5"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
],
"filament_unload_time": [
"8.5"
],
"filament_unloading_speed": [
"100"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}

View File

@ -2,19 +2,11 @@
"type": "filament", "type": "filament",
"filament_id": "GFL99", "filament_id": "GFL99",
"setting_id": "GFL99_MTC_0", "setting_id": "GFL99_MTC_0",
"name": "My Generic PLA @MyToolChanger", "name": "Generic PLA @MyToolChanger",
"renamed_from": "My Generic PLA @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_pla", "inherits": "Generic PLA @System",
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"8"
],
"filament_cooling_final_speed": [ "filament_cooling_final_speed": [
"3.5" "3.5"
], ],

View File

@ -2,22 +2,11 @@
"type": "filament", "type": "filament",
"filament_id": "GFL98", "filament_id": "GFL98",
"setting_id": "GFL98_MTC_0", "setting_id": "GFL98_MTC_0",
"name": "My Generic PLA-CF @MyToolChanger", "name": "Generic PLA-CF @MyToolChanger",
"renamed_from": "My Generic PLA-CF @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_pla", "inherits": "Generic PLA-CF @System",
"filament_flow_ratio": [
"0.95"
],
"filament_type": [
"PLA-CF"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"7"
],
"filament_cooling_final_speed": [ "filament_cooling_final_speed": [
"3.5" "3.5"
], ],

View File

@ -0,0 +1,52 @@
{
"type": "filament",
"filament_id": "GFS99",
"setting_id": "GFS99_MTC_0",
"name": "Generic PVA @MyToolChanger",
"renamed_from": "My Generic PVA @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "Generic PVA @System",
"filament_cooling_final_speed": [
"3.5"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_moves": [
"2"
],
"filament_load_time": [
"10.5"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
],
"filament_unload_time": [
"8.5"
],
"filament_unloading_speed": [
"100"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}

View File

@ -2,10 +2,11 @@
"type": "filament", "type": "filament",
"filament_id": "GFU99", "filament_id": "GFU99",
"setting_id": "GFU99_MTC_0", "setting_id": "GFU99_MTC_0",
"name": "My Generic TPU @MyToolChanger", "name": "Generic TPU @MyToolChanger",
"renamed_from": "My Generic TPU @MyToolChanger",
"from": "system", "from": "system",
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_filament_tpu", "inherits": "Generic TPU @System",
"filament_max_volumetric_speed": [ "filament_max_volumetric_speed": [
"3.2" "3.2"
], ],

View File

@ -1,23 +0,0 @@
{
"type": "filament",
"filament_id": "GFB99",
"setting_id": "GFSA04",
"name": "My Generic ABS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.926"
],
"filament_max_volumetric_speed": [
"12"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,23 +0,0 @@
{
"type": "filament",
"filament_id": "GFB98",
"setting_id": "GFSA04",
"name": "My Generic ASA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_asa",
"filament_flow_ratio": [
"0.93"
],
"filament_max_volumetric_speed": [
"12"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,63 +0,0 @@
{
"type": "filament",
"filament_id": "GFN98",
"setting_id": "GFN98_MTC_0",
"name": "My Generic PA-CF @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pa",
"filament_type": [
"PA-CF"
],
"nozzle_temperature_initial_layer": [
"280"
],
"nozzle_temperature": [
"280"
],
"filament_max_volumetric_speed": [
"8"
],
"filament_cooling_final_speed": [
"3.5"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_moves": [
"2"
],
"filament_load_time": [
"10.5"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
],
"filament_unload_time": [
"8.5"
],
"filament_unloading_speed": [
"100"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}

View File

@ -1,29 +0,0 @@
{
"type": "filament",
"filament_id": "GFN98",
"setting_id": "GFSA04",
"name": "My Generic PA-CF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pa",
"filament_type": [
"PA-CF"
],
"nozzle_temperature_initial_layer": [
"280"
],
"nozzle_temperature": [
"280"
],
"filament_max_volumetric_speed": [
"8"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,26 +0,0 @@
{
"type": "filament",
"filament_id": "GFN99",
"setting_id": "GFSA04",
"name": "My Generic PA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pa",
"nozzle_temperature_initial_layer": [
"280"
],
"nozzle_temperature": [
"280"
],
"filament_max_volumetric_speed": [
"12"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,23 +0,0 @@
{
"type": "filament",
"filament_id": "GFC99",
"setting_id": "GFSA04",
"name": "My Generic PC",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pc",
"filament_max_volumetric_speed": [
"12"
],
"filament_flow_ratio": [
"0.94"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,87 +0,0 @@
{
"type": "filament",
"filament_id": "GFG99",
"setting_id": "GFG99_MTC_0",
"name": "My Generic PETG @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pet",
"reduce_fan_stop_start_freq": [
"1"
],
"slow_down_for_layer_cooling": [
"1"
],
"fan_cooling_layer_time": [
"30"
],
"overhang_fan_speed": [
"90"
],
"overhang_fan_threshold": [
"25%"
],
"fan_max_speed": [
"90"
],
"fan_min_speed": [
"40"
],
"slow_down_min_speed": [
"10"
],
"slow_down_layer_time": [
"8"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"10"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"filament_cooling_final_speed": [
"3.5"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_moves": [
"2"
],
"filament_load_time": [
"10.5"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"40"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
],
"filament_unload_time": [
"8.5"
],
"filament_unloading_speed": [
"100"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}

View File

@ -1,53 +0,0 @@
{
"type": "filament",
"filament_id": "GFG99",
"setting_id": "GFSA04",
"name": "My Generic PETG",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pet",
"reduce_fan_stop_start_freq": [
"1"
],
"slow_down_for_layer_cooling": [
"1"
],
"fan_cooling_layer_time": [
"30"
],
"overhang_fan_speed": [
"90"
],
"overhang_fan_threshold": [
"25%"
],
"fan_max_speed": [
"90"
],
"fan_min_speed": [
"40"
],
"slow_down_min_speed": [
"10"
],
"slow_down_layer_time": [
"8"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"10"
],
"filament_start_gcode": [
"; filament start gcode\n"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,29 +0,0 @@
{
"type": "filament",
"filament_id": "GFL98",
"setting_id": "GFSA04",
"name": "My Generic PLA-CF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_flow_ratio": [
"0.95"
],
"filament_type": [
"PLA-CF"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"7"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,26 +0,0 @@
{
"type": "filament",
"filament_id": "GFL99",
"setting_id": "GFSA04",
"name": "My Generic PLA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"8"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,27 +0,0 @@
{
"type": "filament",
"filament_id": "GFS99",
"setting_id": "GFS99_MTC_0",
"name": "My Generic PVA @MyToolChanger",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pva",
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"7"
],
"slow_down_min_speed": [
"10"
],
"compatible_printers": [
"MyToolChanger 0.4 nozzle",
"MyToolChanger 0.2 nozzle",
"MyToolChanger 0.6 nozzle",
"MyToolChanger 0.8 nozzle"
]
}

View File

@ -1,29 +0,0 @@
{
"type": "filament",
"filament_id": "GFS99",
"setting_id": "GFSA04",
"name": "My Generic PVA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pva",
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"7"
],
"slow_down_min_speed": [
"10"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -1,20 +0,0 @@
{
"type": "filament",
"filament_id": "GFU99",
"setting_id": "GFSA04",
"name": "My Generic TPU",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_tpu",
"filament_max_volumetric_speed": [
"3.2"
],
"compatible_printers": [
"MyKlipper 0.4 nozzle",
"MyKlipper 0.2 nozzle",
"MyKlipper 0.6 nozzle",
"MyKlipper 0.8 nozzle",
"MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
]
}

View File

@ -8,5 +8,5 @@
"bed_model": "", "bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg", "bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "", "hotend_model": "",
"default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
} }

View File

@ -8,5 +8,5 @@
"bed_model": "", "bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg", "bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "", "hotend_model": "",
"default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
} }

View File

@ -8,5 +8,5 @@
"bed_model": "", "bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg", "bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "", "hotend_model": "",
"default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
} }

View File

@ -8,5 +8,5 @@
"bed_model": "Custom_350_bed.stl", "bed_model": "Custom_350_bed.stl",
"bed_texture": "orcaslicer_bed_texture.svg", "bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "", "hotend_model": "",
"default_materials": "My Generic PLA @MyToolChanger;My Generic ABS @MyToolChanger;My Generic PLA-CF @MyToolChanger;My Generic PETG @MyToolChanger;My Generic TPU @MyToolChanger;My Generic ASA @MyToolChanger;My Generic PC @MyToolChanger;My Generic PVA @MyToolChanger;My Generic PA @MyToolChanger;My Generic PA-CF @MyToolChanger" "default_materials": "Generic PLA @MyToolChanger;Generic ABS @MyToolChanger;Generic PLA-CF @MyToolChanger;Generic PETG @MyToolChanger;Generic TPU @MyToolChanger;Generic ASA @MyToolChanger;Generic PC @MyToolChanger;Generic PVA @MyToolChanger;Generic PA @MyToolChanger;Generic PA-CF @MyToolChanger"
} }

View File

@ -0,0 +1,84 @@
{
"name": "OrcaFilamentLibrary",
"version": "02.02.00.04",
"force_update": "0",
"description": "Orca Filament Library",
"filament_list": [
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
{
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "fdm_filament_pet",
"sub_path": "filament/fdm_filament_pet.json"
},
{
"name": "fdm_filament_abs",
"sub_path": "filament/fdm_filament_abs.json"
},
{
"name": "fdm_filament_pc",
"sub_path": "filament/fdm_filament_pc.json"
},
{
"name": "fdm_filament_asa",
"sub_path": "filament/fdm_filament_asa.json"
},
{
"name": "fdm_filament_pva",
"sub_path": "filament/fdm_filament_pva.json"
},
{
"name": "fdm_filament_pa",
"sub_path": "filament/fdm_filament_pa.json"
},
{
"name": "Generic PLA @System",
"sub_path": "filament/Generic PLA @System.json"
},
{
"name": "Generic PLA-CF @System",
"sub_path": "filament/Generic PLA-CF @System.json"
},
{
"name": "Generic PETG @System",
"sub_path": "filament/Generic PETG @System.json"
},
{
"name": "Generic ABS @System",
"sub_path": "filament/Generic ABS @System.json"
},
{
"name": "Generic TPU @System",
"sub_path": "filament/Generic TPU @System.json"
},
{
"name": "Generic ASA @System",
"sub_path": "filament/Generic ASA @System.json"
},
{
"name": "Generic PC @System",
"sub_path": "filament/Generic PC @System.json"
},
{
"name": "Generic PVA @System",
"sub_path": "filament/Generic PVA @System.json"
},
{
"name": "Generic PA @System",
"sub_path": "filament/Generic PA @System.json"
},
{
"name": "Generic PA-CF @System",
"sub_path": "filament/Generic PA-CF @System.json"
}
]
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFB99",
"setting_id": "GFSA04",
"name": "Generic ABS @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic ABS",
"inherits": "fdm_filament_abs",
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFB98",
"setting_id": "GFSA04",
"name": "Generic ASA @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic ASA",
"inherits": "fdm_filament_asa",
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFN99",
"setting_id": "GFSA04",
"name": "Generic PA @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PA",
"inherits": "fdm_filament_pa",
"compatible_printers": []
}

View File

@ -0,0 +1,14 @@
{
"type": "filament",
"filament_id": "GFN98",
"setting_id": "GFSA04",
"name": "Generic PA-CF @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PA-CF",
"inherits": "fdm_filament_pa",
"filament_type": [
"PA-CF"
],
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFC99",
"setting_id": "GFSA04",
"name": "Generic PC @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PC",
"inherits": "fdm_filament_pc",
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFG99",
"setting_id": "GFSA04",
"name": "Generic PETG @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PETG",
"inherits": "fdm_filament_pet",
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFL99",
"setting_id": "GFSA04",
"name": "Generic PLA @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PLA",
"inherits": "fdm_filament_pla",
"compatible_printers": []
}

View File

@ -0,0 +1,17 @@
{
"type": "filament",
"filament_id": "GFL98",
"setting_id": "GFSA04",
"name": "Generic PLA-CF @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PLA-CF",
"inherits": "fdm_filament_pla",
"filament_flow_ratio": [
"0.95"
],
"filament_type": [
"PLA-CF"
],
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFS99",
"setting_id": "GFSA04",
"name": "Generic PVA @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic PVA",
"inherits": "fdm_filament_pva",
"compatible_printers": []
}

View File

@ -0,0 +1,11 @@
{
"type": "filament",
"filament_id": "GFU99",
"setting_id": "GFSA04",
"name": "Generic TPU @System",
"from": "system",
"instantiation": "true",
"renamed_from": "My Generic TPU",
"inherits": "fdm_filament_tpu",
"compatible_printers": []
}

View File

@ -4,28 +4,28 @@
"from": "system", "from": "system",
"instantiation": "false", "instantiation": "false",
"inherits": "fdm_filament_common", "inherits": "fdm_filament_common",
"cool_plate_temp" : [ "cool_plate_temp": [
"105" "105"
], ],
"eng_plate_temp" : [ "eng_plate_temp": [
"105" "105"
], ],
"hot_plate_temp" : [ "hot_plate_temp": [
"105" "105"
], ],
"textured_plate_temp" : [ "textured_plate_temp": [
"105" "105"
], ],
"cool_plate_temp_initial_layer" : [ "cool_plate_temp_initial_layer": [
"105" "105"
], ],
"eng_plate_temp_initial_layer" : [ "eng_plate_temp_initial_layer": [
"105" "105"
], ],
"hot_plate_temp_initial_layer" : [ "hot_plate_temp_initial_layer": [
"105" "105"
], ],
"textured_plate_temp_initial_layer" : [ "textured_plate_temp_initial_layer": [
"105" "105"
], ],
"slow_down_for_layer_cooling": [ "slow_down_for_layer_cooling": [
@ -37,9 +37,6 @@
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"30" "30"
], ],
"filament_max_volumetric_speed": [
"28.6"
],
"filament_type": [ "filament_type": [
"ABS" "ABS"
], ],
@ -84,5 +81,11 @@
], ],
"slow_down_layer_time": [ "slow_down_layer_time": [
"3" "3"
],
"filament_flow_ratio": [
"0.926"
],
"filament_max_volumetric_speed": [
"12"
] ]
} }

View File

@ -37,9 +37,6 @@
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"35" "35"
], ],
"filament_max_volumetric_speed": [
"28.6"
],
"filament_type": [ "filament_type": [
"ASA" "ASA"
], ],
@ -84,5 +81,11 @@
], ],
"slow_down_layer_time": [ "slow_down_layer_time": [
"3" "3"
],
"filament_flow_ratio": [
"0.93"
],
"filament_max_volumetric_speed": [
"12"
] ]
} }

View File

@ -37,9 +37,6 @@
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"4" "4"
], ],
"filament_max_volumetric_speed": [
"8"
],
"filament_type": [ "filament_type": [
"PA" "PA"
], ],
@ -49,9 +46,6 @@
"filament_cost": [ "filament_cost": [
"20" "20"
], ],
"nozzle_temperature_initial_layer": [
"290"
],
"reduce_fan_stop_start_freq": [ "reduce_fan_stop_start_freq": [
"0" "0"
], ],
@ -64,9 +58,6 @@
"overhang_fan_speed": [ "overhang_fan_speed": [
"30" "30"
], ],
"nozzle_temperature": [
"290"
],
"temperature_vitrification": [ "temperature_vitrification": [
"108" "108"
], ],
@ -81,5 +72,14 @@
], ],
"slow_down_layer_time": [ "slow_down_layer_time": [
"2" "2"
],
"nozzle_temperature_initial_layer": [
"290"
],
"nozzle_temperature": [
"290"
],
"filament_max_volumetric_speed": [
"10"
] ]
} }

View File

@ -37,9 +37,6 @@
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"30" "30"
], ],
"filament_max_volumetric_speed": [
"23.2"
],
"filament_type": [ "filament_type": [
"PC" "PC"
], ],
@ -84,5 +81,11 @@
], ],
"slow_down_layer_time": [ "slow_down_layer_time": [
"2" "2"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_flow_ratio": [
"0.94"
] ]
} }

View File

@ -28,18 +28,9 @@
"textured_plate_temp_initial_layer" : [ "textured_plate_temp_initial_layer" : [
"80" "80"
], ],
"slow_down_for_layer_cooling": [
"1"
],
"close_fan_the_first_x_layers": [ "close_fan_the_first_x_layers": [
"3" "3"
], ],
"fan_cooling_layer_time": [
"20"
],
"filament_max_volumetric_speed": [
"25"
],
"filament_type": [ "filament_type": [
"PETG" "PETG"
], ],
@ -52,18 +43,6 @@
"nozzle_temperature_initial_layer": [ "nozzle_temperature_initial_layer": [
"255" "255"
], ],
"reduce_fan_stop_start_freq": [
"1"
],
"fan_max_speed": [
"100"
],
"fan_min_speed": [
"20"
],
"overhang_fan_speed": [
"100"
],
"nozzle_temperature": [ "nozzle_temperature": [
"255" "255"
], ],
@ -78,5 +57,38 @@
], ],
"filament_start_gcode": [ "filament_start_gcode": [
"; filament start gcode\n" "; filament start gcode\n"
],
"reduce_fan_stop_start_freq": [
"1"
],
"slow_down_for_layer_cooling": [
"1"
],
"fan_cooling_layer_time": [
"30"
],
"overhang_fan_speed": [
"90"
],
"overhang_fan_threshold": [
"25%"
],
"fan_max_speed": [
"90"
],
"fan_min_speed": [
"40"
],
"slow_down_min_speed": [
"10"
],
"slow_down_layer_time": [
"8"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"10"
] ]
} }

View File

@ -7,9 +7,6 @@
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"100" "100"
], ],
"filament_max_volumetric_speed": [
"12"
],
"filament_type": [ "filament_type": [
"PLA" "PLA"
], ],
@ -19,28 +16,28 @@
"filament_cost": [ "filament_cost": [
"20" "20"
], ],
"cool_plate_temp" : [ "cool_plate_temp": [
"60" "60"
], ],
"eng_plate_temp" : [ "eng_plate_temp": [
"60" "60"
], ],
"hot_plate_temp" : [ "hot_plate_temp": [
"60" "60"
], ],
"textured_plate_temp" : [ "textured_plate_temp": [
"60" "60"
], ],
"cool_plate_temp_initial_layer" : [ "cool_plate_temp_initial_layer": [
"60" "60"
], ],
"eng_plate_temp_initial_layer" : [ "eng_plate_temp_initial_layer": [
"60" "60"
], ],
"hot_plate_temp_initial_layer" : [ "hot_plate_temp_initial_layer": [
"60" "60"
], ],
"textured_plate_temp_initial_layer" : [ "textured_plate_temp_initial_layer": [
"60" "60"
], ],
"nozzle_temperature_initial_layer": [ "nozzle_temperature_initial_layer": [
@ -82,13 +79,19 @@
"slow_down_min_speed": [ "slow_down_min_speed": [
"10" "10"
], ],
"slow_down_layer_time": [
"4"
],
"additional_cooling_fan_speed": [ "additional_cooling_fan_speed": [
"70" "70"
], ],
"filament_start_gcode": [ "filament_start_gcode": [
"; filament start gcode\n" "; filament start gcode\n"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"6"
] ]
} }

View File

@ -4,36 +4,33 @@
"from": "system", "from": "system",
"instantiation": "false", "instantiation": "false",
"inherits": "fdm_filament_common", "inherits": "fdm_filament_common",
"cool_plate_temp" : [ "cool_plate_temp": [
"35" "35"
], ],
"eng_plate_temp" : [ "eng_plate_temp": [
"0" "0"
], ],
"hot_plate_temp" : [ "hot_plate_temp": [
"45" "45"
], ],
"textured_plate_temp" : [ "textured_plate_temp": [
"45" "45"
], ],
"cool_plate_temp_initial_layer" : [ "cool_plate_temp_initial_layer": [
"35" "35"
], ],
"eng_plate_temp_initial_layer" : [ "eng_plate_temp_initial_layer": [
"0" "0"
], ],
"hot_plate_temp_initial_layer" : [ "hot_plate_temp_initial_layer": [
"45" "45"
], ],
"textured_plate_temp_initial_layer" : [ "textured_plate_temp_initial_layer": [
"45" "45"
], ],
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"100" "100"
], ],
"filament_max_volumetric_speed": [
"15"
],
"filament_soluble": [ "filament_soluble": [
"1" "1"
], ],
@ -85,16 +82,22 @@
"nozzle_temperature_range_high": [ "nozzle_temperature_range_high": [
"250" "250"
], ],
"slow_down_min_speed": [
"10"
],
"slow_down_layer_time": [
"4"
],
"additional_cooling_fan_speed": [ "additional_cooling_fan_speed": [
"70" "70"
], ],
"filament_start_gcode": [ "filament_start_gcode": [
"; filament start gcode\n" "; filament start gcode\n"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"12"
],
"slow_down_layer_time": [
"7"
],
"slow_down_min_speed": [
"10"
] ]
} }

View File

@ -4,36 +4,33 @@
"from": "system", "from": "system",
"instantiation": "false", "instantiation": "false",
"inherits": "fdm_filament_common", "inherits": "fdm_filament_common",
"cool_plate_temp" : [ "cool_plate_temp": [
"30" "30"
], ],
"eng_plate_temp" : [ "eng_plate_temp": [
"30" "30"
], ],
"hot_plate_temp" : [ "hot_plate_temp": [
"35" "35"
], ],
"textured_plate_temp" : [ "textured_plate_temp": [
"35" "35"
], ],
"cool_plate_temp_initial_layer" : [ "cool_plate_temp_initial_layer": [
"30" "30"
], ],
"eng_plate_temp_initial_layer" : [ "eng_plate_temp_initial_layer": [
"30" "30"
], ],
"hot_plate_temp_initial_layer" : [ "hot_plate_temp_initial_layer": [
"35" "35"
], ],
"textured_plate_temp_initial_layer" : [ "textured_plate_temp_initial_layer": [
"35" "35"
], ],
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"100" "100"
], ],
"filament_max_volumetric_speed": [
"15"
],
"filament_type": [ "filament_type": [
"TPU" "TPU"
], ],
@ -84,5 +81,8 @@
], ],
"filament_start_gcode": [ "filament_start_gcode": [
"; filament start gcode\n" "; filament start gcode\n"
],
"filament_max_volumetric_speed": [
"3.2"
] ]
} }

View File

@ -2,7 +2,7 @@
var m_ProfileItem; var m_ProfileItem;
var FilamentPriority=new Array( "pla","abs","pet","tpu","pc"); var FilamentPriority=new Array( "pla","abs","pet","tpu","pc");
var VendorPriority=new Array("bambu lab","bambulab","bbl","kexcelled","polymaker","esun","generic"); var VendorPriority=new Array("Orca Built-in","bambu lab","bambulab","bbl","kexcelled","polymaker","esun","Generic");
function OnInit() function OnInit()
{ {
@ -139,7 +139,7 @@ function SortUI()
if( fModel=='') if( fModel=='')
{ {
// Orca: hide // Orca: hide
bFind=false; bFind=true;
} }
else else
{ {
@ -199,7 +199,11 @@ function SortUI()
let strModel=pFila.attr("model"); let strModel=pFila.attr("model");
let strFilalist=pFila.attr("filalist"); let strFilalist=pFila.attr("filalist");
pFila.attr("model", strModel+fModel); if(strModel == '' || fModel == '')
pFila.attr("model", '');
else
pFila.attr("model", strModel+fModel);
pFila.attr("filalist", strFilalist+fWholeName+';'); pFila.attr("filalist", strFilalist+fWholeName+';');
} }

View File

@ -71,29 +71,6 @@ function SortUI()
ModelList.push(OneMode); ModelList.push(OneMode);
} }
//machine
// let HtmlMachine='';
//
// let nMachine=m_ProfileItem['machine'].length;
// for(let n=0;n<nMachine;n++)
// {
// let OneMachine=m_ProfileItem['machine'][n];
//
// let sName=OneMachine['name'];
// let sModel=OneMachine['model'];
//
// if( ModelList.in_array(sModel) )
// {
// HtmlMachine+='<div><input type="checkbox" mode="'+sModel+'" onChange="MachineClick()" />'+sName+'</div>';
// }
// }
//
// $('#MachineList .CValues').append(HtmlMachine);
// $('#MachineList .CValues input').prop("checked",true);
// if(nMachine<=1)
// {
// $('#MachineList').hide();
// }
//model //model
let HtmlMode=''; let HtmlMode='';
@ -131,15 +108,6 @@ function SortUI()
let fSelect=OneFila['selected']; let fSelect=OneFila['selected'];
let fModel=OneFila['models'] let fModel=OneFila['models']
//alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel );
// if(OneFila['name'].indexOf("Bambu PA-CF")>=0)
// {
// alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel )
//
// let b=1+2;
// }
let bFind=false; let bFind=false;
//let bCheck=$("#MachineList input:first").prop("checked"); //let bCheck=$("#MachineList input:first").prop("checked");
if( fModel=='') if( fModel=='')
@ -204,7 +172,10 @@ function SortUI()
let strModel=pFila.attr("model"); let strModel=pFila.attr("model");
let strFilalist=pFila.attr("filalist"); let strFilalist=pFila.attr("filalist");
pFila.attr("model", strModel+fModel); if(strModel == '' || fModel == '')
pFila.attr("model", '');
else
pFila.attr("model", strModel+fModel);
pFila.attr("filalist", strFilalist+fWholeName+';'); pFila.attr("filalist", strFilalist+fWholeName+';');
} }

View File

@ -147,6 +147,8 @@ int main(int argc, char* argv[])
std::cout << "Validation failed" << std::endl; std::cout << "Validation failed" << std::endl;
return 1; return 1;
} }
// Report loaded presets
std::cout << "Total loaded vendors: " << preset_bundle->vendors.size() << std::endl;
if (generate_user_preset) { if (generate_user_preset) {
generate_custom_presets(preset_bundle, app_config); generate_custom_presets(preset_bundle, app_config);

View File

@ -839,8 +839,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
} }
else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) { else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) {
key_values.emplace(BBL_JSON_KEY_INHERITS, it.value()); key_values.emplace(BBL_JSON_KEY_INHERITS, it.value());
} } else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) {
else { key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value());
} else {
t_config_option_key opt_key = it.key(); t_config_option_key opt_key = it.key();
std::string value_str; std::string value_str;

View File

@ -576,9 +576,10 @@ std::string Preset::label(bool no_alias) const
bool is_compatible_with_print(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_print, const PresetWithVendorProfile &active_printer) bool is_compatible_with_print(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_print, const PresetWithVendorProfile &active_printer)
{ {
if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) // Orca: we allow cross vendor compatibility
// The current profile has a vendor assigned and it is different from the active print's vendor. // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor)
return false; // // The current profile has a vendor assigned and it is different from the active print's vendor.
// return false;
auto &condition = preset.preset.compatible_prints_condition(); auto &condition = preset.preset.compatible_prints_condition();
auto *compatible_prints = dynamic_cast<const ConfigOptionStrings*>(preset.preset.config.option("compatible_prints")); auto *compatible_prints = dynamic_cast<const ConfigOptionStrings*>(preset.preset.config.option("compatible_prints"));
bool has_compatible_prints = compatible_prints != nullptr && ! compatible_prints->values.empty(); bool has_compatible_prints = compatible_prints != nullptr && ! compatible_prints->values.empty();
@ -613,9 +614,19 @@ bool is_compatible_with_parent_printer(const PresetWithVendorProfile& preset, co
bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer, const DynamicPrintConfig *extra_config) bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer, const DynamicPrintConfig *extra_config)
{ {
if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) // Orca: we allow cross vendor compatibility
// The current profile has a vendor assigned and it is different from the active print's vendor. // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor)
return false; // // The current profile has a vendor assigned and it is different from the active print's vendor.
// return false;
// Orca: check excluded printers
if (preset.vendor != nullptr && preset.preset.type == Preset::TYPE_FILAMENT) {
const auto& excluded_printers = preset.preset.m_excluded_from;
const auto excluded = preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY &&
excluded_printers.find(active_printer.preset.name) != excluded_printers.end();
if (excluded)
return false;
}
auto &condition = preset.preset.compatible_printers_condition(); auto &condition = preset.preset.compatible_printers_condition();
auto *compatible_printers = dynamic_cast<const ConfigOptionStrings*>(preset.preset.config.option("compatible_printers")); auto *compatible_printers = dynamic_cast<const ConfigOptionStrings*>(preset.preset.config.option("compatible_printers"));
bool has_compatible_printers = compatible_printers != nullptr && ! compatible_printers->values.empty(); bool has_compatible_printers = compatible_printers != nullptr && ! compatible_printers->values.empty();
@ -629,10 +640,9 @@ bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const Pre
} }
} }
return preset.preset.is_default || active_printer.preset.name.empty() || !has_compatible_printers || return preset.preset.is_default || active_printer.preset.name.empty() || !has_compatible_printers ||
std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.preset.name) != std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.preset.name) !=
compatible_printers->values.end() compatible_printers->values.end() ||
//BBS (!active_printer.preset.is_system && is_compatible_with_parent_printer(preset, active_printer));
|| (!active_printer.preset.is_system && is_compatible_with_parent_printer(preset, active_printer));
} }
bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer) bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer)
@ -1145,7 +1155,7 @@ void PresetCollection::load_presets(
if (key_values.find("instantiation") != key_values.end()) if (key_values.find("instantiation") != key_values.end())
preset.is_visible = key_values["instantiation"] != "false"; preset.is_visible = key_values["instantiation"] != "false";
//BBS: use inherit config as the base //Orca: find and use the inherit config as the base
Preset* inherit_preset = nullptr; Preset* inherit_preset = nullptr;
ConfigOption* inherits_config = config.option(BBL_JSON_KEY_INHERITS); ConfigOption* inherits_config = config.option(BBL_JSON_KEY_INHERITS);
@ -1154,6 +1164,12 @@ void PresetCollection::load_presets(
ConfigOptionString * option_str = dynamic_cast<ConfigOptionString *> (inherits_config); ConfigOptionString * option_str = dynamic_cast<ConfigOptionString *> (inherits_config);
std::string inherits_value = option_str->value; std::string inherits_value = option_str->value;
inherit_preset = this->find_preset(inherits_value, false, true); inherit_preset = this->find_preset(inherits_value, false, true);
// Orca: try to find if the parent preset has been renamed
if (inherit_preset == nullptr) {
auto it = this->find_preset_renamed(inherits_value);
if (it != m_presets.end())
inherit_preset = &(*it);
}
} else { } else {
; ;
} }
@ -2123,6 +2139,7 @@ bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets,
auto &preset = new_presets.back(); auto &preset = new_presets.back();
preset.vendor = nullptr; preset.vendor = nullptr;
preset.renamed_from.clear(); preset.renamed_from.clear();
preset.m_excluded_from.clear();
preset.setting_id.clear(); preset.setting_id.clear();
preset.inherits().clear(); preset.inherits().clear();
preset.is_default = false; preset.is_default = false;
@ -2251,6 +2268,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det
preset.inherits().clear(); preset.inherits().clear();
preset.alias.clear(); preset.alias.clear();
preset.renamed_from.clear(); preset.renamed_from.clear();
preset.m_excluded_from.clear();
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": save preset %1% , with detach")%new_name; BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": save preset %1% , with detach")%new_name;
} }
//BBS: add lock logic for sync preset in background //BBS: add lock logic for sync preset in background
@ -2278,6 +2296,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det
preset.vendor = nullptr; preset.vendor = nullptr;
preset.alias.clear(); preset.alias.clear();
preset.renamed_from.clear(); preset.renamed_from.clear();
preset.m_excluded_from.clear();
preset.setting_id.clear(); preset.setting_id.clear();
if (detach) { if (detach) {
// Clear the link to the parent profile. // Clear the link to the parent profile.
@ -2525,6 +2544,17 @@ Preset* PresetCollection::find_preset(const std::string &name, bool first_visibl
first_visible_if_not_found ? &this->first_visible() : nullptr; first_visible_if_not_found ? &this->first_visible() : nullptr;
} }
const Preset* PresetCollection::find_preset2(const std::string& name) const
{
auto preset = const_cast<PresetCollection*>(this)->find_preset(name, false, true);
if (preset == nullptr) {
auto _name = get_preset_name_renamed(name);
if(_name != nullptr)
preset = const_cast<PresetCollection*>(this)->find_preset(*_name, false, true);
}
return preset;
}
// Return index of the first visible preset. Certainly at least the '- default -' preset shall be visible. // Return index of the first visible preset. Certainly at least the '- default -' preset shall be visible.
size_t PresetCollection::first_visible_idx() const size_t PresetCollection::first_visible_idx() const
{ {
@ -2859,6 +2889,38 @@ void PresetCollection::update_map_alias_to_profile_name()
//std::sort(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [](auto &l, auto &r) { return l.first < r.first; }); //std::sort(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [](auto &l, auto &r) { return l.first < r.first; });
} }
void PresetCollection::update_library_profile_excluded_from()
{
// Orca: Collect all filament presets that has empty compatible_printers and belongs to the Orca Filament Library.
std::map<std::string, std::set<std::string>*> excluded_froms;
for (Preset& preset : m_presets) {
if (preset.vendor != nullptr && preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) {
// check if the preset has empty compatible_printers
const auto* compatible_printers = dynamic_cast<const ConfigOptionStrings*>(preset.config.option("compatible_printers"));
if (compatible_printers == nullptr || compatible_printers->values.empty())
excluded_froms[preset.alias] = &preset.m_excluded_from;
}
}
// Check all presets that has the same alias as the filament presets with empty compatible_printers in Orca Filament Library.
for (const Preset& preset : m_presets) {
if (preset.vendor == nullptr || preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY)
continue;
const auto* compatible_printers = dynamic_cast<const ConfigOptionStrings*>(preset.config.option("compatible_printers"));
// All profiles in concrete vendor profile shouldn't have empty compatible_printers, but here we check it for safety.
if (compatible_printers == nullptr || compatible_printers->values.empty())
continue;
auto itr = excluded_froms.find(preset.alias);
if (itr != excluded_froms.end()) {
// Add the printer models to the excluded_from list.
for (const std::string& printer_name : compatible_printers->values) {
itr->second->insert(printer_name);
}
}
}
}
void PresetCollection::update_map_system_profile_renamed() void PresetCollection::update_map_system_profile_renamed()
{ {
m_map_system_profile_renamed.clear(); m_map_system_profile_renamed.clear();

View File

@ -3,6 +3,7 @@
#include <deque> #include <deque>
#include <set> #include <set>
#include <string>
#include <unordered_map> #include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include <functional> #include <functional>
@ -63,7 +64,8 @@
#define BBL_JSON_KEY_DEFAULT_MATERIALS "default_materials" #define BBL_JSON_KEY_DEFAULT_MATERIALS "default_materials"
#define BBL_JSON_KEY_MODEL_ID "model_id" #define BBL_JSON_KEY_MODEL_ID "model_id"
//BBL: json path // Orca extension
#define ORCA_JSON_KEY_RENAMED_FROM "renamed_from"
namespace Slic3r { namespace Slic3r {
@ -232,6 +234,11 @@ public:
// and to match the "inherits" field of user profiles with updated system profiles. // and to match the "inherits" field of user profiles with updated system profiles.
std::vector<std::string> renamed_from; std::vector<std::string> renamed_from;
// Orca: maintain a list of printer models that are excluded from this preset, designed for filaments without compatible_printer defined
// (hence they are visible to all printer models by default) in Orca Filament Library. However, we might have speciliazed filament for
// certain printer models defined in the vendor profile as well, in this case we want to hide this generic preset for these printer models.
std::set<std::string> m_excluded_from;
//BBS //BBS
Semver version; // version of preset Semver version; // version of preset
std::string ini_str; // ini string of preset std::string ini_str; // ini string of preset
@ -595,6 +602,8 @@ public:
Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false, bool real = false); Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false, bool real = false);
const Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false) const const Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false) const
{ return const_cast<PresetCollection*>(this)->find_preset(name, first_visible_if_not_found); } { return const_cast<PresetCollection*>(this)->find_preset(name, first_visible_if_not_found); }
// Orca: find preset, if not found, keep searching in the renamed history
const Preset* find_preset2(const std::string &name) const;
size_t first_visible_idx() const; size_t first_visible_idx() const;
// Return index of the first compatible preset. Certainly at least the '- default -' preset shall be compatible. // Return index of the first compatible preset. Certainly at least the '- default -' preset shall be compatible.
@ -718,6 +727,10 @@ protected:
// Update m_map_system_profile_renamed from loaded system profiles. // Update m_map_system_profile_renamed from loaded system profiles.
void update_map_system_profile_renamed(); void update_map_system_profile_renamed();
// Orca: update m_excluded_from loaded system profiles.
void update_library_profile_excluded_from();
void set_custom_preset_alias(Preset &preset); void set_custom_preset_alias(Preset &preset);
private: private:

File diff suppressed because it is too large Load Diff

View File

@ -160,7 +160,12 @@ public:
// and the system profiles will point to the VendorProfile instances owned by PresetBundle::vendors. // and the system profiles will point to the VendorProfile instances owned by PresetBundle::vendors.
VendorMap vendors; VendorMap vendors;
struct ObsoletePresets { // Orca: for OrcaFilamentLibrary
std::map<std::string, DynamicPrintConfig> m_config_maps;
std::map<std::string, std::string> m_filament_id_maps;
struct ObsoletePresets
{
std::vector<std::string> prints; std::vector<std::string> prints;
std::vector<std::string> sla_prints; std::vector<std::string> sla_prints;
std::vector<std::string> filaments; std::vector<std::string> filaments;
@ -212,9 +217,9 @@ public:
// Don't do any config substitutions when loading a system profile, perform and report substitutions otherwise. // Don't do any config substitutions when loading a system profile, perform and report substitutions otherwise.
/*std::pair<PresetsConfigSubstitutions, size_t> load_configbundle( /*std::pair<PresetsConfigSubstitutions, size_t> load_configbundle(
const std::string &path, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule);*/ const std::string &path, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule);*/
//BBS: add json related logic //Orca: load config bundle from json, pass the base bundle to support cross vendor inheritance
std::pair<PresetsConfigSubstitutions, size_t> load_vendor_configs_from_json( std::pair<PresetsConfigSubstitutions, size_t> load_vendor_configs_from_json(
const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule); const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr);
// Export a config bundle file containing all the presets and the names of the active presets. // Export a config bundle file containing all the presets and the names of the active presets.
//void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false); //void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false);
@ -261,11 +266,13 @@ public:
std::pair<PresetsConfigSubstitutions, std::string> load_system_filaments_json(ForwardCompatibilitySubstitutionRule compatibility_rule); std::pair<PresetsConfigSubstitutions, std::string> load_system_filaments_json(ForwardCompatibilitySubstitutionRule compatibility_rule);
VendorProfile get_custom_vendor_models() const; VendorProfile get_custom_vendor_models() const;
//BBS: add BBL as default //orca: add 'custom' as default
static const char *BBL_BUNDLE; static const char *ORCA_DEFAULT_BUNDLE;
static const char *BBL_DEFAULT_PRINTER_MODEL; static const char *ORCA_DEFAULT_PRINTER_MODEL;
static const char *BBL_DEFAULT_PRINTER_VARIANT; static const char *ORCA_DEFAULT_PRINTER_VARIANT;
static const char *BBL_DEFAULT_FILAMENT; static const char *ORCA_DEFAULT_FILAMENT;
static const char *ORCA_FILAMENT_LIBRARY;
static std::array<Preset::Type, 3> types_list(PrinterTechnology pt) { static std::array<Preset::Type, 3> types_list(PrinterTechnology pt) {
if (pt == ptFFF) if (pt == ptFFF)

View File

@ -1262,38 +1262,38 @@ void PrintConfigDef::init_fff_params()
def = this->add("compatible_printers", coStrings); def = this->add("compatible_printers", coStrings);
def->label = L("Compatible machine"); def->label = L("Compatible machine");
def->mode = comDevelop; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings()); def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
//BBS. //BBS.
def = this->add("upward_compatible_machine", coStrings); def = this->add("upward_compatible_machine", coStrings);
def->label = L("upward compatible machine"); def->label = L("upward compatible machine");
def->mode = comDevelop; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings()); def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_printers_condition", coString); def = this->add("compatible_printers_condition", coString);
def->label = L("Compatible machine condition"); def->label = L("Compatible machine condition");
//def->tooltip = L("A boolean expression using the configuration values of an active printer profile. " def->tooltip = L("A boolean expression using the configuration values of an active printer profile. "
// "If this expression evaluates to true, this profile is considered compatible " "If this expression evaluates to true, this profile is considered compatible "
// "with the active printer profile."); "with the active printer profile.");
def->mode = comDevelop; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionString()); def->set_default_value(new ConfigOptionString());
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_prints", coStrings); def = this->add("compatible_prints", coStrings);
def->label = L("Compatible process profiles"); def->label = L("Compatible process profiles");
def->mode = comDevelop; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings()); def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_prints_condition", coString); def = this->add("compatible_prints_condition", coString);
def->label = L("Compatible process profiles condition"); def->label = L("Compatible process profiles condition");
//def->tooltip = L("A boolean expression using the configuration values of an active print profile. " def->tooltip = L("A boolean expression using the configuration values of an active print profile. "
// "If this expression evaluates to true, this profile is considered compatible " "If this expression evaluates to true, this profile is considered compatible "
// "with the active print profile."); "with the active print profile.");
def->mode = comDevelop; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionString()); def->set_default_value(new ConfigOptionString());
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;

View File

@ -123,18 +123,18 @@ BundleMap BundleMap::load()
const auto vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR).make_preferred(); const auto vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR).make_preferred();
const auto rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); const auto rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred();
//BBS: add BBL as default //Orca: add custom as default
//BBS: add json logic for vendor bundle //Orca: add json logic for vendor bundle
auto bbl_bundle_path = (vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"); auto orca_bundle_path = (vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json");
auto bbl_bundle_rsrc = false; auto orca_bundle_rsrc = false;
if (!boost::filesystem::exists(bbl_bundle_path)) { if (!boost::filesystem::exists(orca_bundle_path)) {
bbl_bundle_path = (rsrc_vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"); orca_bundle_path = (rsrc_vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json");
bbl_bundle_rsrc = true; orca_bundle_rsrc = true;
} }
{ {
Bundle bbl_bundle; Bundle bbl_bundle;
if (bbl_bundle.load(std::move(bbl_bundle_path), bbl_bundle_rsrc, true)) if (bbl_bundle.load(std::move(orca_bundle_path), orca_bundle_rsrc, true))
res.emplace(PresetBundle::BBL_BUNDLE, std::move(bbl_bundle)); res.emplace(PresetBundle::ORCA_DEFAULT_BUNDLE, std::move(bbl_bundle));
} }
// Load the other bundles in the datadir/vendor directory // Load the other bundles in the datadir/vendor directory
@ -163,10 +163,10 @@ BundleMap BundleMap::load()
Bundle& BundleMap::bbl_bundle() Bundle& BundleMap::bbl_bundle()
{ {
//BBS: add BBL as default //Orca: add custom as default
auto it = find(PresetBundle::BBL_BUNDLE); auto it = find(PresetBundle::ORCA_DEFAULT_BUNDLE);
if (it == end()) { if (it == end()) {
throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: BBL_BUNDLE not loaded"); throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: ORCA_DEFAULT_BUNDLE not loaded");
} }
return it->second; return it->second;
@ -625,12 +625,11 @@ std::set<std::string> PagePrinters::get_selected_models()
void PagePrinters::set_run_reason(ConfigWizard::RunReason run_reason) void PagePrinters::set_run_reason(ConfigWizard::RunReason run_reason)
{ {
//BBS: add BBL as default //Orca: add custom as default
if (is_primary_printer_page if (is_primary_printer_page
&& (run_reason == ConfigWizard::RR_DATA_EMPTY || run_reason == ConfigWizard::RR_DATA_LEGACY) && (run_reason == ConfigWizard::RR_DATA_EMPTY || run_reason == ConfigWizard::RR_DATA_LEGACY)
&& printer_pickers.size() > 0 && printer_pickers.size() > 0
&& printer_pickers[0]->vendor_id == PresetBundle::BBL_BUNDLE) { && printer_pickers[0]->vendor_id == PresetBundle::ORCA_DEFAULT_BUNDLE) {
//BBS: select alll bbs machine by default
//printer_pickers[0]->select_one(0, true); //printer_pickers[0]->select_one(0, true);
printer_pickers[0]->select_all(true); printer_pickers[0]->select_all(true);
} }
@ -1941,8 +1940,8 @@ void ConfigWizard::priv::create_3rdparty_pages()
{ {
for (const auto &pair : bundles) { for (const auto &pair : bundles) {
const VendorProfile *vendor = pair.second.vendor_profile; const VendorProfile *vendor = pair.second.vendor_profile;
//BBS: add BBL as default //Orca: add custom as default
if (vendor->id == PresetBundle::BBL_BUNDLE) { continue; } if (vendor->id == PresetBundle::ORCA_DEFAULT_BUNDLE) { continue; }
bool is_fff_technology = false; bool is_fff_technology = false;
bool is_sla_technology = false; bool is_sla_technology = false;

View File

@ -845,7 +845,7 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle)
} }
if (filename.empty()) { if (filename.empty()) {
filename = preset_bundle->get_hotend_model_for_printer_model(PresetBundle::BBL_DEFAULT_PRINTER_MODEL); filename = preset_bundle->get_hotend_model_for_printer_model(PresetBundle::ORCA_DEFAULT_PRINTER_MODEL);
} }
} }
} }

View File

@ -4736,7 +4736,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
m_sync_update_thread = Slic3r::create_thread( m_sync_update_thread = Slic3r::create_thread(
[this, progressFn, cancelFn, finishFn, t = std::weak_ptr<int>(m_user_sync_token)] { [this, progressFn, cancelFn, finishFn, t = std::weak_ptr<int>(m_user_sync_token)] {
// get setting list, update setting list // get setting list, update setting list
std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string(); std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::ORCA_DEFAULT_BUNDLE).to_string();
int ret = m_agent->get_setting_list2(version, [this](auto info) { int ret = m_agent->get_setting_list2(version, [this](auto info) {
auto type = info[BBL_JSON_KEY_TYPE]; auto type = info[BBL_JSON_KEY_TYPE];
auto name = info[BBL_JSON_KEY_NAME]; auto name = info[BBL_JSON_KEY_NAME];

View File

@ -2382,7 +2382,6 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v
option.opt.height = 25;//250; option.opt.height = 25;//250;
optgroup->append_single_option_line(option); optgroup->append_single_option_line(option);
#if 1
page = add_options_page(L("Dependencies"), "custom-gcode_advanced"); page = add_options_page(L("Dependencies"), "custom-gcode_advanced");
optgroup = page->new_optgroup(L("Profile dependencies")); optgroup = page->new_optgroup(L("Profile dependencies"));
@ -2395,7 +2394,6 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v
optgroup->append_single_option_line(option); optgroup->append_single_option_line(option);
build_preset_description_line(optgroup.get()); build_preset_description_line(optgroup.get());
#endif
} }
// Reload current config (aka presets->edited_preset->config) into the UI fields. // Reload current config (aka presets->edited_preset->config) into the UI fields.
@ -3528,14 +3526,6 @@ void TabFilament::build()
optgroup->append_single_option_line("filament_multitool_ramming_volume"); optgroup->append_single_option_line("filament_multitool_ramming_volume");
optgroup->append_single_option_line("filament_multitool_ramming_flow"); optgroup->append_single_option_line("filament_multitool_ramming_flow");
page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders
optgroup = page->new_optgroup(L("Notes"),"note", 0);
optgroup->label_width = 0;
option = optgroup->get_option("filament_notes");
option.opt.full_width = true;
option.opt.height = notes_field_height;// 250;
optgroup->append_single_option_line(option);
#if 1
page = add_options_page(L("Dependencies"), "advanced"); page = add_options_page(L("Dependencies"), "advanced");
optgroup = page->new_optgroup(L("Profile dependencies")); optgroup = page->new_optgroup(L("Profile dependencies"));
create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) { create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) {
@ -3554,8 +3544,15 @@ void TabFilament::build()
option.opt.full_width = true; option.opt.full_width = true;
optgroup->append_single_option_line(option); optgroup->append_single_option_line(option);
page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders
optgroup = page->new_optgroup(L("Notes"),"note", 0);
optgroup->label_width = 0;
option = optgroup->get_option("filament_notes");
option.opt.full_width = true;
option.opt.height = notes_field_height;// 250;
optgroup->append_single_option_line(option);
//build_preset_description_line(optgroup.get()); //build_preset_description_line(optgroup.get());
#endif
} }
// Reload current config (aka presets->edited_preset->config) into the UI fields. // Reload current config (aka presets->edited_preset->config) into the UI fields.

View File

@ -1,9 +1,13 @@
#include "WebGuideDialog.hpp" #include "WebGuideDialog.hpp"
#include "ConfigWizard.hpp" #include "ConfigWizard.hpp"
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/iostreams/detail/select.hpp>
#include <string.h> #include <string.h>
#include "I18N.hpp" #include "I18N.hpp"
#include "libslic3r/AppConfig.hpp" #include "libslic3r/AppConfig.hpp"
#include "libslic3r/PresetBundle.hpp"
#include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/wxExtensions.hpp"
#include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_App.hpp"
#include "libslic3r_version.h" #include "libslic3r_version.h"
@ -576,13 +580,6 @@ void GuideFrame::OnError(wxWebViewEvent &evt)
void GuideFrame::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) void GuideFrame::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt))
{ {
// if (!m_response_js.empty())
//{
// RunScript(m_response_js);
//}
// RunScript("This is a message to Web!");
// RunScript("postMessage(\"AABBCCDD\");");
} }
bool GuideFrame::IsFirstUse() bool GuideFrame::IsFirstUse()
@ -592,30 +589,12 @@ bool GuideFrame::IsFirstUse()
if (strVal == "1") if (strVal == "1")
return false; return false;
if (bbl_bundle_rsrc == true) if (orca_bundle_rsrc == true)
return true; return true;
return true; return true;
} }
/*int GuideFrame::CopyDir(const boost::filesystem::path &from_dir, const boost::filesystem::path &to_dir)
{
if (!boost::filesystem::is_directory(from_dir)) return -1;
// i assume to_dir.parent surely exists
if (!boost::filesystem::is_directory(to_dir)) boost::filesystem::create_directory(to_dir);
for (auto &dir_entry : boost::filesystem::directory_iterator(from_dir)) {
if (!boost::filesystem::is_directory(dir_entry.path())) {
std::string em;
CopyFileResult cfr = copy_file(dir_entry.path().string(), (to_dir / dir_entry.path().filename()).string(), em, false);
if (cfr != SUCCESS) { BOOST_LOG_TRIVIAL(error) << "Error when copying files from " << from_dir << " to " << to_dir << ": " << em; }
} else {
CopyDir(dir_entry.path(), to_dir / dir_entry.path().filename());
}
}
return 0;
}*/
int GuideFrame::SaveProfile() int GuideFrame::SaveProfile()
{ {
// SoftFever: don't collect info // SoftFever: don't collect info
@ -633,77 +612,6 @@ int GuideFrame::SaveProfile()
m_MainPtr->app_config->save(); m_MainPtr->app_config->save();
//Load BBS Conf
/*wxString strConfPath = wxGetApp().app_config->config_path();
json jCfg;
std::ifstream(w2s(strConfPath)) >> jCfg;
//model
jCfg["models"] = json::array();
int nM = m_ProfileJson["model"].size();
int nModelChoose = 0;
for (int m = 0; m < nM; m++)
{
json amodel = m_ProfileJson["model"][m];
amodel["nozzle_diameter"] = amodel["nozzle_selected"];
amodel.erase("nozzle_selected");
amodel.erase("preview");
amodel.erase("sub_path");
amodel.erase("cover");
amodel.erase("materials");
std::string ss = amodel["nozzle_diameter"];
if (ss.compare("") != 0) {
nModelChoose++;
jCfg["models"].push_back(amodel);
}
}
if (nModelChoose == 0)
jCfg.erase("models");
if (nModelChoose > 0) {
// filament
jCfg["filaments"] = json::array();
for (auto it = m_ProfileJson["filament"].begin(); it != m_ProfileJson["filament"].end(); ++it) {
if (it.value()["selected"] == 1) { jCfg["filaments"].push_back(it.key()); }
}
// Preset
jCfg["presets"]["filaments"] = json::array();
jCfg["presets"]["filaments"].push_back(jCfg["filaments"][0]);
std::string PresetMachine = m_ProfileJson["machine"][0]["name"];
jCfg["presets"]["machine"] = PresetMachine;
int nTotal = m_ProfileJson["process"].size();
int nSet = nTotal / 2;
if (nSet > 0) nSet--;
std::string sMode = m_ProfileJson["process"][nSet]["name"];
jCfg["presets"]["process"] = sMode;
} else {
jCfg["presets"]["filaments"] = json::array();
jCfg["presets"]["filaments"].push_back("Default Filament");
jCfg["presets"]["machine"] = "Default Printer";
jCfg["presets"]["process"] = "Default Setting";
}
std::string sOut = jCfg.dump(4, ' ', false);
std::ofstream output_file(w2s(strConfPath));
output_file << sOut;
output_file.close();
//Copy Profiles
if (bbl_bundle_rsrc)
{
CopyDir(rsrc_vendor_dir,vendor_dir);
}*/
std::string strAll = m_ProfileJson.dump(-1, ' ', false, json::error_handler_t::ignore); std::string strAll = m_ProfileJson.dump(-1, ' ', false, json::error_handler_t::ignore);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "before save to app_config: "<< std::endl<<strAll; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "before save to app_config: "<< std::endl<<strAll;
@ -881,11 +789,11 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle
variant.clear(); variant.clear();
return std::string(); return std::string();
}; };
// Prusa printers are considered first, then 3rd party. // Orca "custom" printers are considered first, then 3rd party.
if (preferred_model = get_preferred_printer_model(PresetBundle::BBL_BUNDLE, preferred_variant); if (preferred_model = get_preferred_printer_model(PresetBundle::ORCA_DEFAULT_BUNDLE, preferred_variant);
preferred_model.empty()) { preferred_model.empty()) {
for (const auto& bundle : enabled_vendors) { for (const auto& bundle : enabled_vendors) {
if (bundle.first == PresetBundle::BBL_BUNDLE) { continue; } if (bundle.first == PresetBundle::ORCA_DEFAULT_BUNDLE) { continue; }
if (preferred_model = get_preferred_printer_model(bundle.first, preferred_variant); if (preferred_model = get_preferred_printer_model(bundle.first, preferred_variant);
!preferred_model.empty()) !preferred_model.empty())
break; break;
@ -962,10 +870,10 @@ bool GuideFrame::run()
//we install the default here //we install the default here
bool apply_keeped_changes = false; bool apply_keeped_changes = false;
//clear filament section and use default materials //clear filament section and use default materials
app.app_config->set_variant(PresetBundle::BBL_BUNDLE, app.app_config->set_variant(PresetBundle::ORCA_DEFAULT_BUNDLE,
PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, "true"); PresetBundle::ORCA_DEFAULT_PRINTER_MODEL, PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT, "true");
app.app_config->clear_section(AppConfig::SECTION_FILAMENTS); app.app_config->clear_section(AppConfig::SECTION_FILAMENTS);
app.preset_bundle->load_selections(*app.app_config, {PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, PresetBundle::BBL_DEFAULT_FILAMENT, std::string()}); app.preset_bundle->load_selections(*app.app_config, {PresetBundle::ORCA_DEFAULT_PRINTER_MODEL, PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT, PresetBundle::ORCA_DEFAULT_FILAMENT, std::string()});
app.app_config->set_legacy_datadir(false); app.app_config->set_legacy_datadir(false);
app.update_mode(); app.update_mode();
@ -1025,6 +933,8 @@ int GuideFrame::GetFilamentInfo( std::string VendorDirectory, json & pFilaList,
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Before Format Inherits Path: VendorDirectory - " << VendorDirectory << ", sub_path - " << FPath; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Before Format Inherits Path: VendorDirectory - " << VendorDirectory << ", sub_path - " << FPath;
wxString strNewFile = wxString::Format("%s%c%s", wxString(VendorDirectory.c_str(), wxConvUTF8), boost::filesystem::path::preferred_separator, FPath); wxString strNewFile = wxString::Format("%s%c%s", wxString(VendorDirectory.c_str(), wxConvUTF8), boost::filesystem::path::preferred_separator, FPath);
boost::filesystem::path inherits_path(w2s(strNewFile)); boost::filesystem::path inherits_path(w2s(strNewFile));
if (!boost::filesystem::exists(inherits_path))
inherits_path = (boost::filesystem::path(m_OrcaFilaLibPath) / boost::filesystem::path(FPath)).make_preferred();
//boost::filesystem::path nf(strNewFile.c_str()); //boost::filesystem::path nf(strNewFile.c_str());
if (boost::filesystem::exists(inherits_path)) if (boost::filesystem::exists(inherits_path))
@ -1066,31 +976,7 @@ int GuideFrame::GetFilamentInfo( std::string VendorDirectory, json & pFilaList,
int GuideFrame::LoadProfile() int GuideFrame::LoadProfile()
{ {
try { try {
//wxString ExePath = boost::dll::program_location().parent_path().string();
//wxString TargetFolder = ExePath + "\\resources\\profiles\\";
//wxString TargetFolderSearch = ExePath + "\\resources\\profiles\\*.json";
//intptr_t handle;
//_finddata_t findData;
//handle = _findfirst(TargetFolderSearch.mb_str(), &findData); // ???????????
//if (handle == -1) { return -1; }
//do {
// if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".."
// {
// // cout << findData.name << "\t<dir>\n";
// } else {
// wxString strVendor = wxString(findData.name).BeforeLast('.');
// LoadProfileFamily(strVendor, TargetFolder + findData.name);
// }
//} while (_findnext(handle, &findData) == 0); // ???????????
// BBS: change directories by design
//BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", will load config from %1%.") % bbl_bundle_path;
m_ProfileJson = json::parse("{}"); m_ProfileJson = json::parse("{}");
//m_ProfileJson["configpath"] = Slic3r::data_dir();
m_ProfileJson["model"] = json::array(); m_ProfileJson["model"] = json::array();
m_ProfileJson["machine"] = json::object(); m_ProfileJson["machine"] = json::object();
m_ProfileJson["filament"] = json::object(); m_ProfileJson["filament"] = json::object();
@ -1099,76 +985,63 @@ int GuideFrame::LoadProfile()
vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR ).make_preferred(); vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR ).make_preferred();
rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred();
// BBS: add BBL as default // Orca: add custom as default
// BBS: add json logic for vendor bundle // Orca: add json logic for vendor bundle
auto bbl_bundle_path = vendor_dir; orca_bundle_rsrc = true;
bbl_bundle_rsrc = false;
if (!boost::filesystem::exists((vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"))) {
bbl_bundle_path = rsrc_vendor_dir;
bbl_bundle_rsrc = true;
}
// intptr_t handle; // search if there exists a .json file in vendor_dir folder, if exists, set orca_bundle_rsrc to false
//_finddata_t findData; for (const auto& entry : boost::filesystem::directory_iterator(vendor_dir)) {
if (!boost::filesystem::is_directory(entry) && boost::iequals(entry.path().extension().string(), ".json") && !boost::iequals(entry.path().stem().string(), PresetBundle::ORCA_FILAMENT_LIBRARY)) {
//handle = _findfirst((bbl_bundle_path / "*.json").make_preferred().string().c_str(), &findData); // ??????????? orca_bundle_rsrc = false;
// if (handle == -1) { return -1; } break;
}
// do { }
// if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".."
// { // load the default filament library first
// // cout << findData.name << "\t<dir>\n"; std::set<std::string> loaded_vendors;
// } else { auto filament_library_name = boost::filesystem::path(PresetBundle::ORCA_FILAMENT_LIBRARY).replace_extension(".json");
// wxString strVendor = wxString(findData.name).BeforeLast('.'); if (boost::filesystem::exists(vendor_dir / filament_library_name)) {
// LoadProfileFamily(w2s(strVendor), vendor_dir.make_preferred().string() + "\\"+ findData.name); LoadProfileFamily(PresetBundle::ORCA_FILAMENT_LIBRARY, (vendor_dir / filament_library_name).string());
// } m_OrcaFilaLibPath = (vendor_dir / PresetBundle::ORCA_FILAMENT_LIBRARY).string();
} else {
//} while (_findnext(handle, &findData) == 0); // ??????????? LoadProfileFamily(PresetBundle::ORCA_FILAMENT_LIBRARY, (rsrc_vendor_dir / filament_library_name).string());
m_OrcaFilaLibPath = (rsrc_vendor_dir / PresetBundle::ORCA_FILAMENT_LIBRARY).string();
}
//load BBL bundle from user data path loaded_vendors.insert(PresetBundle::ORCA_FILAMENT_LIBRARY);
string targetPath = bbl_bundle_path.make_preferred().string();
boost::filesystem::path myPath(targetPath); //load custom bundle from user data path
boost::filesystem::directory_iterator endIter; boost::filesystem::directory_iterator endIter;
for (boost::filesystem::directory_iterator iter(myPath); iter != endIter; iter++) { for (boost::filesystem::directory_iterator iter(vendor_dir); iter != endIter; iter++) {
if (boost::filesystem::is_directory(*iter)) { if (!boost::filesystem::is_directory(*iter)) {
//cout << "is dir" << endl; wxString strVendor = from_u8(iter->path().string()).BeforeLast('.');
//cout << iter->path().string() << endl; strVendor = strVendor.AfterLast('\\');
} else { strVendor = strVendor.AfterLast('/');
//cout << "is a file" << endl;
//cout << iter->path().string() << endl; wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower();
if(strExtension.CmpNoCase("json") != 0 || loaded_vendors.find(w2s(strVendor)) != loaded_vendors.end())
wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); continue;
strVendor = strVendor.AfterLast('\\');
strVendor = strVendor.AfterLast('/'); LoadProfileFamily(w2s(strVendor), iter->path().string());
wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); loaded_vendors.insert(w2s(strVendor));
if (w2s(strVendor) == PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json") == 0)
LoadProfileFamily(w2s(strVendor), iter->path().string());
} }
} }
//string others_targetPath = rsrc_vendor_dir.string();
boost::filesystem::directory_iterator others_endIter; boost::filesystem::directory_iterator others_endIter;
for (boost::filesystem::directory_iterator iter(rsrc_vendor_dir); iter != others_endIter; iter++) { for (boost::filesystem::directory_iterator iter(rsrc_vendor_dir); iter != others_endIter; iter++) {
if (boost::filesystem::is_directory(*iter)) { if (!boost::filesystem::is_directory(*iter)) {
//cout << "is dir" << endl;
//cout << iter->path().string() << endl;
} else {
//cout << "is a file" << endl;
//cout << iter->path().string() << endl;
wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); wxString strVendor = from_u8(iter->path().string()).BeforeLast('.');
strVendor = strVendor.AfterLast('\\'); strVendor = strVendor.AfterLast('\\');
strVendor = strVendor.AfterLast('/'); strVendor = strVendor.AfterLast('/');
wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower();
if (strExtension.CmpNoCase("json") != 0 || loaded_vendors.find(w2s(strVendor)) != loaded_vendors.end())
continue;
if (w2s(strVendor) != PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json")==0) LoadProfileFamily(w2s(strVendor), iter->path().string());
LoadProfileFamily(w2s(strVendor), iter->path().string()); loaded_vendors.insert(w2s(strVendor));
} }
} }
//LoadProfileFamily(PresetBundle::BBL_BUNDLE, bbl_bundle_path.string());
const auto enabled_filaments = wxGetApp().app_config->has_section(AppConfig::SECTION_FILAMENTS) ? wxGetApp().app_config->get_section(AppConfig::SECTION_FILAMENTS) : std::map<std::string, std::string>(); const auto enabled_filaments = wxGetApp().app_config->has_section(AppConfig::SECTION_FILAMENTS) ? wxGetApp().app_config->get_section(AppConfig::SECTION_FILAMENTS) : std::map<std::string, std::string>();
m_appconfig_new.set_vendors(*wxGetApp().app_config); m_appconfig_new.set_vendors(*wxGetApp().app_config);
@ -1264,185 +1137,6 @@ void StringReplace(string &strBase, string strSrc, string strDes)
} }
//int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath)
//{
// //wxString strFolder = strFilePath.BeforeLast(boost::filesystem::path::preferred_separator);
// boost::filesystem::path file_path(strFilePath);
// boost::filesystem::path vendor_dir = boost::filesystem::absolute(file_path.parent_path()/ strVendor).make_preferred();
// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", vendor path %1%.")% vendor_dir.string();
// try {
//
// //wxLogMessage("GUIDE: json_path1 %s", w2s(strFilePath));
//
// std::string contents;
// LoadFile(strFilePath, contents);
// //wxLogMessage("GUIDE: json_path1 content: %s", contents);
// json jLocal=json::parse(contents);
// //wxLogMessage("GUIDE: json_path1 Loaded");
//
// // BBS:models
// json pmodels = jLocal["machine_model_list"];
// int nsize = pmodels.size();
//
// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% machine models")%nsize;
//
// for (int n = 0; n < nsize; n++) {
// json OneModel = pmodels.at(n);
//
// OneModel["model"] = OneModel["name"];
// OneModel.erase("name");
//
// std::string s1 = OneModel["model"];
// std::string s2 = OneModel["sub_path"];
//
// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
// std::string sub_file = sub_path.string();
//
// //wxLogMessage("GUIDE: json_path2 %s", w2s(ModelFilePath));
// LoadFile(sub_file, contents);
// //wxLogMessage("GUIDE: json_path2 content: %s", contents);
// json pm=json::parse(contents);
// //wxLogMessage("GUIDE: json_path2 loaded");
//
// OneModel["vendor"] = strVendor;
// std::string NozzleOpt = pm["nozzle_diameter"];
// StringReplace(NozzleOpt, " ", "");
// OneModel["nozzle_diameter"] = NozzleOpt;
// OneModel["materials"] = pm["default_materials"];
//
// //wxString strCoverPath = wxString::Format("%s\\%s\\%s_cover.png", strFolder, strVendor, std::string(s1.mb_str()));
// std::string cover_file = s1+"_cover.png";
// boost::filesystem::path cover_path = boost::filesystem::absolute(vendor_dir / cover_file).make_preferred();
// OneModel["cover"] = cover_path.string();
//
// OneModel["nozzle_selected"] = "";
//
// m_ProfileJson["model"].push_back(OneModel);
// }
//
// // BBS:Machine
// json pmachine = jLocal["machine_list"];
// nsize = pmachine.size();
// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% machines")%nsize;
// for (int n = 0; n < nsize; n++) {
// json OneMachine = pmachine.at(n);
//
// std::string s1 = OneMachine["name"];
// std::string s2 = OneMachine["sub_path"];
//
// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2);
// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
// std::string sub_file = sub_path.string();
// LoadFile(sub_file, contents);
// json pm = json::parse(contents);
//
// std::string strInstant = pm["instantiation"];
// if (strInstant.compare("true") == 0) {
// OneMachine["model"] = pm["printer_model"];
//
// m_ProfileJson["machine"].push_back(OneMachine);
// }
// }
//
// // BBS:Filament
// json pFilament = jLocal["filament_list"];
// nsize = pFilament.size();
//
// int nFalse = 0;
// int nModel = 0;
// int nFinish = 0;
// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% filaments")%nsize;
// for (int n = 0; n < nsize; n++) {
// json OneFF = pFilament.at(n);
//
// std::string s1 = OneFF["name"];
// std::string s2 = OneFF["sub_path"];
//
// if (!m_ProfileJson["filament"].contains(s1))
// {
// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2);
// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
// std::string sub_file = sub_path.string();
// LoadFile(sub_file, contents);
// json pm = json::parse(contents);
//
// std::string strInstant = pm["instantiation"];
// if (strInstant == "true") {
// std::string sV;
// std::string sT;
//
// int nRet = GetFilamentInfo(sub_file, sV, sT);
// if (nRet != 0) continue;
//
// OneFF["vendor"] = sV;
// OneFF["type"] = sT;
//
// OneFF["models"] = "";
// OneFF["selected"] = 0;
// }
// else
// continue;
//
// } else {
// OneFF = m_ProfileJson["filament"][s1];
// }
//
// std::string vModel = "";
// int nm = m_ProfileJson["model"].size();
// int bFind = 0;
// for (int m = 0; m < nm; m++) {
// std::string strFF = m_ProfileJson["model"][m]["materials"];
// strFF = (boost::format(";%1%;")%strFF).str();
// std::string strTT = (boost::format(";%1%;")%s1).str();
// if (strFF.find(strTT) != std::string::npos) {
// std::string sModel = m_ProfileJson["model"][m]["model"];
//
// vModel = (boost::format("%1%[%2%]")%vModel %sModel).str();
// bFind = 1;
// }
// }
//
// OneFF["models"] = vModel;
//
// m_ProfileJson["filament"][s1] = OneFF;
// }
//
// //process
// json pProcess = jLocal["process_list"];
// nsize = pProcess.size();
// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% processes")%nsize;
// for (int n = 0; n < nsize; n++) {
// json OneProcess = pProcess.at(n);
//
// std::string s2 = OneProcess["sub_path"];
// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2);
// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
// std::string sub_file = sub_path.string();
// LoadFile(sub_file, contents);
// json pm = json::parse(contents);
//
// std::string bInstall = pm["instantiation"];
// if (bInstall == "true")
// {
// m_ProfileJson["process"].push_back(OneProcess);
// }
// }
//
// }
// catch(nlohmann::detail::parse_error &err) {
// BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<<strFilePath <<" got a nlohmann::detail::parse_error, reason = " << err.what();
// return -1;
// }
// catch (std::exception &e) {
// // wxMessageBox(e.what(), "", MB_OK);
// //wxLogMessage("GUIDE: LoadFamily Error: %s", e.what());
// BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << strFilePath << " got exception: " << e.what();
// return -1;
// }
//
// return 0;
//}
int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath) int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath)
{ {
// wxString strFolder = strFilePath.BeforeLast(boost::filesystem::path::preferred_separator); // wxString strFolder = strFilePath.BeforeLast(boost::filesystem::path::preferred_separator);
@ -1531,7 +1225,7 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath
// BBS:Filament // BBS:Filament
json pFilament = jLocal["filament_list"]; json pFilament = jLocal["filament_list"];
json tFilaList = json::object(); json tFilaList = m_OrcaFilaList;
nsize = pFilament.size(); nsize = pFilament.size();
for (int n = 0; n < nsize; n++) { for (int n = 0; n < nsize; n++) {
@ -1604,6 +1298,8 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath
} }
} }
if(strVendor == PresetBundle::ORCA_FILAMENT_LIBRARY)
m_OrcaFilaList = tFilaList;
// process // process
json pProcess = jLocal["process_list"]; json pProcess = jLocal["process_list"];

View File

@ -103,7 +103,7 @@ private:
wxString m_SectionName; wxString m_SectionName;
bool bbl_bundle_rsrc; bool orca_bundle_rsrc;
boost::filesystem::path vendor_dir; boost::filesystem::path vendor_dir;
boost::filesystem::path rsrc_vendor_dir; boost::filesystem::path rsrc_vendor_dir;
@ -115,6 +115,9 @@ private:
bool InstallNetplugin; bool InstallNetplugin;
bool network_plugin_ready {false}; bool network_plugin_ready {false};
json m_OrcaFilaList;
std::string m_OrcaFilaLibPath;
#if wxUSE_WEBVIEW_IE #if wxUSE_WEBVIEW_IE
wxMenuItem *m_script_object_el; wxMenuItem *m_script_object_el;
wxMenuItem *m_script_date_el; wxMenuItem *m_script_date_el;

View File

@ -1071,8 +1071,7 @@ bool PresetUpdater::priv::install_bundles_rsrc(std::vector<std::string> bundles,
} }
//BBS: refine preset update logic // Orca: copy/update the vendor profiles from resource to system folder
// Install indicies from resources. Only installs those that are either missing or older than in resources.
void PresetUpdater::priv::check_installed_vendor_profiles() const void PresetUpdater::priv::check_installed_vendor_profiles() const
{ {
BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:Checking whether the profile from resource is newer"; BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:Checking whether the profile from resource is newer";
@ -1080,8 +1079,9 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const
AppConfig *app_config = GUI::wxGetApp().app_config; AppConfig *app_config = GUI::wxGetApp().app_config;
const auto enabled_vendors = app_config->vendors(); const auto enabled_vendors = app_config->vendors();
//BBS: refine the init check logic
std::vector<std::string> bundles; std::vector<std::string> bundles;
// Orca: always install filament library
bundles.push_back(PresetBundle::ORCA_FILAMENT_LIBRARY);
for (auto &dir_entry : boost::filesystem::directory_iterator(rsrc_path)) { for (auto &dir_entry : boost::filesystem::directory_iterator(rsrc_path)) {
const auto &path = dir_entry.path(); const auto &path = dir_entry.path();
std::string file_path = path.string(); std::string file_path = path.string();
@ -1111,11 +1111,11 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const
fs::remove_all(path_of_vendor); fs::remove_all(path_of_vendor);
} }
} }
else if ((vendor_name == PresetBundle::BBL_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) {//if vendor has no file, copy it from resource for BBL else if ((vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) {//if vendor has no file, copy it from resource for ORCA_DEFAULT_BUNDLE
bundles.push_back(vendor_name); bundles.push_back(vendor_name);
} }
} }
else if ((vendor_name == PresetBundle::BBL_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) { //always update configs from resource to vendor for BBL else if ((vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) { //always update configs from resource to vendor for ORCA_DEFAULT_BUNDLE
bundles.push_back(vendor_name); bundles.push_back(vendor_name);
} }
} }