diff --git a/.dockerignore b/.dockerignore index 378649ff6e..1e4911725c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -22,6 +22,7 @@ deps/build-linux/* **/.DS_Store install_* build_*/ +!build_linux.sh SVG Dockerfile DockerBuild.sh diff --git a/README.md b/README.md index eff7c96317..feb2b5ba24 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,9 @@ Optimize your prints with ultra-fast slicing, intelligent support generation, an - **[Advanced Calibration Tools](https://github.com/SoftFever/OrcaSlicer/wiki/Calibration)** Comprehensive suite: temperature towers, flow rate, retraction & more for optimal performance. -- **[Precise Wall](https://github.com/SoftFever/OrcaSlicer/wiki/Precise-wall) and [Seam Control](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_seam)** +- **[Precise Wall](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_precision#precise-wall) and [Seam Control](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_seam)** Adjust outer wall spacing and apply scarf seams to enhance print accuracy. -- **Sandwich Mode and [SuperSlicer Polyholes](https://github.com/supermerill/SuperSlicer/wiki/Polyholes) Support** +- **Sandwich Mode and [Polyholes](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_precision#polyholes) Support** Use varied infill patterns and accurate hole shapes for improved clarity. - **Overhang and Support Optimization** Modify geometry for printable overhangs with precise support placement. diff --git a/doc/Home.md b/doc/Home.md index c0738b56dd..9d775f3cb6 100644 --- a/doc/Home.md +++ b/doc/Home.md @@ -2,16 +2,25 @@ Orca slicer is a powerful open source slicer for FFF (FDM) 3D Printers. This wiki page aims to provide an detailed explanation of the slicer settings, how to get the most out of them as well as how to calibrate and setup your printer. +- [Prepare](#prepare) - [Print Settings, Tips and Tricks](#print-settings-tips-and-tricks) - [Quality Settings](#quality-settings) - [Speed Settings](#speed-settings) - - [Multi material](#multi-material) + - [Strength Settings](#strength-settings) +- [Material Settings](#material-settings) - [Printer Settings](#printer-settings) - [Printer Calibration](#printer-calibration) - [Developer Section](#developer-section) > [!NOTE] -> The Wiki is **Work In Progress** so bear with us while we get it up and running! +> The Wiki is **Work In Progress** so bear with us while we get it up and running! +> Please consider contributing to the wiki following the [How to contribute to the wiki](How-to-wiki) guide. + +## Prepare + +First steps to prepare your model/s for printing. + +- [STL Transformation](stl-transformation) ## Print Settings, Tips and Tricks @@ -22,17 +31,31 @@ The below sections provide a detailed settings explanation as well as tips and t - [Layer Height Settings](quality_settings_layer_height) - [Line Width Settings](quality_settings_line_width) - [Seam Settings](quality_settings_seam) -- [Precise wall](Precise-wall) -- [Precise Z height](precise-z-height) -- [STL Transformation](stl-transformation) +- [Precision](quality_settings_precision) + - [Precise Wall](quality_settings_precision#precise-wall) + - [Precise Z Height](quality_settings_precision#precise-z-height) + - [Slice gap closing radius](quality_settings_precision#slice-gap-closing-radius) + - [Resolution](quality_settings_precision#resolution) + - [Arc fitting](quality_settings_precision#arc-fitting) + - [X-Y Compensation](quality_settings_precision#x-y-compensation) + - [Elephant foot compensation](quality_settings_precision#elephant-foot-compensation) + - [Precise wall](quality_settings_precision#precise-wall) + - [Precise Z Height](quality_settings_precision#precise-z-height) + - [Polyholes](quality_settings_precision#polyholes) +- [Wall generator](quality_settings_wall_generator) ### Speed Settings -- [Extrusion rate smoothing](extrusion-rate-smoothing) +- [Extrusion rate smoothing](speed_extrusion_rate_smoothing) -### Multi material +### Strength Settings + +- [Infill](strength_settings_infill) + +## Material Settings - [Single Extruder Multimaterial](semm) +- [Pellet Printers (pellet flow coefficient)](pellet-flow-coefficient) ### Printer Settings @@ -41,8 +64,6 @@ The below sections provide a detailed settings explanation as well as tips and t - [Chamber temperature control](chamber-temperature) - [Adaptive Bed Mesh](adaptive-bed-mesh) - [Using different bed types in Orca](bed-types) -- [Pellet Printers (pellet flow coefficient)](pellet-flow-coefficient) -- [Fill Patterns](fill-patterns) ## Printer Calibration @@ -61,8 +82,12 @@ The [Calibration Guide](Calibration) outlines Orca’s key calibration tests and ## Developer Section +This is a documentation from someone exploring the code and is by no means complete or even completely accurate. Please edit the parts you might find inaccurate. This is probably going to be helpful nonetheless. + - [How to build Orca Slicer](How-to-build) - [Localization and translation guide](Localization_guide) -- [Developer Reference](Developers-Home) - [How to create profiles](How-to-create-profiles) - [How to contribute to the wiki](How-to-wiki) +- [Preset, PresetBundle and PresetCollection](Preset-and-bundle) +- [Plater, Sidebar, Tab, ComboBox](plater-sidebar-tab-combobox) +- [Slicing Call Hierarchy](slicing-hierarchy) diff --git a/doc/Precise-wall.md b/doc/Precise-wall.md deleted file mode 100644 index b1ba5f3de3..0000000000 --- a/doc/Precise-wall.md +++ /dev/null @@ -1,25 +0,0 @@ -# Precise Wall - -The 'Precise Wall' is a distinctive feature introduced by OrcaSlicer, aimed at improving the dimensional accuracy of prints and minimizing layer inconsistencies by slightly increasing the spacing between the outer wall and the inner wall. - -## Technical explanation - -Below is a technical explanation of how this feature works. - -First, it's important to understand some basic concepts like flow, extrusion width, and space. Slic3r has an excellent document that covers these topics in detail. You can refer to this [article](https://manual.slic3r.org/advanced/flow-math). - -Now, let's dive into the specifics. Slic3r and its forks, such as PrusaSlicer, SuperSlicer, and OrcaSlicer, assume that the extrusion path has an oval shape, which accounts for the overlaps. For example, if we set the wall width to 0.4mm and the layer height to 0.2mm, the combined thickness of two walls laid side by side is 0.714mm instead of 0.8mm due to the overlapping. - -- **Precise Wall Off** - - ![PreciseWallOff](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/PreciseWall/PreciseWallOff.svg?raw=true) - -- **Precise Wall On** - - ![PreciseWallOn](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/PreciseWall/PreciseWallOn.svg?raw=true) - -This approach enhances the strength of 3D-printed parts. However, it does have some side effects. For instance, when the inner-outer wall order is used, the outer wall can be pushed outside, leading to potential size inaccuracy and more layer inconsistency. - -It's important to keep in mind that this approach to handling flow is specific to Slic3r and its forks. Other slicing software, such as Cura, assumes that the extrusion path is rectangular and, therefore, does not include overlapping. Two 0.4 mm walls will result in a 0.8 mm shell thickness in Cura. - -OrcaSlicer adheres to Slic3r's approach to handling flow. To address the downsides mentioned earlier, OrcaSlicer introduced the 'Precise Wall' feature. When this feature is enabled in OrcaSlicer, the overlap between the outer wall and its adjacent inner wall is set to zero. This ensures that the overall strength of the printed part is unaffected, while the size accuracy and layer consistency are improved. diff --git a/doc/print_settings/calibration/Calibration.md b/doc/calibration/Calibration.md similarity index 100% rename from doc/print_settings/calibration/Calibration.md rename to doc/calibration/Calibration.md diff --git a/doc/print_settings/calibration/adaptive-pressure-advance-calib.md b/doc/calibration/adaptive-pressure-advance-calib.md similarity index 100% rename from doc/print_settings/calibration/adaptive-pressure-advance-calib.md rename to doc/calibration/adaptive-pressure-advance-calib.md diff --git a/doc/print_settings/calibration/cornering-calib.md b/doc/calibration/cornering-calib.md similarity index 95% rename from doc/print_settings/calibration/cornering-calib.md rename to doc/calibration/cornering-calib.md index 3fb0c1e94d..e8d78f5742 100644 --- a/doc/print_settings/calibration/cornering-calib.md +++ b/doc/calibration/cornering-calib.md @@ -4,7 +4,7 @@ Cornering is a critical aspect of 3D printing that affects the quality and accur ## Jerk -TODO: Jerk calibration not implemented yet. +WIP... TODO: Jerk calibration not implemented yet. ## Junction Deviation @@ -52,9 +52,9 @@ The default value in Marlin is typically set to 0.08mm, which may be too high fo 3. Recompile your MarlinFW 1. In Configuration.h uncomment and set: ```cpp - #define JUNCTION_DEVIATION_MM 0.012 // (mm) Distance from real junction edge + #define JUNCTION_DEVIATION_MM 0.012 // (mm) Distance from real junction edge ``` 2. Check Classic Jerk is disabled (commented). ```cpp - //#define CLASSIC_JERK + //#define CLASSIC_JERK ``` diff --git a/doc/print_settings/calibration/flow-rate-calib.md b/doc/calibration/flow-rate-calib.md similarity index 100% rename from doc/print_settings/calibration/flow-rate-calib.md rename to doc/calibration/flow-rate-calib.md diff --git a/doc/print_settings/calibration/input-shaping-calib.md b/doc/calibration/input-shaping-calib.md similarity index 100% rename from doc/print_settings/calibration/input-shaping-calib.md rename to doc/calibration/input-shaping-calib.md diff --git a/doc/print_settings/calibration/pressure-advance-calib.md b/doc/calibration/pressure-advance-calib.md similarity index 100% rename from doc/print_settings/calibration/pressure-advance-calib.md rename to doc/calibration/pressure-advance-calib.md diff --git a/doc/print_settings/calibration/retraction-calib.md b/doc/calibration/retraction-calib.md similarity index 100% rename from doc/print_settings/calibration/retraction-calib.md rename to doc/calibration/retraction-calib.md diff --git a/doc/print_settings/calibration/temp-calib.md b/doc/calibration/temp-calib.md similarity index 100% rename from doc/print_settings/calibration/temp-calib.md rename to doc/calibration/temp-calib.md diff --git a/doc/print_settings/calibration/tolerance-calib.md b/doc/calibration/tolerance-calib.md similarity index 100% rename from doc/print_settings/calibration/tolerance-calib.md rename to doc/calibration/tolerance-calib.md diff --git a/doc/print_settings/calibration/volumetric-speed-calib.md b/doc/calibration/volumetric-speed-calib.md similarity index 100% rename from doc/print_settings/calibration/volumetric-speed-calib.md rename to doc/calibration/volumetric-speed-calib.md diff --git a/doc/developer-reference/Developers-Home.md b/doc/developer-reference/Developers-Home.md deleted file mode 100644 index 8080e95abf..0000000000 --- a/doc/developer-reference/Developers-Home.md +++ /dev/null @@ -1,7 +0,0 @@ -# For Developers - -This is a documentation from someone exploring the code and is by no means complete or even completely accurate. Please edit the parts you might find inaccurate. This is probably going to be helpful nonetheless. - -- [Preset, PresetBundle and PresetCollection](Preset-and-bundle) -- [Plater, Sidebar, Tab, ComboBox](plater-sidebar-tab-combobox) -- [Slicing Call Hierarchy](slicing-hierarchy) diff --git a/doc/How-to-build.md b/doc/developer-reference/How-to-build.md similarity index 68% rename from doc/How-to-build.md rename to doc/developer-reference/How-to-build.md index 2377656e08..a480a2f94a 100644 --- a/doc/How-to-build.md +++ b/doc/developer-reference/How-to-build.md @@ -57,6 +57,10 @@ This guide is for building your Visual Studio 2022 solution for OrcaSlicer on Wi ```shell build_release_vs2022.bat ``` + +> [!NOTE] +> If you encounter issues, you can try to uninstall ZLIB from your Vcpkg library. + 3. If successful, you will find the VS 2022 solution file in: ```shell build\OrcaSlicer.sln @@ -65,7 +69,7 @@ This guide is for building your Visual Studio 2022 solution for OrcaSlicer on Wi > [!IMPORTANT] > Make sure that CMake version 3.31.x is actually being used. Run `cmake --version` and verify it returns a **3.31.x** version. > If you see an older version (e.g. 3.29), it's likely due to another copy in your system's PATH (e.g. from Strawberry Perl). -> You can run where cmake to check the active paths and rearrange your System Environment Variables > PATH, ensuring the correct CMake (e.g. C:\Program Files\CMake\bin) appears before others like C:\Strawberry\c\bin. +> You can run where cmake to check the active paths and rearrange your **System Environment Variables** > PATH, ensuring the correct CMake (e.g. C:\Program Files\CMake\bin) appears before others like C:\Strawberry\c\bin. > [!NOTE] > If the build fails, try deleting the `build/` and `deps/build/` directories to clear any cached build data. Rebuilding after a clean-up is usually sufficient to resolve most issues. @@ -156,11 +160,22 @@ To build and debug directly in Xcode: git clone https://github.com/SoftFever/OrcaSlicer && cd OrcaSlicer && ./DockerBuild.sh && ./DockerRun.sh ``` -> [!NOTE] -> To troubleshoot common Docker-related errors, refer to the comments in -> ```shell -> DockerRun.sh -> ``` +### Troubleshooting +The `DockerRun.sh` script includes several commented-out options that can help resolve common issues. Here's a breakdown of what they do: + +- `xhost +local:docker`: If you encounter an "Authorization required, but no authorization protocol specified" error, run this command in your terminal before executing DockerRun.sh. This grants Docker containers permission to interact with your X display server. +- `-h $HOSTNAME`: Forces the container's hostname to match your workstation's hostname. This can be useful in certain network configurations. +- `-v /tmp/.X11-unix:/tmp/.X11-unix`: Helps resolve problems with the X display by mounting the X11 Unix socket into the container. +- `--net=host`: Uses the host's network stack, which is beneficial for printer Wi-Fi connectivity and D-Bus communication. +- `--ipc host`: Addresses potential permission issues with X installations that prevent communication with shared memory sockets. +- `-u $USER`: Runs the container as your workstation's username, helping to maintain consistent file permissions. +- `-v $HOME`:/home/$USER: Mounts your home directory into the container, allowing you to easily load and save files. +- `-e DISPLAY=$DISPLAY`: Passes your X display number to the container, enabling the graphical interface. +- `--privileged=true`: Grants the container elevated privileges, which may be necessary for libGL and D-Bus functionalities. +- `-ti`: Attaches a TTY to the container, enabling command-line interaction with OrcaSlicer. +- `--rm`: Automatically removes the container once it exits, keeping your system clean. +- `orcaslicer $*`: Passes any additional parameters from the `DockerRun.sh` script directly to the OrcaSlicer executable within the container. +By uncommenting and using these options as needed, you can often resolve issues related to display authorization, networking, and file permissions. ## Ubuntu diff --git a/doc/How-to-create-profiles.md b/doc/developer-reference/How-to-create-profiles.md similarity index 99% rename from doc/How-to-create-profiles.md rename to doc/developer-reference/How-to-create-profiles.md index c84ac037ff..3a3a9adb24 100644 --- a/doc/How-to-create-profiles.md +++ b/doc/developer-reference/How-to-create-profiles.md @@ -401,11 +401,15 @@ In addition to the Orca validator, you should run the `orca_extra_profile_check. python ./orca_extra_profile_check.py ``` + You can also enable or disable specific checks: +- `--help`: displays help information - `--vendor` (optional): checks only the specified vendor. If omitted, all vendors are checked. - `--check-filaments` (enabled by default): checks `compatible_printers` fields in filament profiles - `--check-materials`: checks default material names in machine profiles +- `--check-obsolete-keys`: checks for obsolete keys in profiles + #### Sample usage with all checks enabled diff --git a/doc/How-to-wiki.md b/doc/developer-reference/How-to-wiki.md similarity index 100% rename from doc/How-to-wiki.md rename to doc/developer-reference/How-to-wiki.md diff --git a/doc/Localization_guide.md b/doc/developer-reference/Localization_guide.md similarity index 100% rename from doc/Localization_guide.md rename to doc/developer-reference/Localization_guide.md diff --git a/doc/developer-reference/plater-sidebar-tab-combobox.md b/doc/developer-reference/plater-sidebar-tab-combobox.md index 1f01e7b5b6..e7a4c51895 100644 --- a/doc/developer-reference/plater-sidebar-tab-combobox.md +++ b/doc/developer-reference/plater-sidebar-tab-combobox.md @@ -1,6 +1,9 @@ # Application Structure Overview -### !! incomplete, possibly inaccurate, being updated with new info !! +WIP... + +> [!WARNING] +> !! incomplete, possibly inaccurate, being updated with new info !! ## [`Plater`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/GUI/Plater.hpp) diff --git a/doc/fill-patterns.md b/doc/fill-patterns.md deleted file mode 100644 index 73a832b784..0000000000 --- a/doc/fill-patterns.md +++ /dev/null @@ -1,91 +0,0 @@ -# Infill Patterns -WIP... - -## Concentric -![infill-top-concentric](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-concentric.png?raw=true) -![infill-iso-concentric](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-concentric.png?raw=true) - -## Rectilinear -![infill-top-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-rectilinear.png?raw=true) -![infill-iso-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-rectilinear.png?raw=true) - -## Grid -![infill-top-grid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-grid.png?raw=true) -![infill-iso-grid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-grid.png?raw=true) - -## 2D Lattice -![infill-top-2d-lattice](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-2d-lattice.png?raw=true) -![infill-iso-2d-lattice](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-2d-lattice.png?raw=true) - -## Line -![infill-top-line](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-line.png?raw=true) -![infill-iso-line](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-line.png?raw=true) - -## Cubic -![infill-top-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cubic.png?raw=true) -![infill-iso-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-cubic.png?raw=true) - -## Triangles -![infill-top-triangles](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-triangles.png?raw=true) -![infill-iso-triangles](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-triangles.png?raw=true) - -## Tri-hexagon -![infill-top-tri-hexagon](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-tri-hexagon.png?raw=true) -![infill-iso-tri-hexagon](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-tri-hexagon.png?raw=true) - -## Gyroid -![infill-top-gyroid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-gyroid.png?raw=true) -![infill-iso-gyroid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-gyroid.png?raw=true) - -## Honeycomb -![infill-top-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-honeycomb.png?raw=true) -![infill-iso-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-honeycomb.png?raw=true) - -## Adaptive Cubic -![infill-top-adaptive-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-adaptive-cubic.png?raw=true) -![infill-iso-adaptive-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-adaptive-cubic.png?raw=true) - -## Aligned Rectilinear -![infill-top-aligned-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-aligned-rectilinear.png?raw=true) -![infill-iso-aligned-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-aligned-rectilinear.png?raw=true) - -## 3D Honeycomb -![infill-top-3d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-3d-honeycomb.png?raw=true) -![infill-iso-3d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-3d-honeycomb.png?raw=true) - -## Hilbert Curve -![infill-top-hilbert-curve](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-hilbert-curve.png?raw=true) -![infill-iso-hilbert-curve](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-hilbert-curve.png?raw=true) - -## Archimedean Chords -![infill-top-archimedean-chords](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-archimedean-chords.png?raw=true) -![infill-iso-archimedean-chords](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-archimedean-chords.png?raw=true) - -## Octagram Spiral -![infill-top-octagram-spiral](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-octagram-spiral.png?raw=true) -![infill-iso-octagram-spiral](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-octagram-spiral.png?raw=true) - -## Support Cubic -![infill-top-support-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-support-cubic.png?raw=true) -![infill-iso-support-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-support-cubic.png?raw=true) - -## Lightning -![infill-top-lightning](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-lightning.png?raw=true) -![infill-iso-lightning](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-lightning.png?raw=true) - -## Cross Hatch -![infill-top-cross-hatch](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cross-hatch.png?raw=true) -![infill-iso-cross-hatch](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-cross-hatch.png?raw=true) - -## Quartered Cubic -![infill-top-quartered-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-quartered-cubic.png?raw=true) -![infill-iso-quartered-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-iso-quartered-cubic.png?raw=true) - -> [!NOTE] -> Standard images are taken with: -> - Primitive Cube: 66mm x 66mm x 66mm -> - Layer Height: 0.2mm -> - Infill Density: 15% -> - Layer Count: 329 -> - Wall loops: 3 (Hide in isometric view) -> - Anchor: Off diff --git a/doc/images/Precision/PolyHoles.png b/doc/images/Precision/PolyHoles.png new file mode 100644 index 0000000000..7fce37757b Binary files /dev/null and b/doc/images/Precision/PolyHoles.png differ diff --git a/doc/images/PreciseWall/PreciseWallOff.svg b/doc/images/Precision/PreciseWallOff.svg similarity index 100% rename from doc/images/PreciseWall/PreciseWallOff.svg rename to doc/images/Precision/PreciseWallOff.svg diff --git a/doc/images/PreciseWall/PreciseWallOn.svg b/doc/images/Precision/PreciseWallOn.svg similarity index 100% rename from doc/images/PreciseWall/PreciseWallOn.svg rename to doc/images/Precision/PreciseWallOn.svg diff --git a/doc/images/PreciseZ/PreciseZOff.png b/doc/images/Precision/PreciseZOff.png similarity index 100% rename from doc/images/PreciseZ/PreciseZOff.png rename to doc/images/Precision/PreciseZOff.png diff --git a/doc/images/PreciseZ/PreciseZOn.png b/doc/images/Precision/PreciseZOn.png similarity index 100% rename from doc/images/PreciseZ/PreciseZOn.png rename to doc/images/Precision/PreciseZOn.png diff --git a/doc/images/Precision/arc-fitting.svg b/doc/images/Precision/arc-fitting.svg new file mode 100644 index 0000000000..acb997cede --- /dev/null +++ b/doc/images/Precision/arc-fitting.svg @@ -0,0 +1,3 @@ + + +
Sliced GCode Path
Sliced GCode Path
New GCode Arc
New GCode Arc
\ No newline at end of file diff --git a/doc/images/Precision/elephant-foot-compensation.png b/doc/images/Precision/elephant-foot-compensation.png new file mode 100644 index 0000000000..55d87c251d Binary files /dev/null and b/doc/images/Precision/elephant-foot-compensation.png differ diff --git a/doc/images/Precision/elephant-foot.svg b/doc/images/Precision/elephant-foot.svg new file mode 100644 index 0000000000..88a29c0136 --- /dev/null +++ b/doc/images/Precision/elephant-foot.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/doc/images/WallGenerator/wallgenerator-arachne.png b/doc/images/WallGenerator/wallgenerator-arachne.png new file mode 100644 index 0000000000..21d14d77f3 Binary files /dev/null and b/doc/images/WallGenerator/wallgenerator-arachne.png differ diff --git a/doc/images/WallGenerator/wallgenerator-classic.png b/doc/images/WallGenerator/wallgenerator-classic.png new file mode 100644 index 0000000000..8d884f6a65 Binary files /dev/null and b/doc/images/WallGenerator/wallgenerator-classic.png differ diff --git a/doc/images/fill/infill-iso-2d-lattice.png b/doc/images/fill/infill-iso-2d-lattice.png deleted file mode 100644 index 12e0e83496..0000000000 Binary files a/doc/images/fill/infill-iso-2d-lattice.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-3d-honeycomb.png b/doc/images/fill/infill-iso-3d-honeycomb.png deleted file mode 100644 index 67eb5e0d77..0000000000 Binary files a/doc/images/fill/infill-iso-3d-honeycomb.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-adaptative-cubic.png b/doc/images/fill/infill-iso-adaptative-cubic.png deleted file mode 100644 index 4beb64c377..0000000000 Binary files a/doc/images/fill/infill-iso-adaptative-cubic.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-aligned-rectilinear.png b/doc/images/fill/infill-iso-aligned-rectilinear.png deleted file mode 100644 index e337e57353..0000000000 Binary files a/doc/images/fill/infill-iso-aligned-rectilinear.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-archimedean-chords.png b/doc/images/fill/infill-iso-archimedean-chords.png deleted file mode 100644 index 6d189394dc..0000000000 Binary files a/doc/images/fill/infill-iso-archimedean-chords.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-concentric.png b/doc/images/fill/infill-iso-concentric.png deleted file mode 100644 index 6886c1f7fb..0000000000 Binary files a/doc/images/fill/infill-iso-concentric.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-cross-hatch.png b/doc/images/fill/infill-iso-cross-hatch.png deleted file mode 100644 index 218f2dd3e9..0000000000 Binary files a/doc/images/fill/infill-iso-cross-hatch.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-cubic.png b/doc/images/fill/infill-iso-cubic.png deleted file mode 100644 index f0b834f36b..0000000000 Binary files a/doc/images/fill/infill-iso-cubic.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-grid.png b/doc/images/fill/infill-iso-grid.png deleted file mode 100644 index bcb7757209..0000000000 Binary files a/doc/images/fill/infill-iso-grid.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-gyroid.png b/doc/images/fill/infill-iso-gyroid.png deleted file mode 100644 index 601abac68a..0000000000 Binary files a/doc/images/fill/infill-iso-gyroid.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-hilbert-curve.png b/doc/images/fill/infill-iso-hilbert-curve.png deleted file mode 100644 index ffee09e220..0000000000 Binary files a/doc/images/fill/infill-iso-hilbert-curve.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-honeycomb.png b/doc/images/fill/infill-iso-honeycomb.png deleted file mode 100644 index e36b8c6002..0000000000 Binary files a/doc/images/fill/infill-iso-honeycomb.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-lightning.png b/doc/images/fill/infill-iso-lightning.png deleted file mode 100644 index 7b40354b33..0000000000 Binary files a/doc/images/fill/infill-iso-lightning.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-line.png b/doc/images/fill/infill-iso-line.png deleted file mode 100644 index 5ea5179eb4..0000000000 Binary files a/doc/images/fill/infill-iso-line.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-octagram-spiral.png b/doc/images/fill/infill-iso-octagram-spiral.png deleted file mode 100644 index 32c185aa75..0000000000 Binary files a/doc/images/fill/infill-iso-octagram-spiral.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-quarter-cubic.png b/doc/images/fill/infill-iso-quarter-cubic.png deleted file mode 100644 index 499406de54..0000000000 Binary files a/doc/images/fill/infill-iso-quarter-cubic.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-rectilinear.png b/doc/images/fill/infill-iso-rectilinear.png deleted file mode 100644 index 41950f3b2a..0000000000 Binary files a/doc/images/fill/infill-iso-rectilinear.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-support-cubic.png b/doc/images/fill/infill-iso-support-cubic.png deleted file mode 100644 index c09a3c599a..0000000000 Binary files a/doc/images/fill/infill-iso-support-cubic.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-tri-hexagon.png b/doc/images/fill/infill-iso-tri-hexagon.png deleted file mode 100644 index 4ac5baf9eb..0000000000 Binary files a/doc/images/fill/infill-iso-tri-hexagon.png and /dev/null differ diff --git a/doc/images/fill/infill-iso-triangles.png b/doc/images/fill/infill-iso-triangles.png deleted file mode 100644 index 005194feed..0000000000 Binary files a/doc/images/fill/infill-iso-triangles.png and /dev/null differ diff --git a/doc/images/fill/infill-top-2d-lacttice.png b/doc/images/fill/infill-top-2d-lacttice.png deleted file mode 100644 index 519d48083a..0000000000 Binary files a/doc/images/fill/infill-top-2d-lacttice.png and /dev/null differ diff --git a/doc/images/fill/infill-top-2d-lattice.png b/doc/images/fill/infill-top-2d-lattice.png new file mode 100644 index 0000000000..a67d27a4f4 Binary files /dev/null and b/doc/images/fill/infill-top-2d-lattice.png differ diff --git a/doc/images/fill/infill-top-3d-honeycomb.png b/doc/images/fill/infill-top-3d-honeycomb.png index 1012797422..749df03131 100644 Binary files a/doc/images/fill/infill-top-3d-honeycomb.png and b/doc/images/fill/infill-top-3d-honeycomb.png differ diff --git a/doc/images/fill/infill-top-adaptative-cubic.png b/doc/images/fill/infill-top-adaptative-cubic.png deleted file mode 100644 index be4aa713fd..0000000000 Binary files a/doc/images/fill/infill-top-adaptative-cubic.png and /dev/null differ diff --git a/doc/images/fill/infill-top-adaptive-cubic.png b/doc/images/fill/infill-top-adaptive-cubic.png new file mode 100644 index 0000000000..8fdb765017 Binary files /dev/null and b/doc/images/fill/infill-top-adaptive-cubic.png differ diff --git a/doc/images/fill/infill-top-aligned-rectilinear.png b/doc/images/fill/infill-top-aligned-rectilinear.png index aef72519bc..0df2b714d9 100644 Binary files a/doc/images/fill/infill-top-aligned-rectilinear.png and b/doc/images/fill/infill-top-aligned-rectilinear.png differ diff --git a/doc/images/fill/infill-top-archimedean-chords.png b/doc/images/fill/infill-top-archimedean-chords.png index a9c1fd1d33..3e2f78d47a 100644 Binary files a/doc/images/fill/infill-top-archimedean-chords.png and b/doc/images/fill/infill-top-archimedean-chords.png differ diff --git a/doc/images/fill/infill-top-concentric.png b/doc/images/fill/infill-top-concentric.png index 3771afb438..fe981fe792 100644 Binary files a/doc/images/fill/infill-top-concentric.png and b/doc/images/fill/infill-top-concentric.png differ diff --git a/doc/images/fill/infill-top-cross-hatch.png b/doc/images/fill/infill-top-cross-hatch.png index 96b95e2f79..15e6b67a9a 100644 Binary files a/doc/images/fill/infill-top-cross-hatch.png and b/doc/images/fill/infill-top-cross-hatch.png differ diff --git a/doc/images/fill/infill-top-cubic.png b/doc/images/fill/infill-top-cubic.png index 08f11ca01c..0f3a1af305 100644 Binary files a/doc/images/fill/infill-top-cubic.png and b/doc/images/fill/infill-top-cubic.png differ diff --git a/doc/images/fill/infill-top-grid.png b/doc/images/fill/infill-top-grid.png index b6b3460191..6a853404a6 100644 Binary files a/doc/images/fill/infill-top-grid.png and b/doc/images/fill/infill-top-grid.png differ diff --git a/doc/images/fill/infill-top-gyroid.png b/doc/images/fill/infill-top-gyroid.png index 211a697767..dee06c34cd 100644 Binary files a/doc/images/fill/infill-top-gyroid.png and b/doc/images/fill/infill-top-gyroid.png differ diff --git a/doc/images/fill/infill-top-hilbert-curve.png b/doc/images/fill/infill-top-hilbert-curve.png index 86bcd58d45..60399e2e9f 100644 Binary files a/doc/images/fill/infill-top-hilbert-curve.png and b/doc/images/fill/infill-top-hilbert-curve.png differ diff --git a/doc/images/fill/infill-top-honeycomb.png b/doc/images/fill/infill-top-honeycomb.png index 402d29b8f7..bf6ec72ef2 100644 Binary files a/doc/images/fill/infill-top-honeycomb.png and b/doc/images/fill/infill-top-honeycomb.png differ diff --git a/doc/images/fill/infill-top-infill-top-2d-honeycomb.png b/doc/images/fill/infill-top-infill-top-2d-honeycomb.png new file mode 100644 index 0000000000..257dd83c7c Binary files /dev/null and b/doc/images/fill/infill-top-infill-top-2d-honeycomb.png differ diff --git a/doc/images/fill/infill-top-lightning.png b/doc/images/fill/infill-top-lightning.png index e7c4a5a33d..cd9903e34c 100644 Binary files a/doc/images/fill/infill-top-lightning.png and b/doc/images/fill/infill-top-lightning.png differ diff --git a/doc/images/fill/infill-top-line.png b/doc/images/fill/infill-top-line.png index 3aeaa82e78..67b1ff61fa 100644 Binary files a/doc/images/fill/infill-top-line.png and b/doc/images/fill/infill-top-line.png differ diff --git a/doc/images/fill/infill-top-octagram-spiral.png b/doc/images/fill/infill-top-octagram-spiral.png index d384b213a6..94afbd3eab 100644 Binary files a/doc/images/fill/infill-top-octagram-spiral.png and b/doc/images/fill/infill-top-octagram-spiral.png differ diff --git a/doc/images/fill/infill-top-quarter-cubic.png b/doc/images/fill/infill-top-quarter-cubic.png new file mode 100644 index 0000000000..1041e01f29 Binary files /dev/null and b/doc/images/fill/infill-top-quarter-cubic.png differ diff --git a/doc/images/fill/infill-top-quartered-cubic.png b/doc/images/fill/infill-top-quartered-cubic.png deleted file mode 100644 index 4d2fe6e673..0000000000 Binary files a/doc/images/fill/infill-top-quartered-cubic.png and /dev/null differ diff --git a/doc/images/fill/infill-top-rectilinear.png b/doc/images/fill/infill-top-rectilinear.png index a77ce1343e..c4b5639b4f 100644 Binary files a/doc/images/fill/infill-top-rectilinear.png and b/doc/images/fill/infill-top-rectilinear.png differ diff --git a/doc/images/fill/infill-top-support-cubic.png b/doc/images/fill/infill-top-support-cubic.png index 8dfe1bf079..309910eab4 100644 Binary files a/doc/images/fill/infill-top-support-cubic.png and b/doc/images/fill/infill-top-support-cubic.png differ diff --git a/doc/images/fill/infill-top-tpms-d.png b/doc/images/fill/infill-top-tpms-d.png new file mode 100644 index 0000000000..21159fe3ab Binary files /dev/null and b/doc/images/fill/infill-top-tpms-d.png differ diff --git a/doc/images/fill/infill-top-tri-hexagon.png b/doc/images/fill/infill-top-tri-hexagon.png index 43ad5b8675..e2229ae195 100644 Binary files a/doc/images/fill/infill-top-tri-hexagon.png and b/doc/images/fill/infill-top-tri-hexagon.png differ diff --git a/doc/images/fill/infill-top-triangles.png b/doc/images/fill/infill-top-triangles.png index 196758829b..e8bbed4e8d 100644 Binary files a/doc/images/fill/infill-top-triangles.png and b/doc/images/fill/infill-top-triangles.png differ diff --git a/doc/pellet-flow-coefficient.md b/doc/material_settings/pellet-flow-coefficient.md similarity index 100% rename from doc/pellet-flow-coefficient.md rename to doc/material_settings/pellet-flow-coefficient.md diff --git a/doc/semm.md b/doc/material_settings/semm.md similarity index 100% rename from doc/semm.md rename to doc/material_settings/semm.md diff --git a/doc/precise-z-height.md b/doc/precise-z-height.md deleted file mode 100644 index fa862bf922..0000000000 --- a/doc/precise-z-height.md +++ /dev/null @@ -1,15 +0,0 @@ -# Precise Z Height Adjustment - -This feature ensures the accurate Z height of the model after slicing, even if the model height is not a multiple of the layer height. - -For example, slicing a 20mm x 20mm x 20.1mm cube with a layer height of 0.2mm would typically result in a final height of 20.2mm due to the layer height increments. - -By enabling this parameter, the layer height of the last five layers is adjusted so that the final sliced height matches the actual object height, resulting in an accurate 20.1mm (as shown in the picture). - -- **Precise Z Height Off** - - ![PreciseZOff](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/PreciseZ/PreciseZOff.png?raw=true) - -- **Precise Z Height On** - - ![PreciseZOn](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/PreciseZ/PreciseZOn.png?raw=true) diff --git a/doc/stl-transformation.md b/doc/print_prepare/stl-transformation.md similarity index 100% rename from doc/stl-transformation.md rename to doc/print_prepare/stl-transformation.md diff --git a/doc/print_settings/quality/quality_settings_precision.md b/doc/print_settings/quality/quality_settings_precision.md new file mode 100644 index 0000000000..b6f0bca793 --- /dev/null +++ b/doc/print_settings/quality/quality_settings_precision.md @@ -0,0 +1,112 @@ +# Precision + +This section covers the settings that affect the precision of your prints. These settings can help you achieve better dimensional accuracy, reduce artifacts, and improve overall print quality. + +- [Slice gap closing radius](#slice-gap-closing-radius) +- [Resolution](#resolution) +- [Arc fitting](#arc-fitting) +- [X-Y Compensation](#x-y-compensation) +- [Elephant foot compensation](#elephant-foot-compensation) +- [Precise wall](#precise-wall) + - [Technical explanation](#technical-explanation) +- [Precise Z Height](#precise-z-height) +- [Polyholes](#polyholes) + + +## Slice gap closing radius + +Cracks smaller than 2x gap closing radiusCracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low. + +## Resolution + +The G-code path is generated after simplifying the contour of models to avoid too many points and G-code lines. Smaller value means higher resolution and more time to slice. + +## Arc fitting + +Enable this to get a G-code file which has [G2 and G3](https://marlinfw.org/docs/gcode/G002-G003.html) moves. + +After a model is sliced this feature will replace straight line segments with arcs where possible. This is particularly useful for curved surfaces, as it allows the printer to move in a more fluid manner, reducing the number of G-code commands and improving the overall print quality. + +This will result in a smaller G-code file for the same model, as arcs are used instead of many short line segments. This can improve print quality and reduce printing time, especially for curved surfaces. + +![arc-fitting](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/arc-fitting.svg?raw=true) + +> [!IMPORTANT] +> This option is only available for machines that support G2 and G3 commands and may impact in CPU usage on the printer. + +> [!NOTE] +> **Klipper machines**, this option is recommended to be disabled. +Klipper does not benefit from arc commands as these are split again into line segments by the firmware. This results in a reduction in surface quality as line segments are converted to arcs by the slicer and then back to line segments by the firmware. + +## X-Y Compensation + +Used to compensate external dimensions of the model. +With this option you can compensate material expansion or shrinkage, which can occur due to various factors such as the type of filament used, temperature fluctuations, or printer calibration issues. + +Follow the [Calibration Guide](https://github.com/SoftFever/OrcaSlicer/wiki/Calibration) and [Filament Tolerance Calibration](https://github.com/SoftFever/OrcaSlicer/wiki/tolerance-calib) to determine the correct value for your printer and filament combination. + +## Elephant foot compensation + +This feature compensates for the "elephant foot" effect, which occurs when the first few layers of a print are wider than the rest due: + +- Weight of the material above them. +- Thermal expansion of the material. +- Bed temperature being too high. +- Inaccurate bed height. + +![elephant-foot](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/elephant-foot.svg?raw=true) + +To mitigate this effect, OrcaSlicer allows you to specify a negative distance that will be applied to the first specified number of layers. This adjustment effectively reduces the width of the first few layers, helping to achieve a more accurate final print size. + +![elephant-foot-compensation](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/elephant-foot-compensation.png?raw=true) + +## Precise wall + +The 'Precise Wall' is a distinctive feature introduced by OrcaSlicer, aimed at improving the dimensional accuracy of prints and minimizing layer inconsistencies by slightly increasing the spacing between the outer wall and the inner wall. + +### Technical explanation + +Below is a technical explanation of how this feature works. + +First, it's important to understand some basic concepts like flow, extrusion width, and space. Slic3r has an excellent document that covers these topics in detail. You can refer to this [article](https://manual.slic3r.org/advanced/flow-math). + +Now, let's dive into the specifics. Slic3r and its forks, such as PrusaSlicer, SuperSlicer, and OrcaSlicer, assume that the extrusion path has an oval shape, which accounts for the overlaps. For example, if we set the wall width to 0.4mm and the layer height to 0.2mm, the combined thickness of two walls laid side by side is 0.714mm instead of 0.8mm due to the overlapping. + +- **Precise Wall Off** + + ![PreciseWallOff](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/PreciseWallOff.svg?raw=true) + +- **Precise Wall On** + + ![PreciseWallOn](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/PreciseWallOn.svg?raw=true) + +This approach enhances the strength of 3D-printed parts. However, it does have some side effects. For instance, when the inner-outer wall order is used, the outer wall can be pushed outside, leading to potential size inaccuracy and more layer inconsistency. + +It's important to keep in mind that this approach to handling flow is specific to Slic3r and its forks. Other slicing software, such as Cura, assumes that the extrusion path is rectangular and, therefore, does not include overlapping. Two 0.4 mm walls will result in a 0.8 mm shell thickness in Cura. + +OrcaSlicer adheres to Slic3r's approach to handling flow. To address the downsides mentioned earlier, OrcaSlicer introduced the 'Precise Wall' feature. When this feature is enabled in OrcaSlicer, the overlap between the outer wall and its adjacent inner wall is set to zero. This ensures that the overall strength of the printed part is unaffected, while the size accuracy and layer consistency are improved. + +## Precise Z Height + +This feature ensures the accurate Z height of the model after slicing, even if the model height is not a multiple of the layer height. + +For example, slicing a 20mm x 20mm x 20.1mm cube with a layer height of 0.2mm would typically result in a final height of 20.2mm due to the layer height increments. + +By enabling this parameter, the layer height of the last five layers is adjusted so that the final sliced height matches the actual object height, resulting in an accurate 20.1mm (as shown in the picture). + +- **Precise Z Height Off** + + ![PreciseZOff](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/PreciseZOff.png?raw=true) + +- **Precise Z Height On** + + ![PreciseZOn](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/PreciseZOn.png?raw=true) + +## Polyholes + +A polyhole is a technique used in FFF 3D printing to improve the accuracy of circular holes. Instead of modeling a perfect circle, the hole is represented as a polygon with a reduced number of flat sides. This simplification forces the slicer to treat each segment as a straight line, which prints more reliably. By carefully choosing the number of sides and ensuring the polygon sits on the outer boundary of the hole, you can produce openings that more closely match the intended diameter. + +![PolyHoles](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/Precision/PolyHoles.png?raw=true) + +- Original implementation: [SuperSlicer Polyholes](https://github.com/supermerill/SuperSlicer/wiki/Polyholes) +- Idea and mathematics: [Hydraraptor](https://hydraraptor.blogspot.com/2011/02/polyholes.html) diff --git a/doc/print_settings/quality/quality_settings_seam.md b/doc/print_settings/quality/quality_settings_seam.md index 605c1fdf79..4c85ce79d9 100644 --- a/doc/print_settings/quality/quality_settings_seam.md +++ b/doc/print_settings/quality/quality_settings_seam.md @@ -73,14 +73,14 @@ To minimize the visibility of potential over-extrusion at the start of an extern This is useful when printing with Outer/Inner or Inner/Outer/Inner wall print order, as in these modes, it is more likely an external perimeter is printed immediately after a de-retraction move, which would cause slight extrusion variance at the start of a seam. -## Tips: +## Tips With seams being inevitable when 3D printing using FFF, there are two distinct approaches on how to deal with them: 1. **Try and hide the seam as much as possible:** This can be done by enabling scarf seam, which works very well, especially with simple models with limited overhang regions. 2. **Try and make the seam as "clean" and "distinct" as possible:** This can be done by tuning the seam gap and enabling role-based wipe speed, wipe on loops, and wipe before the external loop. -## Troubleshooting Seam Performance: +## Troubleshooting Seam Performance The section below will focus on troubleshooting traditional seams. For scarf seam troubleshooting, refer to the guide linked above. @@ -93,7 +93,7 @@ However, due to mechanical and material tolerances, as well as the very nature o ![seam-quality](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/seam/seam-quality.jpg?raw=true) -### Troubleshooting the Start of a Seam: +### Troubleshooting the Start of a Seam Imagine the scenario where the toolhead finishes printing a layer line on one side of the bed, retracts, travels the whole distance of the bed to de-retract, and starts printing another part. Compare this to the scenario where the toolhead finishes printing an internal perimeter and only travels a few mm to start printing an external perimeter, without even retracting or de-retracting. @@ -113,7 +113,7 @@ So this is a trade-off between print speed and print quality. From experimental In addition, larger nozzle diameters allow for more opportunity for material to leak compared to smaller diameter nozzles. A 0.2/0.25 mm nozzle will have significantly better seam performance than a 0.4, and that will have much better performance than a 0.6mm nozzle and so forth. -### Troubleshooting the End of a Seam: +### Troubleshooting the End of a Seam The end of a seam is much easier to get right, as the extrusion system is already at a pressure equilibrium while printing. It just needs to stop extruding at the right time and consistently. @@ -125,7 +125,7 @@ Furthermore, the printer mechanics have tolerances – the print head may be req Finally, the techniques of **wiping can help improve the visual continuity and consistency of a seam** (please note, these settings do not make the seam less visible, but rather make them more consistent!). Wiping on loops with a consistent speed helps tuck in the end of the seam, hiding the effects of retraction from view. -### The Role of Wall Ordering in Seam Appearance: +### The Role of Wall Ordering in Seam Appearance The order of wall printing plays a significant role in the appearance of a seam. **Starting to print the external perimeter first after a long travel move will always result in more visible artifacts compared to printing the internal perimeters first and traveling just a few mm to print the external perimeter.** diff --git a/doc/print_settings/quality/quality_settings_wall_generator.md b/doc/print_settings/quality/quality_settings_wall_generator.md new file mode 100644 index 0000000000..f7279aa253 --- /dev/null +++ b/doc/print_settings/quality/quality_settings_wall_generator.md @@ -0,0 +1,23 @@ +# Wall Generator + +WIP... + +## Classic + +WIP... + +![wallgenerator-classic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/WallGenerator/wallgenerator-classic.png?raw=true) + +## Arachne + +WIP... + +![wallgenerator-arachne](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/WallGenerator/wallgenerator-arachne.png?raw=true) + +- Wall transitioning threshhold angle +- Wall transitioning filter +- Wall transitioning length +- Wall distribution count +- First layer minimum wall width +- Minimum feature size +- Minimum wall length diff --git a/doc/print_settings/speed/extrusion-rate-smoothing.md b/doc/print_settings/speed/speed_extrusion_rate_smoothing.md similarity index 95% rename from doc/print_settings/speed/extrusion-rate-smoothing.md rename to doc/print_settings/speed/speed_extrusion_rate_smoothing.md index 232279515c..9c479ec86e 100644 --- a/doc/print_settings/speed/extrusion-rate-smoothing.md +++ b/doc/print_settings/speed/speed_extrusion_rate_smoothing.md @@ -1,191 +1,192 @@ -# Extrusion rate smoothing - -Extrusion rate smoothing (ERS), also known as pressure equalizer in Prusa Slicer, aims to **limit the rate of extrusion volume change to be below a user set threshold (the ERS value).** It aims to assist the printer firmware internal motion planners, pressure advance in achieving the desired nozzle flow and reducing deviations against the ideal flow. - -This happens by reducing the stresses put on the extrusion system as well as reducing the absolute deviations from the ideal extrusion flow caused by pressure advance smooth time. - -This feature is especially helpful when printing at high accelerations and large flow rates as the deviations are larger in these cases. - -![ers-intro](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/ERS/ers-intro.jpg?raw=true) - -## Theory - -Enabling this feature creates a small **speed "ramp"** by slowing down and ramping up print speeds prior to and after the features causing a sudden change in extrusion flow rate needs, such as overhangs and overhang perimeters. - -This works by breaking down the printed line segments into smaller "chunks", proportional to the ERS segment length, and reduces the print speed of these segments so that the **requested extrusion volumetric flow rate change is less than or equal to the ERS threshold**. - -In summary, **it takes the "edge" off rapid extrusion changes caused by acceleration/deceleration as these are now spread over a longer distance and time.** Therefore, it can reduce wall artefacts that show when the print speeds change suddenly. These artefacts are occuring because the extruder and firmware cannot perfectly adhere to the requested by the slicer flow rates, especially when the extrusion rate is changing rapidly. - -**The example below shows the artefact that is mitigated by ERS.** -![ers-artefact](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/ERS/ers-artefact.jpg?raw=true) - -The bulging visible above is due to the extruder not being able to respond fast enough against the required speed change when printing with high accelerations and high speeds and requested to slow down for an overhang. - -In the above scenario, the printer (Bambu Lab X1 Carbon) was requested to slow down from a 200mm/sec print speed to 40mm/sec at an acceleration of 5k/sec2. **The extruder could not keep up with the pressure change, resulting in a slight bump ahead at the point of speed change.** - -This parameter interacts with the below printer kinematic settings and physical limits: - -**1. The limits of the extruder system** - how fast can it change pressure in the nozzle - -**2. The configured pressure advance values** - that also affect pressure changes in the nozzle - -**3. The acceleration profile of the printer** - higher accelerations mean higher pressure changes - -**4. The pressure advance smooth time (klipper)** - higher smooth time means higher deviation from ideal extrusion, hence more opportunity for this feature to be useful. - -

Acceleration vs. Extrusion rate smoothing

A printer's motion system does -not exactly follow the speed changes seen in the gcode preview screen of Orca -slicer. - -When a speed change is requested, the firmware look ahead planner calculates the slow down needed to achieve the target speed. The rate of slowdown is limited by the move's acceleration value. - -**Lets consider an example.** Assume printing an overhang wall with **2k external wall acceleration**, were the printer is called to slow down from **200mm/sec to 40mm/sec**. - -This deceleration move would happen over approximately 9.6mm. This is derived from the following equation: - -Where: - -- vf = final speed. -- vi = initial speed. -- a = acceleration (in this case, it will be negative as it's a deceleration). -- d = distance. - -```math -d = \frac{v_f^2 - v_i^2}{2a} -``` - -The time taken to decelerate to this new speed would be approx. 0.08 seconds, derived from the following equation: - -```math -t = \frac{v_f - v_i}{a} -``` - -A printer printing at 200mm/sec with a 0.42 line width and 0.16 layer height would be extruding plastic at approx. 12.16mm3/sec, as can also be seen from the below visual. - -![ers-printspeed](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/ERS/ers-printspeed.jpg?raw=true) - -When the printer is extruding at 40mm/sec with the same line width and layer height as above, the flow rate is 2.43mm3/sec. - -So what we are asking the extruder to do in this example is **slow down from 12.16mm3/sec flow to 2.43mm3/sec flow in 0.08 seconds** or an extrusion change rate of 121mm3/sec2. - -**This value is proportional to the acceleration of the printer. At 4k this value doubles, at 1k it is half and is independent of the speed of movement or starting and ending speeds.** - -**This value is also proportional to the line width - double the line width will result in double the extrusion rate change and vice versa. Same for layer height.** - -So, continuing with the worked example, a 2k acceleration produces an extrusion rate change ramp of 121mm3/sec2. **Therefore, setting a value higher than this would not bring any benefit to the print quality as the motion system would slow down less aggressively based on its acceleration settings.** - -**Therefore, the acceleration values act as a meaningfull upper limit to this setting.** An indicative set of values has been provided later in this page. - -### Pressure advance vs extrusion rate smoothing - -Then we need to consider pressure advance and smooth time as factors that influence extrusion rate. - -**Pressure Advance** adjusts the extruder's speed to account for the pressure changes inside the hot end’s melt zone. When the print head moves and extrudes filament, there's a delay between the movement of the extruder gear and the plastic being extruded due to the compressibility of the molten plastic in the hot end. This delay can cause too much plastic to be extruded when the print head starts moving or not enough plastic when the print head stops, leading to issues like blobbing or under-extrusion. - -**Pressure Advance Smooth time** helps to mitigate potential negative effects on print quality due to the rapid changes in extruder flow rate, which are controlled by the Pressure Advance algorithm. This parameter essentially adds a smoothing effect to the adjustments made by Pressure Advance, aiming to prevent sharp or sudden changes in the extrusion rate. - -When Pressure Advance adjusts the extruder speed to compensate for the pressure build-up or reduction in the hot end, it can lead to abrupt changes in the flow rate. These abrupt changes can potentially cause issues like: - -1. Extruder motor skipping, -2. Increased wear on the extruder gear and filament, -3. Visible artifacts on the print surface due to non-uniform extrusion. - -The smooth time setting introduces a controlled delay over which the Pressure Advance adjustments are spread out. This results in a more gradual application or reduction of extrusion pressure, leading to smoother transitions in filament flow. - -The trade-off is extrusion accuracy. There is a deviation between the requested extrusion amount and the actual extrusion amount due to this smoothing. - -**1. Increasing Smooth Time:** Leads to more gradual changes in extrusion pressure. While this can reduce artifacts and stress on the extruder system, setting it too high may diminish the effectiveness of Pressure Advance, as the compensation becomes too delayed to counteract the pressure dynamics accurately. - -**2. Decreasing Smooth Time:** Makes the Pressure Advance adjustments more immediate, which can improve the responsiveness of pressure compensation but may also reintroduce abrupt changes in flow rate, potentially leading to the issues mentioned above. - -In essence, p**ressure advance smooth time creates an intentional deviation from the ideal extruder rotation** and, therefore, extrusion amount, to allow the printer's extruder to perform within its mechanical limits. Typically, this value is set to 0.04sec, which means that when Pressure Advance adjusts the extruder's flow rate to compensate for changes in pressure within the hot end, these adjustments are spread out over a period of 0.04 seconds. - -There is a great example of pressure advance smooth time induced deviations [here](https://klipper.discourse.group/t/pressure-advance-smooth-time-skews-pressure-advance/13451) that is worth a read to get more insight in this trade-off. - -In the worked example above, **we need to set an Extrusion Rate smoothing value enough to decrease the error introduced by pressure advance smooth time against the produced output flow.** The lower the extrusion rate smoothing value, the lower the changes in flow over time hence the lower the absolute deviation from the ideal extrusion caused by the smooth time algorithm. However, going too low will result in a material decrease in overall print speed, as the print speed will be materially reduced to achieve low extrusion deviations between features, for no real benefit after a point. - -**The best way to find what the lower beneficial limit is through experimentation.** Print an object with sharp overhangs that are slowed down because off the overhang print speed settings and observe for extrusion inconsistencies. - -

Finding the ideal Extrusion Rate smoothing value

- -**Firstly, this value needs to be lower than the extrusion rate changes resulting from the acceleration profile of the printer.** As, generally, the greatest impact is in external wall finish, use your external perimeter acceleration as a point of reference. - -**Below are some approximate ERS values for 0.42 line width and 0.16 layer height.** - -1. 30mm3/sec for 0.5k acceleration -2. 60.5mm3/sec for 1k acceleration -3. 121mm3/sec2 for 2k acceleration -4. 242mm3/sec2 for 4k acceleration - -**Below are some approximate ERS values for 0.42 line width and 0.20 layer height.** - -1. 38mm3/sec for 0.5k acceleration -2. 76mm3/sec for 1k acceleration -3. 150mm3/sec2 for 2k acceleration -4. 300mm3/sec2 for 4k acceleration - -**Below are some approximate ERS values for 0.45 line width and 0.16 layer height.** - -1. 32mm3/sec for 0.5k acceleration -2. 65mm3/sec for 1k acceleration -3. 129mm3/sec2 for 2k acceleration -4. 260mm3/sec2 for 4k acceleration - -**So, your tuning starting point needs to be an ERS value that is less than this.** A good point experiment with test prints would be **a value of 60-80%** of the above maximum values. This will give some meaningful assistance to pressure advance, reducing the deviation introduced by pressure advance smooth time. The greater the smooth time, the greater the quality benefit will be. - -Therefore, for a **0.42 line width and 0.16 layer height**, the below are a recommended set of starting ERS values - -1. 18-25mm3/sec for 0.5k acceleration -2. 35-50mm3/sec for 1k acceleration -3. 70-100mm3/sec2 for 2k acceleration -4. 145-200mm3/sec2 for 4k acceleration - -If you are printing with a 0.2 layer height, you can increase these values by 25% and similarly reduce if printing with lower. - -**The second factor is your extruder's mechanical abilities.** Direct drive extruders with a good grip on the filament typically are more responsive to extrusion rate changes. Similarly with stiff filaments. So, a Bowden printer or when printing softer material like TPU or soft PLAs like polyterra there is more opportunity for the extruder to slip or deviate from the desired extrusion amount due to mechanical grip or material deformation or just delay in propagating the pressure changes (in a Bowden setup). - -**The final factor is the deviation introduced by pressure advance smooth time**, or equivalents in closed source firmware. The higher this value the larger the extrusion deviation from ideal. If you are using a direct drive extruder, reduce this value to 0.02 in your klipper firmware before tuning ERS, as a lower value results in lower deviations to mitigate. Then proceed to experimentaly tune ERS. - -**So where does that leave us?** - -Perform a test print with the above ERS settings as a starting point and adjust to your liking! If you notice budging on sharp overhangs where speed changes, like the hull of the benchy, reduce this value by 10% and try again. - -If you're not noticing any artefacts, increase by 10%, but don’t go over the maximum values recommended above because then this feature would have no effect in your print. - -## A note for Bowden printers using marlin without pressure advance. - -If your printer is not equipped with pressure advance and, especially, if you are using a Bowden setup, you don’t have the benefit of pressure advance dynamically adjusting your flow. - -In this special case, ERS will be doing all the heavy lifting that pressure advance would typically perform. In this scenario a low value of 8-10mm3/sec is usually recommended, irrespective of your acceleration settings, to smooth out pressure changes in the extrusion system as much as possible without impacting print speed too much. - -## A note on ERS Segment length - -Ideally you want this value set to 1 to allow for the largest number of steps between each speed transition. However, this may result in a too large of a gcode, with too many commands sent to your MCU per second and it may not be able to keep up. It will also slow down the Orca slicer front end as the sliced model is more complex to render. - -For Klipper printers, a segment length of 1 works OK as the RPI or similar have enough computational power to handle the gcode command volume. - -Similarly, for a Bambu lab printer, a segment length of 1 works well. **However, if you do notice your printer stuttering or stalling** (which may be the case with the lower powered P1 series printers) **or getting "Timer too close" errors** in Klipper, **increase this value to 2 or 3**. This would reduce the effectiveness of the setting but will present a more manageable load to your printer. - -## Limitations - -**This feature can only work where speed changes are induced by the slicer** - for example when transitioning from fast to slow print moves when printing overhangs, bridges and from printing internal features to external features and vice versa. - -However, it will not affect extruder behaviour when the printer is slowing down due to firmware commands - for example when turning around corners. - -In this case, the printer slows down and then accelerates independently of what the slicer has requested. In this case, the slicer is commanding a consistent speed; however, the printer is adjusting this to operate within its printer kinematic limits (SCV/Jerk) and accelerations. As the slicer is not aware of this slow down, it cannot apply pre-emptive extrusion rate smoothing to the feature and instead, the changes are governed by the printer firmware exclusively. - -## Credits - -**Original feature authors and creators:** The Prusa Slicer team, including [@bubnikv](https://github.com/bubnikv), [@hejllukas](https://github.com/hejllukas). - -**Enhanced by:** [@MGunlogson](https://github.com/MGunlogson), introducing the feature to external perimeters, enhancing it by taking into account travel, retraction and implementing near-contiguous extrusions pressure equalizer adjustments. - -**Ported to Orca:** [@igiannakas](https://github.com/igiannakas). - -**Enhanced by:** [@noisyfox](https://github.com/Noisyfox), per object pressure equalization and fixing calculation logic bugs. - -**Wiki page:** [@igiannakas](https://github.com/igiannakas). - -**Overall Orca owner and assurance:** [@softfever](https://github.com/SoftFever). - -**Community testing and feedback:** [@HakunMatat4](https://github.com/HakunMatat4), [@psiberfunk](https://github.com/psiberfunk), [@u3dreal](https://github.com/u3dreal) and more. \ No newline at end of file +# Extrusion rate smoothing + +Extrusion rate smoothing (ERS), also known as pressure equalizer in Prusa Slicer, aims to **limit the rate of extrusion volume change to be below a user set threshold (the ERS value).** It aims to assist the printer firmware internal motion planners, pressure advance in achieving the desired nozzle flow and reducing deviations against the ideal flow. + +This happens by reducing the stresses put on the extrusion system as well as reducing the absolute deviations from the ideal extrusion flow caused by pressure advance smooth time. + +This feature is especially helpful when printing at high accelerations and large flow rates as the deviations are larger in these cases. + +![ers-intro](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/ERS/ers-intro.jpg?raw=true) + +## Theory + +Enabling this feature creates a small **speed "ramp"** by slowing down and ramping up print speeds prior to and after the features causing a sudden change in extrusion flow rate needs, such as overhangs and overhang perimeters. + +This works by breaking down the printed line segments into smaller "chunks", proportional to the ERS segment length, and reduces the print speed of these segments so that the **requested extrusion volumetric flow rate change is less than or equal to the ERS threshold**. + +In summary, **it takes the "edge" off rapid extrusion changes caused by acceleration/deceleration as these are now spread over a longer distance and time.** Therefore, it can reduce wall artefacts that show when the print speeds change suddenly. These artefacts are occuring because the extruder and firmware cannot perfectly adhere to the requested by the slicer flow rates, especially when the extrusion rate is changing rapidly. + +**The example below shows the artefact that is mitigated by ERS.** +![ers-artefact](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/ERS/ers-artefact.jpg?raw=true) + +The bulging visible above is due to the extruder not being able to respond fast enough against the required speed change when printing with high accelerations and high speeds and requested to slow down for an overhang. + +In the above scenario, the printer (Bambu Lab X1 Carbon) was requested to slow down from a 200mm/sec print speed to 40mm/sec at an acceleration of 5k/sec2. **The extruder could not keep up with the pressure change, resulting in a slight bump ahead at the point of speed change.** + +This parameter interacts with the below printer kinematic settings and physical limits: + +**1. The limits of the extruder system** - how fast can it change pressure in the nozzle + +**2. The configured pressure advance values** - that also affect pressure changes in the nozzle + +**3. The acceleration profile of the printer** - higher accelerations mean higher pressure changes + +**4. The pressure advance smooth time (klipper)** - higher smooth time means higher deviation from ideal extrusion, hence more opportunity for this feature to be useful. + +### Acceleration vs. Extrusion rate smoothing + +A printer's motion system does not exactly follow the speed changes seen in the gcode preview screen of Orca +slicer. + +When a speed change is requested, the firmware look ahead planner calculates the slow down needed to achieve the target speed. The rate of slowdown is limited by the move's acceleration value. + +**Lets consider an example.** Assume printing an overhang wall with **2k external wall acceleration**, were the printer is called to slow down from **200mm/sec to 40mm/sec**. + +This deceleration move would happen over approximately 9.6mm. This is derived from the following equation: + +Where: + +- vf = final speed. +- vi = initial speed. +- a = acceleration (in this case, it will be negative as it's a deceleration). +- d = distance. + +```math +d = \frac{v_f^2 - v_i^2}{2a} +``` + +The time taken to decelerate to this new speed would be approx. 0.08 seconds, derived from the following equation: + +```math +t = \frac{v_f - v_i}{a} +``` + +A printer printing at 200mm/sec with a 0.42 line width and 0.16 layer height would be extruding plastic at approx. 12.16mm3/sec, as can also be seen from the below visual. + +![ers-printspeed](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/ERS/ers-printspeed.jpg?raw=true) + +When the printer is extruding at 40mm/sec with the same line width and layer height as above, the flow rate is 2.43mm3/sec. + +So what we are asking the extruder to do in this example is **slow down from 12.16mm3/sec flow to 2.43mm3/sec flow in 0.08 seconds** or an extrusion change rate of 121mm3/sec2. + +**This value is proportional to the acceleration of the printer. At 4k this value doubles, at 1k it is half and is independent of the speed of movement or starting and ending speeds.** + +**This value is also proportional to the line width - double the line width will result in double the extrusion rate change and vice versa. Same for layer height.** + +So, continuing with the worked example, a 2k acceleration produces an extrusion rate change ramp of 121mm3/sec2. **Therefore, setting a value higher than this would not bring any benefit to the print quality as the motion system would slow down less aggressively based on its acceleration settings.** + +**Therefore, the acceleration values act as a meaningfull upper limit to this setting.** An indicative set of values has been provided later in this page. + +### Pressure advance vs extrusion rate smoothing + +Then we need to consider pressure advance and smooth time as factors that influence extrusion rate. + +**Pressure Advance** adjusts the extruder's speed to account for the pressure changes inside the hot end’s melt zone. When the print head moves and extrudes filament, there's a delay between the movement of the extruder gear and the plastic being extruded due to the compressibility of the molten plastic in the hot end. This delay can cause too much plastic to be extruded when the print head starts moving or not enough plastic when the print head stops, leading to issues like blobbing or under-extrusion. + +**Pressure Advance Smooth time** helps to mitigate potential negative effects on print quality due to the rapid changes in extruder flow rate, which are controlled by the Pressure Advance algorithm. This parameter essentially adds a smoothing effect to the adjustments made by Pressure Advance, aiming to prevent sharp or sudden changes in the extrusion rate. + +When Pressure Advance adjusts the extruder speed to compensate for the pressure build-up or reduction in the hot end, it can lead to abrupt changes in the flow rate. These abrupt changes can potentially cause issues like: + +1. Extruder motor skipping, +2. Increased wear on the extruder gear and filament, +3. Visible artifacts on the print surface due to non-uniform extrusion. + +The smooth time setting introduces a controlled delay over which the Pressure Advance adjustments are spread out. This results in a more gradual application or reduction of extrusion pressure, leading to smoother transitions in filament flow. + +The trade-off is extrusion accuracy. There is a deviation between the requested extrusion amount and the actual extrusion amount due to this smoothing. + +**1. Increasing Smooth Time:** Leads to more gradual changes in extrusion pressure. While this can reduce artifacts and stress on the extruder system, setting it too high may diminish the effectiveness of Pressure Advance, as the compensation becomes too delayed to counteract the pressure dynamics accurately. + +**2. Decreasing Smooth Time:** Makes the Pressure Advance adjustments more immediate, which can improve the responsiveness of pressure compensation but may also reintroduce abrupt changes in flow rate, potentially leading to the issues mentioned above. + +In essence, **pressure advance smooth time creates an intentional deviation from the ideal extruder rotation** and, therefore, extrusion amount, to allow the printer's extruder to perform within its mechanical limits. Typically, this value is set to 0.04sec, which means that when Pressure Advance adjusts the extruder's flow rate to compensate for changes in pressure within the hot end, these adjustments are spread out over a period of 0.04 seconds. + +There is a great example of pressure advance smooth time induced deviations in [this Klipper forum post](https://klipper.discourse.group/t/pressure-advance-smooth-time-skews-pressure-advance/13451) that is worth a read to get more insight in this trade-off. + +In the worked example above, **we need to set an Extrusion Rate smoothing value enough to decrease the error introduced by pressure advance smooth time against the produced output flow.** The lower the extrusion rate smoothing value, the lower the changes in flow over time hence the lower the absolute deviation from the ideal extrusion caused by the smooth time algorithm. However, going too low will result in a material decrease in overall print speed, as the print speed will be materially reduced to achieve low extrusion deviations between features, for no real benefit after a point. + +**The best way to find what the lower beneficial limit is through experimentation.** Print an object with sharp overhangs that are slowed down because off the overhang print speed settings and observe for extrusion inconsistencies. + +## Finding the ideal Extrusion Rate smoothing value + +**Firstly, this value needs to be lower than the extrusion rate changes resulting from the acceleration profile of the printer.** As, generally, the greatest impact is in external wall finish, use your external perimeter acceleration as a point of reference. + +**Below are some approximate ERS values for 0.42 line width and 0.16 layer height.** + +1. 30mm3/sec for 0.5k acceleration +2. 60.5mm3/sec for 1k acceleration +3. 121mm3/sec2 for 2k acceleration +4. 242mm3/sec2 for 4k acceleration + +**Below are some approximate ERS values for 0.42 line width and 0.20 layer height.** + +1. 38mm3/sec for 0.5k acceleration +2. 76mm3/sec for 1k acceleration +3. 150mm3/sec2 for 2k acceleration +4. 300mm3/sec2 for 4k acceleration + +**Below are some approximate ERS values for 0.45 line width and 0.16 layer height.** + +1. 32mm3/sec for 0.5k acceleration +2. 65mm3/sec for 1k acceleration +3. 129mm3/sec2 for 2k acceleration +4. 260mm3/sec2 for 4k acceleration + +**So, your tuning starting point needs to be an ERS value that is less than this.** A good point experiment with test prints would be **a value of 60-80%** of the above maximum values. This will give some meaningful assistance to pressure advance, reducing the deviation introduced by pressure advance smooth time. The greater the smooth time, the greater the quality benefit will be. + +Therefore, for a **0.42 line width and 0.16 layer height**, the below are a recommended set of starting ERS values + +1. 18-25mm3/sec for 0.5k acceleration +2. 35-50mm3/sec for 1k acceleration +3. 70-100mm3/sec2 for 2k acceleration +4. 145-200mm3/sec2 for 4k acceleration + +If you are printing with a 0.2 layer height, you can increase these values by 25% and similarly reduce if printing with lower. + +**The second factor is your extruder's mechanical abilities.** Direct drive extruders with a good grip on the filament typically are more responsive to extrusion rate changes. Similarly with stiff filaments. So, a Bowden printer or when printing softer material like TPU or soft PLAs like polyterra there is more opportunity for the extruder to slip or deviate from the desired extrusion amount due to mechanical grip or material deformation or just delay in propagating the pressure changes (in a Bowden setup). + +**The final factor is the deviation introduced by pressure advance smooth time**, or equivalents in closed source firmware. The higher this value the larger the extrusion deviation from ideal. If you are using a direct drive extruder, reduce this value to 0.02 in your klipper firmware before tuning ERS, as a lower value results in lower deviations to mitigate. Then proceed to experimentaly tune ERS. + +**So where does that leave us?** + +Perform a test print with the above ERS settings as a starting point and adjust to your liking! If you notice budging on sharp overhangs where speed changes, like the hull of the benchy, reduce this value by 10% and try again. + +If you're not noticing any artefacts, increase by 10%, but don’t go over the maximum values recommended above because then this feature would have no effect in your print. + +## A note for Bowden printers using marlin without pressure advance + +If your printer is not equipped with pressure advance and, especially, if you are using a Bowden setup, you don’t have the benefit of pressure advance dynamically adjusting your flow. + +In this special case, ERS will be doing all the heavy lifting that pressure advance would typically perform. In this scenario a low value of 8-10mm3/sec is usually recommended, irrespective of your acceleration settings, to smooth out pressure changes in the extrusion system as much as possible without impacting print speed too much. + +## A note on ERS Segment length + +Ideally you want this value set to 1 to allow for the largest number of steps between each speed transition. However, this may result in a too large of a gcode, with too many commands sent to your MCU per second and it may not be able to keep up. It will also slow down the Orca slicer front end as the sliced model is more complex to render. + +For Klipper printers, a segment length of 1 works OK as the RPI or similar have enough computational power to handle the gcode command volume. + +Similarly, for a Bambu lab printer, a segment length of 1 works well. **However, if you do notice your printer stuttering or stalling** (which may be the case with the lower powered P1 series printers) **or getting "Timer too close" errors** in Klipper, **increase this value to 2 or 3**. This would reduce the effectiveness of the setting but will present a more manageable load to your printer. + +## Limitations + +**This feature can only work where speed changes are induced by the slicer** - for example when transitioning from fast to slow print moves when printing overhangs, bridges and from printing internal features to external features and vice versa. + +However, it will not affect extruder behaviour when the printer is slowing down due to firmware commands - for example when turning around corners. + +In this case, the printer slows down and then accelerates independently of what the slicer has requested. In this case, the slicer is commanding a consistent speed; however, the printer is adjusting this to operate within its printer kinematic limits (SCV/Jerk) and accelerations. As the slicer is not aware of this slow down, it cannot apply pre-emptive extrusion rate smoothing to the feature and instead, the changes are governed by the printer firmware exclusively. + +## Credits + +**Original feature authors and creators:** The Prusa Slicer team, including [@bubnikv](https://github.com/bubnikv), [@hejllukas](https://github.com/hejllukas). + +**Enhanced by:** [@MGunlogson](https://github.com/MGunlogson), introducing the feature to external perimeters, enhancing it by taking into account travel, retraction and implementing near-contiguous extrusions pressure equalizer adjustments. + +**Ported to Orca:** [@igiannakas](https://github.com/igiannakas). + +**Enhanced by:** [@noisyfox](https://github.com/Noisyfox), per object pressure equalization and fixing calculation logic bugs. + +**Wiki page:** [@igiannakas](https://github.com/igiannakas). + +**Overall Orca owner and assurance:** [@softfever](https://github.com/SoftFever). + +**Community testing and feedback:** [@HakunMatat4](https://github.com/HakunMatat4), [@psiberfunk](https://github.com/psiberfunk), [@u3dreal](https://github.com/u3dreal) and more. diff --git a/doc/print_settings/strength/infill_desc_calculator.xlsx b/doc/print_settings/strength/infill_desc_calculator.xlsx new file mode 100644 index 0000000000..d2eb743142 Binary files /dev/null and b/doc/print_settings/strength/infill_desc_calculator.xlsx differ diff --git a/doc/print_settings/strength/strength_settings_infill.md b/doc/print_settings/strength/strength_settings_infill.md new file mode 100644 index 0000000000..394ab8720e --- /dev/null +++ b/doc/print_settings/strength/strength_settings_infill.md @@ -0,0 +1,335 @@ +# Infill + +Infill is the internal structure of a 3D print, providing strength and support. It can be adjusted to balance material usage, print time, and part strength. + +## Sparse infill density + +Density usually should be calculated as a % of the total infill volume, not the total print volume. +Higher density increases strength but also material usage and print time. Lower density saves material and time but reduces strength. + +Nevertheless, **not all patterns interpret density the same way**, so the actual material usage may vary. You can see each pattern's material usage in the [Sparse Infill Pattern](#sparse-infill-pattern) section. + +## Sparse Infill Pattern + +Infill patterns determine how material is distributed within a print. Different patterns can affect strength, flexibility, and print speed using the same density setting. + +There is no one-size-fits-all solution, as the best pattern depends on the specific print and its requirements. + +Many patterns may look similar and have similar overall specifications, but they can behave very differently in practice. +As most settings in 3D printing, experience is the best way to determine which pattern works best for your specific needs. + +| Infill | X-Y Strength | Z Strength | Material Usage | Print Time | +|---------------------------------------------|--------------|-------------|----------------|-------------| +| [Concentric](#concentric) | Low | Normal | Normal | Normal | +| [Rectilinear](#rectilinear) | Normal-Low | Low | Normal | Normal | +| [Grid](#grid) | High | High | Normal | Normal | +| [2D Lattice](#2d-lattice) | Normal-Low | Low | Normal | Normal | +| [Line](#line) | Low | Low | Normal | Normal-Low | +| [Cubic](#cubic) | High | High | Normal | Normal-Low | +| [Triangles](#triangles) | High | Normal | Normal | Normal-Low | +| [Tri-hexagon](#tri-hexagon) | High | Normal-High | Normal | Normal-Low | +| [Gyroid](#gyroid) | High | High | Normal | Normal-High | +| [TPMS-D](#tpms-d) | High | High | Normal | High | +| [Honeycomb](#honeycomb) | High | High | High | Ultra-High | +| [Adaptive Cubic](#adaptive-cubic) | Normal-High | Normal-High | Low | Low | +| [Aligned Rectilinear](#aligned-rectilinear) | Normal-Low | Normal | Normal | Normal | +| [2D Honeycomb](#2d-honeycomb) | Normal-Low | Normal-Low | Normal | Normal-Low | +| [3D Honeycomb](#3d-honeycomb) | Normal-High | Normal-High | Normal-Low | High | +| [Hilbert Curve](#hilbert-curve) | Low | Normal | Normal | High | +| [Archimedean Chords](#archimedean-chords) | Low | Normal | Normal | Normal-Low | +| [Octagram Spiral](#octagram-spiral) | Low | Normal | Normal | Normal-High | +| [Support Cubic](#support-cubic) | Low | Low | Extra-Low | Extra-Low | +| [Lightning](#lightning) | Low | Low | Ultra-Low | Ultra-Low | +| [Cross Hatch](#cross-hatch) | Normal-High | Normal-High | Normal | Normal-High | +| [Quarter Cubic](#quarter-cubic) | High | High | Normal | Normal-Low | + +> [!NOTE] +> You can download [infill_desc_calculator.xlsx](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/print_settings/strength/infill_desc_calculator.xlsx?raw=true) used to calculate the values above. + +### Concentric + +Fills the area with progressively smaller versions of the outer contour, creating a concentric pattern. Ideal for 100% infill or flexible prints. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal-High + +![infill-top-concentric](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-concentric.png?raw=true) + +### Rectilinear + +Parallel lines spaced according to infill density. Each layer is printed perpendicular to the previous, resulting in low vertical bonding. + +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal-High + +![infill-top-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-rectilinear.png?raw=true) + +### Grid + +Two-layer pattern of perpendicular lines, forming a grid. Overlapping points may cause noise or artifacts. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal + +![infill-top-grid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-grid.png?raw=true) + +### 2D Lattice + +Low-strength pattern with good flexibility. Angle 1 and angle 2 TBD. + +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal + +![infill-top-2d-lattice](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-2d-lattice.png?raw=true) + +### Line + +Similar to [rectilinear](#rectilinear), but each line is slightly rotated to improve print speed. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal-High + +![infill-top-line](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-line.png?raw=true) + +### Cubic + +3D cube pattern with corners facing down, distributing force in all directions. Triangles in the horizontal plane provide good X-Y strength. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal-High + +![infill-top-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cubic.png?raw=true) + +### Triangles + +Triangle-based grid, offering strong X-Y strength but with triple overlaps at intersections. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal-High + +![infill-top-triangles](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-triangles.png?raw=true) + +### Tri-hexagon + +Similar to the [triangles](#triangles) pattern but offset to prevent triple overlaps at intersections. This design combines triangles and hexagons, providing excellent X-Y strength. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** Normal-High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal-High + +![infill-top-tri-hexagon](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-tri-hexagon.png?raw=true) + +### Gyroid + +Mathematical, isotropic surface providing equal strength in all directions. Excellent for strong, flexible prints and resin filling due to its interconnected structure. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-High +- **Material/Time (Higher better):** Low + +![infill-top-gyroid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-gyroid.png?raw=true) + +### TPMS-D + +Triply Periodic Minimal Surface - D. Hybrid between [Cross Hatch](#cross-hatch) and [Gyroid](#gyroid), combining rigidity and smooth transitions. Isotropic and strong in all directions. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** High +- **Material/Time (Higher better):** Low + +![infill-top-tpms-d](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-tpms-d.png?raw=true) + +### Honeycomb + +Hexagonal pattern balancing strength and material use. Double walls in each hexagon increase material consumption. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** High +- **Print Time:** Ultra-High +- **Material/Time (Higher better):** Extra Low + +![infill-top-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-honeycomb.png?raw=true) + +### Adaptive Cubic + +[Cubic](#cubic) pattern with adaptive density: denser near walls, sparser in the center. Saves material and time while maintaining strength, ideal for large prints. + +- **Horizontal Strength (X-Y):** Normal-High +- **Vertical Strength (Z):** Normal-High +- **Density Calculation:** Same as [Cubic](#cubic) but reduced in the center +- **Material Usage:** Low +- **Print Time:** Low +- **Material/Time (Higher better):** Normal + +![infill-top-adaptive-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-adaptive-cubic.png?raw=true) + +### Aligned Rectilinear + +Parallel lines spaced by the infill spacing, each layer printed in the same direction as the previous layer. Good horizontal strength perpendicular to the lines, but terrible in parallel direction. +Recommended with layer anchoring to improve not perpendicular strength. + +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal + +![infill-top-aligned-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-aligned-rectilinear.png?raw=true) + +### 2D Honeycomb + +Vertical Honeycomb pattern. Acceptable torsional stiffness. Developed for low densities structures like wings. Improve over [2D Lattice](#2d-lattice) offers same performance with lower densities.This infill includes a Overhang angle parameter to improve interlayer point of contact and reduce the risk of delamination. + +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Normal-Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal + +![infill-top-2d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-2d-honeycomb.png?raw=true) + +### 3D Honeycomb + +This infill tries to generate a printable honeycomb structure by printing squares and octagons mantaining a vertical angle high enough to mantian contact with the previous layer. + +- **Horizontal Strength (X-Y):** Normal-High +- **Vertical Strength (Z):** Normal-High +- **Density Calculation:** Unknown +- **Material Usage:** Normal-Low +- **Print Time:** High +- **Material/Time (Higher better):** Extra Low + +![infill-top-3d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-3d-honeycomb.png?raw=true) + +### Hilbert Curve + +Hilbert Curve is a space-filling curve that can be used to create a continuous infill pattern. It is known for its Esthetic appeal and ability to fill space efficiently. +Print speed is very low due to the complexity of the path, which can lead to longer print times. It is not recommended for structural parts but can be used for Esthetic purposes. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** High +- **Material/Time (Higher better):** Extra Low + +![infill-top-hilbert-curve](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-hilbert-curve.png?raw=true) + +### Archimedean Chords + +Spiral pattern that fills the area with concentric arcs, creating a smooth and continuous infill. Can be filled with resin thanks to its interconnected hollow structure, which allows the resin to flow through it and cure properly. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal-High + +![infill-top-archimedean-chords](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-archimedean-chords.png?raw=true) + +### Octagram Spiral + +Esthetic pattern with low strength and high print time. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-High +- **Material/Time (Higher better):** Normal + +![infill-top-octagram-spiral](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-octagram-spiral.png?raw=true) + +### Support Cubic + +Support |Cubic is a variation of the [Cubic](#cubic) infill pattern that is specifically designed for support top layers. Will use more material than Lightning infill but will provide better strength. Nevertheless, it is still a low-density infill pattern. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of layer before top shell layers +- **Material Usage:** Extra-Low +- **Print Time:** Extra-Low +- **Material/Time (Higher better):** Normal + +![infill-top-support-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-support-cubic.png?raw=true) + +### Lightning + +Ultra-fast, ultra-low material infill. Designed for speed and efficiency, ideal for quick prints or non-structural prototypes. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of layer before top shell layers +- **Material Usage:** Ultra-Low +- **Print Time:** Ultra-Low +- **Material/Time (Higher better):** Extra Low + +![infill-top-lightning](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-lightning.png?raw=true) + +### Cross Hatch + +Similar to [Gyroid](#gyroid) but with linear patterns, creating weak points at internal corners. + +- **Horizontal Strength (X-Y):** Normal-High +- **Vertical Strength (Z):** Normal-High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-High +- **Material/Time (Higher better):** Low + +![infill-top-cross-hatch](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cross-hatch.png?raw=true) + +### Quarter Cubic + +[Cubic](#cubic) pattern with extra internal divisions, improving X-Y strength. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal + +![infill-top-quarter-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-quarter-cubic.png?raw=true) diff --git a/doc/Auxiliary-fan.md b/doc/printer_settings/Auxiliary-fan.md similarity index 100% rename from doc/Auxiliary-fan.md rename to doc/printer_settings/Auxiliary-fan.md diff --git a/doc/Chamber-temperature.md b/doc/printer_settings/Chamber-temperature.md similarity index 100% rename from doc/Chamber-temperature.md rename to doc/printer_settings/Chamber-temperature.md diff --git a/doc/adaptive-bed-mesh.md b/doc/printer_settings/adaptive-bed-mesh.md similarity index 100% rename from doc/adaptive-bed-mesh.md rename to doc/printer_settings/adaptive-bed-mesh.md diff --git a/doc/air-filtration.md b/doc/printer_settings/air-filtration.md similarity index 100% rename from doc/air-filtration.md rename to doc/printer_settings/air-filtration.md diff --git a/doc/bed-types.md b/doc/printer_settings/bed-types.md similarity index 100% rename from doc/bed-types.md rename to doc/printer_settings/bed-types.md diff --git a/resources/data/hints.ini b/resources/data/hints.ini index 478ef205af..f4edae1265 100644 --- a/resources/data/hints.ini +++ b/resources/data/hints.ini @@ -64,7 +64,7 @@ [hint:Precise wall] text = Precise wall\nDid you know that turning on precise wall can improve precision and layer consistency? -documentation_link = https://github.com/SoftFever/OrcaSlicer/wiki/Precise-wall +documentation_link = https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_precision [hint:Sandwich mode] text = Sandwich mode\nDid you know that you can use sandwich mode (inner-outer-inner) to improve precision and layer consistency if your model doesn't have very steep overhangs? diff --git a/resources/profiles/Flashforge/Flashforge AD5X_cover.png b/resources/profiles/Flashforge/Flashforge AD5X_cover.png index 67dae78153..03c9a7847c 100644 Binary files a/resources/profiles/Flashforge/Flashforge AD5X_cover.png and b/resources/profiles/Flashforge/Flashforge AD5X_cover.png differ diff --git a/resources/profiles/Flashforge/Flashforge Guider4 Pro_cover.png b/resources/profiles/Flashforge/Flashforge Guider4 Pro_cover.png index 0c65964205..7855bd6480 100644 Binary files a/resources/profiles/Flashforge/Flashforge Guider4 Pro_cover.png and b/resources/profiles/Flashforge/Flashforge Guider4 Pro_cover.png differ diff --git a/resources/profiles/Flashforge/Flashforge Guider4_cover.png b/resources/profiles/Flashforge/Flashforge Guider4_cover.png index eb108eae61..4ed94d7e98 100644 Binary files a/resources/profiles/Flashforge/Flashforge Guider4_cover.png and b/resources/profiles/Flashforge/Flashforge Guider4_cover.png differ diff --git a/resources/profiles/Prusa/MINIIS_cover.png b/resources/profiles/Prusa/MINIIS_cover.png index 698ee63655..c7a2cd8dbf 100644 Binary files a/resources/profiles/Prusa/MINIIS_cover.png and b/resources/profiles/Prusa/MINIIS_cover.png differ diff --git a/resources/profiles/Prusa/MINI_cover.png b/resources/profiles/Prusa/MINI_cover.png index 698ee63655..c7a2cd8dbf 100644 Binary files a/resources/profiles/Prusa/MINI_cover.png and b/resources/profiles/Prusa/MINI_cover.png differ diff --git a/resources/profiles/Prusa/MK3.5_cover.png b/resources/profiles/Prusa/MK3.5_cover.png index 21c5cfb09f..431d1ed011 100644 Binary files a/resources/profiles/Prusa/MK3.5_cover.png and b/resources/profiles/Prusa/MK3.5_cover.png differ diff --git a/resources/profiles/Prusa/MK3S_cover.png b/resources/profiles/Prusa/MK3S_cover.png index 48cc071667..9701792d91 100644 Binary files a/resources/profiles/Prusa/MK3S_cover.png and b/resources/profiles/Prusa/MK3S_cover.png differ diff --git a/resources/profiles/Prusa/MK4IS_cover.png b/resources/profiles/Prusa/MK4IS_cover.png index 2d53af4fa8..f1abf04085 100644 Binary files a/resources/profiles/Prusa/MK4IS_cover.png and b/resources/profiles/Prusa/MK4IS_cover.png differ diff --git a/resources/profiles/Prusa/MK4S HF_cover.png b/resources/profiles/Prusa/MK4S HF_cover.png index 0f074d71ad..80799cdd14 100644 Binary files a/resources/profiles/Prusa/MK4S HF_cover.png and b/resources/profiles/Prusa/MK4S HF_cover.png differ diff --git a/resources/profiles/Prusa/MK4S_cover.png b/resources/profiles/Prusa/MK4S_cover.png index 0f074d71ad..80799cdd14 100644 Binary files a/resources/profiles/Prusa/MK4S_cover.png and b/resources/profiles/Prusa/MK4S_cover.png differ diff --git a/resources/profiles/Prusa/Prusa CORE One HF_cover.png b/resources/profiles/Prusa/Prusa CORE One HF_cover.png index d19a92c8e6..7f6dc7ebb0 100644 Binary files a/resources/profiles/Prusa/Prusa CORE One HF_cover.png and b/resources/profiles/Prusa/Prusa CORE One HF_cover.png differ diff --git a/resources/profiles/Prusa/Prusa CORE One_cover.png b/resources/profiles/Prusa/Prusa CORE One_cover.png index d19a92c8e6..7f6dc7ebb0 100644 Binary files a/resources/profiles/Prusa/Prusa CORE One_cover.png and b/resources/profiles/Prusa/Prusa CORE One_cover.png differ diff --git a/resources/profiles/Prusa/Prusa XL 5T_cover.png b/resources/profiles/Prusa/Prusa XL 5T_cover.png index 5cfc6bcf01..a9b837e265 100644 Binary files a/resources/profiles/Prusa/Prusa XL 5T_cover.png and b/resources/profiles/Prusa/Prusa XL 5T_cover.png differ diff --git a/resources/profiles/Prusa/Prusa XL_cover.png b/resources/profiles/Prusa/Prusa XL_cover.png index f2bc62f148..f72cc672d0 100644 Binary files a/resources/profiles/Prusa/Prusa XL_cover.png and b/resources/profiles/Prusa/Prusa XL_cover.png differ diff --git a/resources/profiles/Sovol/Sovol Zero_cover.png b/resources/profiles/Sovol/Sovol Zero_cover.png index dbffd91ed2..618dcc5cd0 100755 Binary files a/resources/profiles/Sovol/Sovol Zero_cover.png and b/resources/profiles/Sovol/Sovol Zero_cover.png differ diff --git a/resources/profiles/Z-Bolt.json b/resources/profiles/Z-Bolt.json index b1b2e61fd6..8aa3f7232d 100644 --- a/resources/profiles/Z-Bolt.json +++ b/resources/profiles/Z-Bolt.json @@ -28,6 +28,18 @@ { "name": "Z-Bolt S600 Dual", "sub_path": "machine/Z-Bolt S600 Dual.json" + }, + { + "name": "Z-Bolt S800 Dual", + "sub_path": "machine/Z-Bolt S800 Dual.json" + }, + { + "name": "Z-Bolt S1000", + "sub_path": "machine/Z-Bolt S1000.json" + }, + { + "name": "Z-Bolt S1000 Dual", + "sub_path": "machine/Z-Bolt S1000 Dual.json" } ], "process_list": [ @@ -346,6 +358,82 @@ { "name": "0.48mm Standard @Z-Bolt S600 0.8 nozzle", "sub_path": "process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json" + }, + { + "name": "0.12mm Fine @Z-Bolt S800", + "sub_path": "process/0.12mm Fine @Z-Bolt S800.json" + }, + { + "name": "0.12mm High Quality @Z-Bolt S800", + "sub_path": "process/0.12mm High Quality @Z-Bolt S800.json" + }, + { + "name": "0.16mm Optimal @Z-Bolt S800", + "sub_path": "process/0.16mm Optimal @Z-Bolt S800.json" + }, + { + "name": "0.16mm High Quality @Z-Bolt S800", + "sub_path": "process/0.16mm High Quality @Z-Bolt S800.json" + }, + { + "name": "0.16mm Standard @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.20mm Standard @Z-Bolt S800", + "sub_path": "process/0.20mm Standard @Z-Bolt S800.json" + }, + { + "name": "0.20mm Strength @Z-Bolt S800", + "sub_path": "process/0.20mm Strength @Z-Bolt S800.json" + }, + { + "name": "0.20mm Standard @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.24mm Draft @Z-Bolt S800", + "sub_path": "process/0.24mm Draft @Z-Bolt S800.json" + }, + { + "name": "0.24mm Standard @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Z-Bolt S800 0.8 nozzle", + "sub_path": "process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Z-Bolt S800", + "sub_path": "process/0.28mm Extra Draft @Z-Bolt S800.json" + }, + { + "name": "0.30mm Standard @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.32mm Standard @Z-Bolt S800 0.8 nozzle", + "sub_path": "process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json" + }, + { + "name": "0.36mm Standard @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Z-Bolt S800 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json" + }, + { + "name": "0.42mm Standard @Z-Bolt S800 0.6 nozzle", + "sub_path": "process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json" + }, + { + "name": "0.48mm Standard @Z-Bolt S800 0.8 nozzle", + "sub_path": "process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json" } ], "filament_list": [ @@ -510,6 +598,42 @@ { "name": "Z-Bolt S600 Dual 0.8 nozzle", "sub_path": "machine/Z-Bolt S600 Dual 0.8 nozzle.json" + }, + { + "name": "Z-Bolt S800 Dual 0.4 nozzle", + "sub_path": "machine/Z-Bolt S800 Dual 0.4 nozzle.json" + }, + { + "name": "Z-Bolt S800 Dual 0.6 nozzle", + "sub_path": "machine/Z-Bolt S800 Dual 0.6 nozzle.json" + }, + { + "name": "Z-Bolt S800 Dual 0.8 nozzle", + "sub_path": "machine/Z-Bolt S800 Dual 0.8 nozzle.json" + }, + { + "name": "Z-Bolt S1000 0.4 nozzle", + "sub_path": "machine/Z-Bolt S1000 0.4 nozzle.json" + }, + { + "name": "Z-Bolt S1000 0.6 nozzle", + "sub_path": "machine/Z-Bolt S1000 0.6 nozzle.json" + }, + { + "name": "Z-Bolt S1000 0.8 nozzle", + "sub_path": "machine/Z-Bolt S1000 0.8 nozzle.json" + }, + { + "name": "Z-Bolt S1000 Dual 0.4 nozzle", + "sub_path": "machine/Z-Bolt S1000 Dual 0.4 nozzle.json" + }, + { + "name": "Z-Bolt S1000 Dual 0.6 nozzle", + "sub_path": "machine/Z-Bolt S1000 Dual 0.6 nozzle.json" + }, + { + "name": "Z-Bolt S1000 Dual 0.8 nozzle", + "sub_path": "machine/Z-Bolt S1000 Dual 0.8 nozzle.json" } ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/Z-Bolt S1000 Dual_cover.png b/resources/profiles/Z-Bolt/Z-Bolt S1000 Dual_cover.png new file mode 100644 index 0000000000..d51359c188 Binary files /dev/null and b/resources/profiles/Z-Bolt/Z-Bolt S1000 Dual_cover.png differ diff --git a/resources/profiles/Z-Bolt/Z-Bolt S1000_cover.png b/resources/profiles/Z-Bolt/Z-Bolt S1000_cover.png new file mode 100644 index 0000000000..d51359c188 Binary files /dev/null and b/resources/profiles/Z-Bolt/Z-Bolt S1000_cover.png differ diff --git a/resources/profiles/Z-Bolt/Z-Bolt S800 Dual_cover.png b/resources/profiles/Z-Bolt/Z-Bolt S800 Dual_cover.png new file mode 100644 index 0000000000..d971729f27 Binary files /dev/null and b/resources/profiles/Z-Bolt/Z-Bolt S800 Dual_cover.png differ diff --git a/resources/profiles/Z-Bolt/Z-Bolt_S1000_buildplate_model.STL b/resources/profiles/Z-Bolt/Z-Bolt_S1000_buildplate_model.STL new file mode 100644 index 0000000000..78a5093f3e Binary files /dev/null and b/resources/profiles/Z-Bolt/Z-Bolt_S1000_buildplate_model.STL differ diff --git a/resources/profiles/Z-Bolt/Z-Bolt_S800_buildplate_model.stl b/resources/profiles/Z-Bolt/Z-Bolt_S800_buildplate_model.stl new file mode 100644 index 0000000000..e2f62794b1 Binary files /dev/null and b/resources/profiles/Z-Bolt/Z-Bolt_S800_buildplate_model.stl differ diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.4 nozzle.json index ed7f1d94ca..2ea92fe6c1 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.4 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.4 nozzle", "Z-Bolt S400 Dual 0.4 nozzle", "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.6 nozzle.json index 0495086565..5fcc877765 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.6 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle", "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.8 nozzle.json index b1ce2bcc86..3598177576 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS @0.8 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle", "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.4 nozzle.json index 91b1a0e4d5..cc5d76ef20 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.4 nozzle.json @@ -16,6 +16,9 @@ "Z-Bolt S400 0.4 nozzle", "Z-Bolt S400 Dual 0.4 nozzle", "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.6 nozzle.json index 176b92d6cb..d0627e2a47 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.6 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle", "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.8 nozzle.json index d8a0e114d1..d3d59ad68f 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT @0.8 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle", "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT.json index 225d724162..fb823938ff 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS HT.json @@ -52,6 +52,15 @@ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.4 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS.json b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS.json index f37fcdc407..5816e9543f 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt ABS.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt ABS.json @@ -48,6 +48,15 @@ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.4 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.4 nozzle.json index 7bdd30413f..4d10a8827c 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.4 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.4 nozzle", "Z-Bolt S400 Dual 0.4 nozzle", "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.6 nozzle.json index ebb334d31f..f3228d21fd 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.6 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle", "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.8 nozzle.json index 7b37806df0..bce234a48c 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PA @0.8 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle", "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PA.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PA.json index ad4b8402c8..fc7bb7ac70 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PA.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PA.json @@ -66,6 +66,15 @@ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.4 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.4 nozzle.json index 4d4d8cebac..2444428b6c 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.4 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.4 nozzle", "Z-Bolt S400 Dual 0.4 nozzle", "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.6 nozzle.json index 7b2b55c8da..d037edf797 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.6 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle", "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.8 nozzle.json index 8f5095731a..eacd1253ae 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG @0.8 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle", "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG.json index edef776efb..2ff950122f 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PETG.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PETG.json @@ -72,6 +72,15 @@ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.4 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.4 nozzle.json index ce70c64b05..1d85fa8d42 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.4 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.4 nozzle", "Z-Bolt S400 Dual 0.4 nozzle", "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.6 nozzle.json index d90da4f6c5..6304a6d780 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.6 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle", "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.8 nozzle.json index 5bbf67ca45..a8f2b923a1 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA @0.8 nozzle.json @@ -15,6 +15,9 @@ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle", "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA.json b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA.json index eddf829110..6d4b0a6497 100644 --- a/resources/profiles/Z-Bolt/filament/Z-Bolt PLA.json +++ b/resources/profiles/Z-Bolt/filament/Z-Bolt PLA.json @@ -51,6 +51,15 @@ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.4 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S800 Dual 0.4 nozzle", + "Z-Bolt S800 Dual 0.6 nozzle", + "Z-Bolt S800 Dual 0.8 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.4 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.4 nozzle.json new file mode 100644 index 0000000000..3ca11bb262 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.4 nozzle.json @@ -0,0 +1,133 @@ +{ + "type": "machine", + "name": "Z-Bolt S1000 0.4 nozzle", + "inherits": "fdm_zbolt_common", + "from": "system", + "setting_id": "GM030", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "printer_structure": "corexy", + "printer_model": "Z-Bolt S1000", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_height": "1000", + "printable_area": [ + "0x0", + "1000x0", + "1000x1000", + "0x1000" + ], + "default_filament_profile": [ + "Z-Bolt Generic PLA" + ], + "default_print_profile": "0.20mm Standard @Z-Bolt S1000", + "extruder_colour": [ + "#018001" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "70", + "extruder_clearance_height_to_lid": "200", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.8" + ], + "retract_length_toolchange": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "30" + ], + "nozzle_type": "hardened_steel", + "single_extruder_multi_material": "1", + "support_chamber_temp_control": "1", + "machine_start_gcode": "START_PRINT T_BED=[bed_temperature_initial_layer] T_EXTRUDER=[nozzle_temperature_initial_layer] T_CHAMBER=[chamber_temperature]", + "machine_end_gcode": "END_PRINT T_BED=[bed_temperature] T_CHAMBER=[chamber_temperature] COOLDOWN_TIME=120", + "machine_pause_gcode": "PAUSE" +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.6 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.6 nozzle.json new file mode 100644 index 0000000000..ed2ccdf968 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.6 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "machine", + "name": "Z-Bolt S1000 0.6 nozzle", + "inherits": "Z-Bolt S1000 0.4 nozzle", + "from": "system", + "setting_id": "GM031", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "nozzle_diameter": [ + "0.6" + ], + "printer_model": "Z-Bolt S1000", + "printer_variant": "0.6", + "default_print_profile": "0.30mm Standard @Z-Bolt S1000 0.6 nozzle", + "max_layer_height": [ + "0.36" + ], + "min_layer_height": [ + "0.12" + ], + "retraction_length": [ + "1.4" + ], + "retraction_minimum_travel": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.8 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.8 nozzle.json new file mode 100644 index 0000000000..0af74732c2 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Z-Bolt S1000 0.8 nozzle", + "inherits": "Z-Bolt S1000 0.4 nozzle", + "from": "system", + "setting_id": "GM032", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "nozzle_diameter": [ + "0.8" + ], + "printer_model": "Z-Bolt S1000", + "printer_variant": "0.8", + "default_print_profile": "0.40mm Standard @Z-Bolt S1000 0.8 nozzle", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.16" + ], + "retraction_length": [ + "3" + ], + "retract_length_toolchange": [ + "3" + ], + "retraction_minimum_travel": [ + "3" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.4 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.4 nozzle.json new file mode 100644 index 0000000000..d9f21b697a --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.4 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "machine", + "name": "Z-Bolt S1000 Dual 0.4 nozzle", + "inherits": "Z-Bolt S1000 0.4 nozzle", + "from": "system", + "setting_id": "GM033", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "manual_filament_change": "0", + "single_extruder_multi_material": "0", + "nozzle_diameter": [ + "0.4", "0.4" + ], + "printer_model": "Z-Bolt S1000 Dual", + "printer_variant": "0.4", + "default_print_profile": "0.20mm Standard @Z-Bolt S1000", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "retraction_length": [ + "0.8" + ], + "retraction_minimum_travel": [ + "1" + ], + "change_filament_gcode": "G91\nG1 Z{layer_z+z_hop[0]} F1000\nG90", + "machine_start_gcode": "START_PRINT TOOL_NR=[initial_tool] T_BED=[bed_temperature_initial_layer] T_EXTRUDER=[first_layer_temperature[initial_tool]] T_CHAMBER=[chamber_temperature] {if is_extruder_used[0]}T0_TEMP={first_layer_temperature[0]}{endif} {if is_extruder_used[1]}T1_TEMP={first_layer_temperature[1]}{endif}" +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.6 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.6 nozzle.json new file mode 100644 index 0000000000..524499d1a7 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.6 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "machine", + "name": "Z-Bolt S1000 Dual 0.6 nozzle", + "inherits": "Z-Bolt S1000 Dual 0.4 nozzle", + "from": "system", + "setting_id": "GM034", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "nozzle_diameter": [ + "0.6", "0.6" + ], + "printer_model": "Z-Bolt S1000 Dual", + "printer_variant": "0.6", + "default_print_profile": "0.30mm Standard @Z-Bolt S1000 0.6 nozzle", + "max_layer_height": [ + "0.36" + ], + "min_layer_height": [ + "0.12" + ], + "retraction_length": [ + "1.4" + ], + "retraction_minimum_travel": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.8 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.8 nozzle.json new file mode 100644 index 0000000000..19494bd35d --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Z-Bolt S1000 Dual 0.8 nozzle", + "inherits": "Z-Bolt S1000 Dual 0.4 nozzle", + "from": "system", + "setting_id": "GM035", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "nozzle_diameter": [ + "0.8", "0.8" + ], + "printer_model": "Z-Bolt S1000 Dual", + "printer_variant": "0.8", + "default_print_profile": "0.40mm Standard @Z-Bolt S1000 0.8 nozzle", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.16" + ], + "retraction_length": [ + "3" + ], + "retract_length_toolchange": [ + "3" + ], + "retraction_minimum_travel": [ + "3" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual.json new file mode 100644 index 0000000000..65fc6099cf --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000 Dual.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Z-Bolt S1000 Dual", + "model_id": "Z-Bolt-S1000 Dual", + "nozzle_diameter": "0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Z-Bolt", + "bed_model": "Z-Bolt_S1000_buildplate_model.stl", + "bed_texture": "Z-Bolt_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Z-Bolt PLA @base;Z-Bolt ABS @base;Z-Bolt PETG @base;Z-Bolt PA @base;Z-Bolt ABS HT @base" +} diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S1000.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000.json new file mode 100644 index 0000000000..9287d89f87 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S1000.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Z-Bolt S1000", + "model_id": "Z-Bolt-S1000", + "nozzle_diameter": "0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Z-Bolt", + "bed_model": "Z-Bolt_S1000_buildplate_model.stl", + "bed_texture": "Z-Bolt_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Z-Bolt PLA @base;Z-Bolt ABS @base;Z-Bolt PETG @base;Z-Bolt PA @base;Z-Bolt ABS HT @base" +} diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.4 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.4 nozzle.json new file mode 100644 index 0000000000..3d489539ec --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.4 nozzle.json @@ -0,0 +1,135 @@ +{ + "type": "machine", + "name": "Z-Bolt S800 Dual 0.4 nozzle", + "inherits": "fdm_zbolt_common", + "from": "system", + "setting_id": "GM027", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "printer_structure": "corexy", + "manual_filament_change": "0", + "single_extruder_multi_material": "0", + "printer_model": "Z-Bolt S800 Dual", + "nozzle_diameter": [ + "0.4", "0.4" + ], + "printer_variant": "0.4", + "printable_height": "802", + "printable_area": [ + "0x0", + "802x0", + "802x802", + "0x802" + ], + "default_filament_profile": [ + "Z-Bolt Generic PLA" + ], + "default_print_profile": "0.20mm Standard @Z-Bolt S800", + "extruder_colour": [ + "#018001" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "500", + "200" + ], + "machine_max_speed_y": [ + "500", + "200" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "70", + "extruder_clearance_height_to_lid": "200", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "1.4" + ], + "retract_length_toolchange": [ + "2" + ], + "z_hop": [ + "1" + ], + "retraction_speed": [ + "35" + ], + "deretraction_speed": [ + "35" + ], + "nozzle_type": "hardened_steel", + "support_chamber_temp_control": "1", + "change_filament_gcode": "G91\nG1 Z{layer_z+z_hop[0]} F1000\nG90", + "machine_start_gcode": "START_PRINT TOOL_NR=[initial_tool] T_BED=[bed_temperature_initial_layer] T_EXTRUDER=[first_layer_temperature[initial_tool]] T_CHAMBER=[chamber_temperature] {if is_extruder_used[0]}T0_TEMP={first_layer_temperature[0]}{endif} {if is_extruder_used[1]}T1_TEMP={first_layer_temperature[1]}{endif}", + "machine_end_gcode": "END_PRINT T_BED=[bed_temperature] T_CHAMBER=[chamber_temperature] COOLDOWN_TIME=120", + "machine_pause_gcode": "PAUSE" +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.6 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.6 nozzle.json new file mode 100644 index 0000000000..0555f57c66 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.6 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "machine", + "name": "Z-Bolt S800 Dual 0.6 nozzle", + "inherits": "Z-Bolt S800 Dual 0.4 nozzle", + "from": "system", + "setting_id": "GM028", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "nozzle_diameter": [ + "0.6", "0.6" + ], + "printer_model": "Z-Bolt S800 Dual", + "printer_variant": "0.6", + "default_print_profile": "0.30mm Standard @Z-Bolt S800 0.6 nozzle", + "max_layer_height": [ + "0.36" + ], + "min_layer_height": [ + "0.12" + ], + "retraction_length": [ + "2" + ], + "retraction_minimum_travel": [ + "2" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.8 nozzle.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.8 nozzle.json new file mode 100644 index 0000000000..698344e655 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Z-Bolt S800 Dual 0.8 nozzle", + "inherits": "Z-Bolt S800 Dual 0.4 nozzle", + "from": "system", + "setting_id": "GM029", + "printer_settings_id": "Z-Bolt", + "instantiation": "true", + "nozzle_diameter": [ + "0.8", "0.8" + ], + "printer_model": "Z-Bolt S800 Dual", + "printer_variant": "0.8", + "default_print_profile": "0.40mm Standard @Z-Bolt S800 0.8 nozzle", + "max_layer_height": [ + "0.48" + ], + "min_layer_height": [ + "0.16" + ], + "retraction_length": [ + "3" + ], + "retract_length_toolchange": [ + "3" + ], + "retraction_minimum_travel": [ + "3" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual.json b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual.json new file mode 100644 index 0000000000..8fc949b2c4 --- /dev/null +++ b/resources/profiles/Z-Bolt/machine/Z-Bolt S800 Dual.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Z-Bolt S800 Dual", + "model_id": "Z-Bolt-S800 Dual", + "nozzle_diameter": "0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Z-Bolt", + "bed_model": "Z-Bolt_S800_buildplate_model.stl", + "bed_texture": "Z-Bolt_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Z-Bolt PLA @base;Z-Bolt ABS @base;Z-Bolt PETG @base;Z-Bolt PA @base;Z-Bolt ABS HT @base" +} diff --git a/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt S800.json new file mode 100644 index 0000000000..297dcb4c4b --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt S800.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.12mm Fine @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.12", + "from": "system", + "setting_id": "GP305", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S600.json index fe726981ed..084b900bb4 100644 --- a/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S600.json @@ -19,6 +19,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S800.json new file mode 100644 index 0000000000..22e7afccae --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt S800.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.12mm High Quality @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.12", + "from": "system", + "setting_id": "GP306", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time.", + "default_acceleration": "4000", + "gap_infill_speed": "230", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "180", + "outer_wall_acceleration": "2000", + "outer_wall_speed": "60", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "180", + "top_surface_speed": "150", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S600.json index ef3eeda725..5e1f7a0601 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S600.json @@ -19,6 +19,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S800.json new file mode 100644 index 0000000000..d48a4ac1a4 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt S800.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.16mm High Quality @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.16", + "from": "system", + "setting_id": "GP308", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time.", + "default_acceleration": "4000", + "gap_infill_speed": "250", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "200", + "outer_wall_acceleration": "2000", + "outer_wall_speed": "60", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "200", + "top_surface_speed": "150", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S600.json index 60e0820f62..a14ba86338 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S600.json @@ -10,6 +10,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S800.json new file mode 100644 index 0000000000..a9d58e80c6 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt S800.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.16mm Optimal @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.16", + "from": "system", + "setting_id": "GP309", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json index 1935f4f748..accd389a2f 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..611f1cc3f3 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.16mm Standard @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.16_nozzle_0.6", + "from": "system", + "setting_id": "GP310", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json index aa8a6d5cf7..92a1b72b0a 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600.json index 2121b5347a..6a70357c15 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600.json @@ -10,6 +10,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..f6072eba78 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.20mm Standard @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.20_nozzle_0.6", + "from": "system", + "setting_id": "GP324", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800.json new file mode 100644 index 0000000000..29c3bde0e7 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.20mm Standard @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.20", + "from": "system", + "setting_id": "GP311", + "instantiation": "true", + "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S600.json index 3630c85960..b10f355b20 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S600.json @@ -13,6 +13,8 @@ "wall_loops": "6", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S800.json new file mode 100644 index 0000000000..2f359c6573 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt S800.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "name": "0.20mm Strength @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.20", + "from": "system", + "setting_id": "GP312", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", + "outer_wall_speed": "60", + "sparse_infill_density": "25%", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "wall_loops": "6", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S600.json index 9139f02bc2..332f92b8c8 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S600.json @@ -10,6 +10,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S800.json new file mode 100644 index 0000000000..fa474dbbb2 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt S800.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.24mm Draft @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.24", + "from": "system", + "setting_id": "GP313", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json index 0336d9e0bb..991348252d 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json index c55cfd535c..af465d1790 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..290fdff375 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.24mm Standard @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.24_nozzle_0.6", + "from": "system", + "setting_id": "GP314", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json new file mode 100644 index 0000000000..04824827f2 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.24mm Standard @Z-Bolt S800 0.8 nozzle", + "inherits": "fdm_process_zbolt_0.24_nozzle_0.8", + "from": "system", + "setting_id": "GP315", + "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S600.json b/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S600.json index de382fb81e..4b747e7373 100644 --- a/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S600.json +++ b/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S600.json @@ -10,6 +10,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.4 nozzle", - "Z-Bolt S600 Dual 0.4 nozzle" + "Z-Bolt S600 Dual 0.4 nozzle", + "Z-Bolt S1000 0.4 nozzle", + "Z-Bolt S1000 Dual 0.4 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S800.json b/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S800.json new file mode 100644 index 0000000000..f7c61ea471 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt S800.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.28mm Extra Draft @Z-Bolt S800", + "inherits": "fdm_process_zbolt_0.28", + "from": "system", + "setting_id": "GP316", + "instantiation": "true", + "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json index 6a0aa6016f..3159413920 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..a23e55fa37 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.30mm Standard @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.30_nozzle_0.6", + "from": "system", + "setting_id": "GP317", + "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json index b8b42d15a5..a2c7371445 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json @@ -13,6 +13,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..5605e91e2b --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "name": "0.30mm Strength @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.30_nozzle_0.6", + "from": "system", + "setting_id": "GP318", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", + "elefant_foot_compensation": "0.15", + "sparse_infill_density": "25%", + "wall_loops": "4", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json index 9a1cd1a4fa..da7ddaba4d 100644 --- a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json new file mode 100644 index 0000000000..3cc5f2c9a3 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.32mm Standard @Z-Bolt S800 0.8 nozzle", + "inherits": "fdm_process_zbolt_0.32_nozzle_0.8", + "from": "system", + "setting_id": "GP319", + "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json index c46aec7012..8720141e02 100644 --- a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..e56c4df58e --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.36mm Standard @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.36_nozzle_0.6", + "from": "system", + "setting_id": "GP320", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json index b04d5b3cbe..d6b667142c 100644 --- a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json new file mode 100644 index 0000000000..72a9736a60 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.40mm Standard @Z-Bolt S800 0.8 nozzle", + "inherits": "fdm_process_zbolt_0.40_nozzle_0.8", + "from": "system", + "setting_id": "GP321", + "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json index 115ffd713e..c984fa971b 100644 --- a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", - "Z-Bolt S600 Dual 0.6 nozzle" + "Z-Bolt S600 Dual 0.6 nozzle", + "Z-Bolt S1000 0.6 nozzle", + "Z-Bolt S1000 Dual 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json new file mode 100644 index 0000000000..c799d0ad60 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.42mm Standard @Z-Bolt S800 0.6 nozzle", + "inherits": "fdm_process_zbolt_0.42_nozzle_0.6", + "from": "system", + "setting_id": "GP322", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json index 0ed57658c4..60072b510f 100644 --- a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -11,6 +11,8 @@ "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", - "Z-Bolt S600 Dual 0.8 nozzle" + "Z-Bolt S600 Dual 0.8 nozzle", + "Z-Bolt S1000 0.8 nozzle", + "Z-Bolt S1000 Dual 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json new file mode 100644 index 0000000000..ca6f5998a5 --- /dev/null +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.48mm Standard @Z-Bolt S800 0.8 nozzle", + "inherits": "fdm_process_zbolt_0.48_nozzle_0.8", + "from": "system", + "setting_id": "GP323", + "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Z-Bolt S800 Dual 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py index 893ebeb9c2..ff856a0ee3 100644 --- a/scripts/orca_extra_profile_check.py +++ b/scripts/orca_extra_profile_check.py @@ -3,6 +3,37 @@ import json import argparse from pathlib import Path +OBSOLETE_KEYS = { + "acceleration", "scale", "rotate", "duplicate", "duplicate_grid", + "bed_size", "print_center", "g0", "wipe_tower_per_color_wipe", + "support_sharp_tails", "support_remove_small_overhangs", "support_with_sheath", + "tree_support_collision_resolution", "tree_support_with_infill", + "max_volumetric_speed", "max_print_speed", "support_closing_radius", + "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", + "support_transition_line_width", "support_transition_speed", "bed_temperature", + "bed_temperature_initial_layer", "can_switch_nozzle_type", "can_add_auxiliary_fan", + "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", + "z_hop_type", "z_lift_type", "bed_temperature_difference", "long_retraction_when_cut", + "retraction_distance_when_cut", "extruder_type", "internal_bridge_support_thickness", + "extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill", + "filament_load_time", "filament_unload_time", "smooth_coefficient", + "overhang_totally_speed", "silent_mode", "overhang_speed_classic" +} + +# Utility functions for printing messages in different colors. +def print_error(msg): + print(f"\033[91m[ERROR]\033[0m {msg}") # Red + +def print_warning(msg): + print(f"\033[93m[WARNING]\033[0m {msg}") # Yellow + +def print_info(msg): + print(f"\033[94m[INFO]\033[0m {msg}") # Blue + +def print_success(msg): + print(f"\033[92m[SUCCESS]\033[0m {msg}") # Green + + # Add helper function for duplicate key detection. def no_duplicates_object_pairs_hook(pairs): seen = {} @@ -37,17 +68,17 @@ def check_filament_compatible_printers(vendor_folder): # Use custom hook to detect duplicates. data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) except ValueError as ve: - print(f"Duplicate key error in {file_path}: {ve}") + print_error(f"Duplicate key error in {file_path}: {ve}") error += 1 continue except Exception as e: - print(f"Error processing {file_path}: {e}") + print_error(f"Error processing {file_path}: {e}") error += 1 continue profile_name = data['name'] if profile_name in profiles: - print(f"Duplicated profile {profile_name}: {file_path}") + print_error(f"Duplicated profile {profile_name}: {file_path}") error += 1 continue @@ -76,10 +107,10 @@ def check_filament_compatible_printers(vendor_folder): try: compatible_printers = get_inherit_property(profile, "compatible_printers") if not compatible_printers or (isinstance(compatible_printers, list) and not compatible_printers): - print(f"'compatible_printers' missing in {profile['file_path']}") + print_error(f"'compatible_printers' missing in {profile['file_path']}") error += 1 except ValueError as ve: - print(f"Unable to parse {profile['file_path']}: {ve}") + print_error(f"Unable to parse {profile['file_path']}: {ve}") error += 1 continue @@ -109,7 +140,7 @@ def load_available_filament_profiles(profiles_dir, vendor_name): if "name" in data: profiles.add(data["name"]) except Exception as e: - print(f"Error loading filament profile {file_path}: {e}") + print_error(f"Error loading filament profile {file_path}: {e}") return profiles @@ -124,13 +155,14 @@ def check_machine_default_materials(profiles_dir, vendor_name): Returns: int: Number of missing filament references found + int: the number of warnings found (0 or 1) """ error_count = 0 machine_dir = profiles_dir / vendor_name / "machine" if not machine_dir.exists(): - print(f"No machine profiles found for vendor: {vendor_name}") - return 0 + print_warning(f"No machine profiles found for vendor: {vendor_name}") + return 0, 1 # Load available filament profiles vendor_filaments = load_available_filament_profiles(profiles_dir, vendor_name) @@ -153,7 +185,7 @@ def check_machine_default_materials(profiles_dir, vendor_name): if isinstance(default_materials, list): for material in default_materials: if material not in all_available_filaments: - print(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") + print_error(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") error_count += 1 else: # Handle semicolon-separated list of materials in a string @@ -161,43 +193,51 @@ def check_machine_default_materials(profiles_dir, vendor_name): for material in default_materials.split(";"): material = material.strip() if material and material not in all_available_filaments: - print(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") + print_error(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") error_count += 1 else: # Single material in a string if default_materials not in all_available_filaments: - print(f"Missing filament profile: '{default_materials}' referenced in {file_path.relative_to(profiles_dir)}") + print_error(f"Missing filament profile: '{default_materials}' referenced in {file_path.relative_to(profiles_dir)}") error_count += 1 except Exception as e: - print(f"Error processing machine profile {file_path}: {e}") + print_error(f"Error processing machine profile {file_path}: {e}") error_count += 1 - return error_count + return error_count, 0 def check_filament_name_consistency(profiles_dir, vendor_name): """ Make sure filament profile names match in both vendor json and subpath files. Filament profiles work only if the name in .json matches the name in sub_path file, or if it's one of the sub_path file's `renamed_from`. + + Parameters: + profiles_dir (Path): Base profiles directory + vendor_name (str): Vendor name + + Returns: + int: Number of errors found + int: Number of warnings found (0 or 1) """ error_count = 0 vendor_dir = profiles_dir / vendor_name vendor_file = profiles_dir / (vendor_name + ".json") if not vendor_file.exists(): - print(f"No profiles found for vendor: {vendor_name} at {vendor_file}") - return 0 + print_warning(f"No profiles found for vendor: {vendor_name} at {vendor_file}") + return 0, 1 try: with open(vendor_file, 'r', encoding='UTF-8') as fp: data = json.load(fp) except Exception as e: - print(f"Error loading vendor profile {vendor_file}: {e}") - return 1 + print_error(f"Error loading vendor profile {vendor_file}: {e}") + return 1, 0 if 'filament_list' not in data: - return 0 + return 0, 0 for child in data['filament_list']: name_in_vendor = child['name'] @@ -205,7 +245,7 @@ def check_filament_name_consistency(profiles_dir, vendor_name): sub_file = vendor_dir / sub_path if not sub_file.exists(): - print(f"Missing sub profile: '{sub_path}' declared in {vendor_file.relative_to(profiles_dir)}") + print_error(f"Missing sub profile: '{sub_path}' declared in {vendor_file.relative_to(profiles_dir)}") error_count += 1 continue @@ -213,7 +253,7 @@ def check_filament_name_consistency(profiles_dir, vendor_name): with open(sub_file, 'r', encoding='UTF-8') as fp: sub_data = json.load(fp) except Exception as e: - print(f"Error loading profile {sub_file}: {e}") + print_error(f"Error loading profile {sub_file}: {e}") error_count += 1 continue @@ -227,10 +267,10 @@ def check_filament_name_consistency(profiles_dir, vendor_name): if name_in_vendor in renamed_from: continue - print(f"Filament name mismatch: required '{name_in_vendor}' in {vendor_file.relative_to(profiles_dir)} but found '{name_in_sub}' in {sub_file.relative_to(profiles_dir)}, and none of its `renamed_from` matches the required name either") + print_error(f"Filament name mismatch: required '{name_in_vendor}' in {vendor_file.relative_to(profiles_dir)} but found '{name_in_sub}' in {sub_file.relative_to(profiles_dir)}, and none of its `renamed_from` matches the required name either") error_count += 1 - return error_count + return error_count, 0 def check_filament_id(vendor, vendor_folder): """ @@ -251,11 +291,11 @@ def check_filament_id(vendor, vendor_folder): # Use custom hook to detect duplicates. data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) except ValueError as ve: - print(f"Duplicate key error in {file_path}: {ve}") + print_error(f"Duplicate key error in {file_path}: {ve}") error += 1 continue except Exception as e: - print(f"Error processing {file_path}: {e}") + print_error(f"Error processing {file_path}: {e}") error += 1 continue @@ -266,52 +306,107 @@ def check_filament_id(vendor, vendor_folder): if len(filament_id) > 8: error += 1 - print(f"Filament id too long \"{filament_id}\": {file_path}") + print_error(f"Filament id too long \"{filament_id}\": {file_path}") return error +def check_obsolete_keys(profiles_dir, vendor_name): + """ + Check for obsolete keys in all filament profiles for a vendor. + + Parameters: + profiles_dir (Path): Base profiles directory + vendor_name (str): Vendor name + obsolete_keys (set): Set of obsolete key names to check + + Returns: + int: Number of obsolete keys found + """ + error_count = 0 + vendor_path = profiles_dir / vendor_name / "filament" + + if not vendor_path.exists(): + return 0 + + for file_path in vendor_path.rglob("*.json"): + try: + with open(file_path, "r", encoding="UTF-8") as fp: + data = json.load(fp) + except Exception as e: + print_warning(f"Error reading profile {file_path.relative_to(profiles_dir)}: {e}") + error_count += 1 + continue + + for key in data.keys(): + if key in OBSOLETE_KEYS: + print_warning(f"Obsolete key: '{key}' found in {file_path.relative_to(profiles_dir)}") + error_count += 1 + + return error_count + def main(): - print("Checking profiles ...") - parser = argparse.ArgumentParser(description="Check profiles for issues") - parser.add_argument("--vendor", type=str, required=False, help="Vendor name") - parser.add_argument("--check-filaments", default=True, action="store_true", help="Check compatible_printers in filament profiles") + parser = argparse.ArgumentParser( + description="Check 3D printer profiles for common issues", + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("--vendor", type=str, help="Specify a single vendor to check") + parser.add_argument("--check-filaments", action="store_true", help="Check 'compatible_printers' in filament profiles") parser.add_argument("--check-materials", action="store_true", help="Check default materials in machine profiles") + parser.add_argument("--check-obsolete-keys", action="store_true", help="Warn if obsolete keys are found in filament profiles") args = parser.parse_args() - + + print_info("Checking profiles ...") + script_dir = Path(__file__).resolve().parent profiles_dir = script_dir.parent / "resources" / "profiles" checked_vendor_count = 0 errors_found = 0 - - if args.vendor: + warnings_found = 0 + + def run_checks(vendor_name): + nonlocal errors_found, warnings_found, checked_vendor_count + vendor_path = profiles_dir / vendor_name + if args.check_filaments or not (args.check_materials and not args.check_filaments): - errors_found += check_filament_compatible_printers(profiles_dir / args.vendor / "filament") + errors_found += check_filament_compatible_printers(vendor_path / "filament") + if args.check_materials: - errors_found += check_machine_default_materials(profiles_dir, args.vendor) - errors_found += check_filament_name_consistency(profiles_dir, args.vendor) - errors_found += check_filament_id(args.vendor, profiles_dir / args.vendor / "filament") + new_errors, new_warnings = check_machine_default_materials(profiles_dir, vendor_name) + errors_found += new_errors + warnings_found += new_warnings + + if args.check_obsolete_keys: + warnings_found += check_obsolete_keys(profiles_dir, vendor_name) + + new_errors, new_warnings = check_filament_name_consistency(profiles_dir, vendor_name) + errors_found += new_errors + warnings_found += new_warnings + + errors_found += check_filament_id(vendor_name, vendor_path / "filament") checked_vendor_count += 1 + + if args.vendor: + run_checks(args.vendor) else: for vendor_dir in profiles_dir.iterdir(): - if not vendor_dir.is_dir(): + if not vendor_dir.is_dir() or vendor_dir.name == "OrcaFilamentLibrary": continue - errors_found += check_filament_name_consistency(profiles_dir, vendor_dir.name) - errors_found += check_filament_id(vendor_dir.name, vendor_dir / "filament") - # skip "OrcaFilamentLibrary" folder - if vendor_dir.name == "OrcaFilamentLibrary": - continue - if args.check_filaments or not (args.check_materials and not args.check_filaments): - errors_found += check_filament_compatible_printers(vendor_dir / "filament") - if args.check_materials: - errors_found += check_machine_default_materials(profiles_dir, vendor_dir.name) - checked_vendor_count += 1 + run_checks(vendor_dir.name) + # ✨ Output finale in stile "compilatore" + print("\n==================== SUMMARY ====================") + print_info(f"Checked vendors : {checked_vendor_count}") if errors_found > 0: - print(f"Errors found in {errors_found} profile files") - exit(-1) + print_error(f"Files with errors : {errors_found}") else: - print(f"Checked {checked_vendor_count} vendor files") - exit(0) + print_success("Files with errors : 0") + if warnings_found > 0: + print_warning(f"Files with warnings : {warnings_found}") + else: + print_success("Files with warnings : 0") + print("=================================================") + + exit(-1 if errors_found > 0 else 0) if __name__ == "__main__": diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index b267459bc6..1b782a6ee6 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -59,8 +59,6 @@ set(lisbslic3r_sources Color.hpp Config.cpp Config.hpp - CurveAnalyzer.cpp - CurveAnalyzer.hpp EdgeGrid.cpp EdgeGrid.hpp ElephantFootCompensation.cpp diff --git a/src/libslic3r/CurveAnalyzer.cpp b/src/libslic3r/CurveAnalyzer.cpp deleted file mode 100644 index 330a2b711f..0000000000 --- a/src/libslic3r/CurveAnalyzer.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "CurveAnalyzer.hpp" - -#include -#include - -static const int curvatures_sampling_number = 6; -static const double curvatures_densify_width = 1; // mm -static const double curvatures_sampling_width = 6; // mm -static const double curvatures_angle_best = PI/6; -static const double curvatures_angle_worst = 5*PI/6; - -static const double curvatures_best = (curvatures_angle_best * 1000 / curvatures_sampling_width); -static const double curvatures_worst = (curvatures_angle_worst * 1000 / curvatures_sampling_width); - -namespace Slic3r { - -// This function is used to calculate curvature for paths. -// Paths must be generated from a closed polygon. -// Data in paths may be modify, and paths will be spilited and regenerated -// arrording to different curve degree. -void CurveAnalyzer::calculate_curvatures(ExtrusionPaths& paths, ECurveAnalyseMode mode) -{ - Polygon polygon; - std::vector paths_length(paths.size(), 0.0); - for (size_t i = 0; i < paths.size(); i++) { - if (i == 0) { - paths_length[i] = paths[i].polyline.length(); - } - else { - paths_length[i] = paths_length[i - 1] + paths[i].polyline.length(); - } - polygon.points.insert(polygon.points.end(), paths[i].polyline.points.begin(), paths[i].polyline.points.end() - 1); - } - // 1 generate point series which is on the line of polygon, point distance along the polygon is smaller than 1mm - polygon.densify(scale_(curvatures_densify_width)); - std::vector polygon_length = polygon.parameter_by_length(); - - // 2 calculate angle of every segment - size_t point_num = polygon.points.size(); - std::vector angles(point_num, 0.f); - for (size_t i = 0; i < point_num; i++) { - size_t curr = i; - size_t prev = (curr == 0) ? point_num - 1 : curr - 1; - size_t next = (curr == point_num - 1) ? 0 : curr + 1; - const Point v1 = polygon.points[curr] - polygon.points[prev]; - const Point v2 = polygon.points[next] - polygon.points[curr]; - int64_t dot = int64_t(v1(0)) * int64_t(v2(0)) + int64_t(v1(1)) * int64_t(v2(1)); - int64_t cross = int64_t(v1(0)) * int64_t(v2(1)) - int64_t(v1(1)) * int64_t(v2(0)); - if (mode == ECurveAnalyseMode::RelativeMode) - cross = abs(cross); - angles[curr] = float(atan2(double(cross), double(dot))); - } - - // 3 generate sum of angle and length of the adjacent segment for eveny point, range is approximately curvatures_sampling_width. - // And then calculate the curvature - std::vector sum_angles(point_num, 0.f); - std::vector average_curvatures(point_num, 0.f); - if (paths_length.back() < scale_(curvatures_sampling_width)) { - // loop is too short, so the curvatures is max - double temp = 1000.0 * 2.0 * PI / ((double)(paths_length.back()) * SCALING_FACTOR); - for (size_t i = 0; i < point_num; i++) { - average_curvatures[i] = temp; - } - } - else { - for (size_t i = 0; i < point_num; i++) { - // right segment - size_t j = i; - float right_length = 0; - while (right_length < scale_(curvatures_sampling_width / 2)) { - int next_j = (j + 1 >= point_num) ? 0 : j + 1; - sum_angles[i] += angles[j]; - right_length += (polygon.points[next_j] - polygon.points[j]).cast().norm(); - j = next_j; - } - // left segment - size_t k = i; - float left_length = 0; - while (left_length < scale_(curvatures_sampling_width / 2)) { - size_t next_k = (k < 1) ? point_num - 1 : k - 1; - sum_angles[i] += angles[k]; - left_length += (polygon.points[k] - polygon.points[next_k]).cast().norm(); - k = next_k; - } - sum_angles[i] = sum_angles[i] - angles[i]; - average_curvatures[i] = (1000.0 * (double)abs(sum_angles[i]) / (double)curvatures_sampling_width); - } - } - - // 4 calculate the degree of curve - // For angle >= curvatures_angle_worst, we think it's enough to be worst. Should make the speed to be slowest. - // For angle <= curvatures_angle_best, we thins it's enough to be best. Should make the speed to be fastest. - // Use several steps [0 1 2...curvatures_sampling_number - 1] to describe the degree of curve. 0 is the flatest. curvatures_sampling_number - 1 is the sharpest - std::vector curvatures_norm(point_num, 0.f); - std::vector sampling_step(curvatures_sampling_number - 1, 0); - for (size_t i = 0; i < curvatures_sampling_number - 1; i++) { - sampling_step[i] = (2 * i + 1) * 50 / (curvatures_sampling_number - 1); - } - sampling_step[0] = 0; - sampling_step[curvatures_sampling_number - 2] = 100; - for (size_t i = 0; i < point_num; i++) { - curvatures_norm[i] = (int)(100 * (average_curvatures[i] - curvatures_best) / (curvatures_worst - curvatures_best)); - if (curvatures_norm[i] >= 100) - curvatures_norm[i] = curvatures_sampling_number - 1; - else - for (size_t j = 0; j < curvatures_sampling_number - 1; j++) { - if (curvatures_norm[i] < sampling_step[j]) { - curvatures_norm[i] = j; - break; - } - } - } - std::vector, int>> curvature_list; // point, index, curve_degree - int last_curvature_norm = -1; - for (int i = 0; i < point_num; i++) { - if (curvatures_norm[i] != last_curvature_norm) { - last_curvature_norm = curvatures_norm[i]; - curvature_list.push_back(std::pair, int>(std::pair(polygon.points[i], i), last_curvature_norm)); - } - } - curvature_list.push_back(std::pair, int>(std::pair(polygon.points[0], point_num), curvatures_norm[0])); // the last point should be the first point - - //5 split and modify the path according to the degree of curve - if (curvature_list.size() == 2) { // all paths has same curva_degree - for (size_t i = 0; i < paths.size(); i++) { - paths[i].set_curve_degree(curvature_list[0].second); - } - } - else { - ExtrusionPaths out; - out.reserve(paths.size() + curvature_list.size() - 1); - size_t j = 1; - int current_curva_norm = curvature_list[0].second; - for (size_t i = 0; i < paths.size() && j < curvature_list.size(); i++) { - if (paths[i].last_point() == curvature_list[j].first.first) { - paths[i].set_curve_degree(current_curva_norm); - out.push_back(paths[i]); - current_curva_norm = curvature_list[j].second; - j++; - continue; - } - else if (paths[i].first_point() == curvature_list[j].first.first) { - if (paths[i].polyline.points.front() == paths[i].polyline.points.back()) { - paths[i].set_curve_degree(current_curva_norm); - out.push_back(paths[i]); - current_curva_norm = curvature_list[j].second; - j++; - continue; - } - else { - // should never happen - assert(0); - } - } - - if (paths_length[i] <= polygon_length[curvature_list[j].first.second] || - paths[i].last_point() == curvature_list[j].first.first) { - // save paths[i] directly - paths[i].set_curve_degree(current_curva_norm); - out.push_back(paths[i]); - if (paths[i].last_point() == curvature_list[j].first.first) { - current_curva_norm = curvature_list[j].second; - j++; - } - } - else { - //split paths[i] - ExtrusionPath current_path = paths[i]; - while (j < curvature_list.size()) { - Polyline left, right; - current_path.polyline.split_at(curvature_list[j].first.first, &left, &right); - ExtrusionPath left_path(left, current_path); - left_path.set_curve_degree(current_curva_norm); - out.push_back(left_path); - ExtrusionPath right_path(right, current_path); - current_path = right_path; - - current_curva_norm = curvature_list[j].second; - j++; - if (j < curvature_list.size() && - (paths_length[i] <= polygon_length[curvature_list[j].first.second] || - paths[i].last_point() == curvature_list[j].first.first)) { - current_path.set_curve_degree(current_curva_norm); - out.push_back(current_path); - if (current_path.last_point() == curvature_list[j].first.first) { - current_curva_norm = curvature_list[j].second; - j++; - } - break; - } - } - } - } - - paths.clear(); - paths.reserve(out.size()); - for (int i = 0; i < out.size(); i++) { - paths.push_back(out[i]); - } - } -} - -} \ No newline at end of file diff --git a/src/libslic3r/CurveAnalyzer.hpp b/src/libslic3r/CurveAnalyzer.hpp deleted file mode 100644 index b0cb117a26..0000000000 --- a/src/libslic3r/CurveAnalyzer.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef slic3r_CurvaAnalyzer_hpp_ -#define slic3r_CurvaAnalyzer_hpp_ - -#include "ExtrusionEntityCollection.hpp" - -namespace Slic3r { - -enum class ECurveAnalyseMode : unsigned char -{ - RelativeMode, - AbsoluteMode, - Count -}; - -//BBS: CurvaAnalyzer, ansolutely new file -class CurveAnalyzer { -public: - // This function is used to calculate curvature for paths. - // Paths must be generated from a closed polygon. - // Data in paths may be modify, and paths will be spilited and regenerated - // arrording to different curve degree. - void calculate_curvatures(ExtrusionPaths& paths, ECurveAnalyseMode mode = ECurveAnalyseMode::RelativeMode); -}; - -} - -#endif diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index 942a5d07b0..61d2cb9086 100644 --- a/src/libslic3r/ExtrusionEntity.cpp +++ b/src/libslic3r/ExtrusionEntity.cpp @@ -264,8 +264,8 @@ void ExtrusionLoop::split_at(const Point &point, bool prefer_non_overhang, const // now split path_idx in two parts const ExtrusionPath &path = this->paths[path_idx]; - ExtrusionPath p1(path.overhang_degree, path.curve_degree, path.role(), path.mm3_per_mm, path.width, path.height); - ExtrusionPath p2(path.overhang_degree, path.curve_degree, path.role(), path.mm3_per_mm, path.width, path.height); + ExtrusionPath p1(path.role(), path.mm3_per_mm, path.width, path.height); + ExtrusionPath p2(path.role(), path.mm3_per_mm, path.width, path.height); path.polyline.split_at(p, &p1.polyline, &p2.polyline); if (this->paths.size() == 1) { diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 4394d00264..edd7839cc1 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -151,8 +151,6 @@ class ExtrusionPath : public ExtrusionEntity { public: Polyline polyline; - double overhang_degree = 0; - int curve_degree = 0; // Volumetric velocity. mm^3 of plastic per mm of linear head motion. Used by the G-code generator. double mm3_per_mm; // Width of the extrusion, used for visualization purposes. @@ -163,12 +161,9 @@ public: ExtrusionPath() : mm3_per_mm(-1), width(-1), height(-1), m_role(erNone), m_no_extrusion(false) {} ExtrusionPath(ExtrusionRole role) : mm3_per_mm(-1), width(-1), height(-1), m_role(role), m_no_extrusion(false) {} ExtrusionPath(ExtrusionRole role, double mm3_per_mm, float width, float height, bool no_extrusion = false) : mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role), m_no_extrusion(no_extrusion) {} - ExtrusionPath(double overhang_degree, int curve_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) : overhang_degree(overhang_degree), curve_degree(curve_degree), mm3_per_mm(mm3_per_mm), width(width), height(height), m_role(role) {} ExtrusionPath(const ExtrusionPath &rhs) : polyline(rhs.polyline) - , overhang_degree(rhs.overhang_degree) - , curve_degree(rhs.curve_degree) , mm3_per_mm(rhs.mm3_per_mm) , width(rhs.width) , height(rhs.height) @@ -178,8 +173,6 @@ public: {} ExtrusionPath(ExtrusionPath &&rhs) : polyline(std::move(rhs.polyline)) - , overhang_degree(rhs.overhang_degree) - , curve_degree(rhs.curve_degree) , mm3_per_mm(rhs.mm3_per_mm) , width(rhs.width) , height(rhs.height) @@ -189,8 +182,6 @@ public: {} ExtrusionPath(const Polyline &polyline, const ExtrusionPath &rhs) : polyline(polyline) - , overhang_degree(rhs.overhang_degree) - , curve_degree(rhs.curve_degree) , mm3_per_mm(rhs.mm3_per_mm) , width(rhs.width) , height(rhs.height) @@ -200,8 +191,6 @@ public: {} ExtrusionPath(Polyline &&polyline, const ExtrusionPath &rhs) : polyline(std::move(polyline)) - , overhang_degree(rhs.overhang_degree) - , curve_degree(rhs.curve_degree) , mm3_per_mm(rhs.mm3_per_mm) , width(rhs.width) , height(rhs.height) @@ -217,8 +206,6 @@ public: this->mm3_per_mm = rhs.mm3_per_mm; this->width = rhs.width; this->height = rhs.height; - this->overhang_degree = rhs.overhang_degree; - this->curve_degree = rhs.curve_degree; this->polyline = rhs.polyline; return *this; } @@ -229,8 +216,6 @@ public: this->mm3_per_mm = rhs.mm3_per_mm; this->width = rhs.width; this->height = rhs.height; - this->overhang_degree = rhs.overhang_degree; - this->curve_degree = rhs.curve_degree; this->polyline = std::move(rhs.polyline); return *this; } @@ -272,22 +257,6 @@ public: void collect_points(Points &dst) const override { append(dst, this->polyline.points); } double total_volume() const override { return mm3_per_mm * unscale(length()); } - void set_overhang_degree(int overhang) { - if (is_perimeter(m_role) || is_bridge(m_role)) - overhang_degree = (overhang < 0)?0:(overhang > 10 ? 10 : overhang); - }; - int get_overhang_degree() const { - // only perimeter has overhang degree. Other return 0; - if (is_perimeter(m_role)) - return (int)overhang_degree; - return 0; - }; - void set_curve_degree(int curve) { - curve_degree = (curve < 0)?0:(curve > 10 ? 10 : curve); - }; - int get_curve_degree() const { - return curve_degree; - }; //BBS: add new simplifing method by fitting arc void simplify_by_fitting_arc(double tolerance); //BBS: @@ -525,17 +494,7 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, Ex dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) if (polyline.is_valid()) { - dst.push_back(ExtrusionPath(role, mm3_per_mm, width, height)); - dst.back().polyline = polyline; - } -} - -inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &polylines, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) -{ - dst.reserve(dst.size() + polylines.size()); - for (Polyline &polyline : polylines) - if (polyline.is_valid()) { - dst.push_back(ExtrusionPath(overhang_degree, curva_degree, role, mm3_per_mm, width, height)); + dst.emplace_back(role, mm3_per_mm, width, height); dst.back().polyline = polyline; } } @@ -545,31 +504,19 @@ inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, E dst.reserve(dst.size() + polylines.size()); for (Polyline &polyline : polylines) if (polyline.is_valid()) { - dst.push_back(ExtrusionPath(role, mm3_per_mm, width, height)); + dst.emplace_back(role, mm3_per_mm, width, height); dst.back().polyline = std::move(polyline); } polylines.clear(); } -inline void extrusion_paths_append(ExtrusionPaths &dst, Polylines &&polylines, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) -{ - dst.reserve(dst.size() + polylines.size()); - for (Polyline &polyline : polylines) - if (polyline.is_valid()) { - dst.push_back(ExtrusionPath(overhang_degree, curva_degree, role, mm3_per_mm, width, height)); - dst.back().polyline = std::move(polyline); - } - polylines.clear(); -} - -inline void extrusion_paths_append(ExtrusionPaths &dst, Polyline &&polyline, double overhang_degree, int curva_degree, ExtrusionRole role, double mm3_per_mm, float width, float height) +inline void extrusion_paths_append(ExtrusionPaths &dst, Polyline &&polyline, ExtrusionRole role, double mm3_per_mm, float width, float height) { dst.reserve(dst.size() + 1); if (polyline.is_valid()) { - dst.push_back(ExtrusionPath(overhang_degree, curva_degree, role, mm3_per_mm, width, height)); + dst.emplace_back(role, mm3_per_mm, width, height); dst.back().polyline = std::move(polyline); } - polyline.clear(); } inline void extrusion_entities_append_paths(ExtrusionEntitiesPtr &dst, Polylines &polylines, ExtrusionRole role, double mm3_per_mm, float width, float height, bool can_reverse = true) @@ -609,7 +556,7 @@ inline void extrusion_entities_append_paths_with_wipe(ExtrusionEntitiesPtr &dst, if (last_end_point_valid) { Point temp = polyline.first_point() - last_end_point; if (Vec2d(temp.x(), temp.y()).norm() <= 3 * scaled(width)) { - multi_path->paths.push_back(ExtrusionPath(role, mm3_per_mm, width, height, true)); + multi_path->paths.emplace_back(role, mm3_per_mm, width, height, true); multi_path->paths.back().polyline = std::move(Polyline(last_end_point, polyline.first_point())); } else { dst.push_back(multi_path); @@ -617,7 +564,7 @@ inline void extrusion_entities_append_paths_with_wipe(ExtrusionEntitiesPtr &dst, } } - multi_path->paths.push_back(ExtrusionPath(role, mm3_per_mm, width, height)); + multi_path->paths.emplace_back(role, mm3_per_mm, width, height); multi_path->paths.back().polyline = std::move(polyline); last_end_point_valid = true; last_end_point = multi_path->paths.back().polyline.last_point(); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index d4a69116bd..cbe275d387 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3904,7 +3904,7 @@ LayerResult GCode::process_layer( if (layer_to_print.object_layer) { const auto& regions = layer_to_print.object_layer->regions(); const bool enable_overhang_speed = std::any_of(regions.begin(), regions.end(), [](const LayerRegion* r) { - return r->has_extrusions() && r->region().config().enable_overhang_speed && !r->region().config().overhang_speed_classic; + return r->has_extrusions() && r->region().config().enable_overhang_speed; }); if (enable_overhang_speed) { m_extrusion_quality_estimator.prepare_for_new_layer(layer_to_print.original_object, @@ -4325,10 +4325,16 @@ LayerResult GCode::process_layer( ExtrusionRole support_extrusion_role = instance_to_print.object_by_extruder.support_extrusion_role; bool is_overridden = support_extrusion_role == erSupportMaterialInterface ? support_intf_overridden : support_overridden; - if (is_overridden == (print_wipe_extrusions != 0)) + if (is_overridden == (print_wipe_extrusions != 0)) { gcode += this->extrude_support( // support_extrusion_role is erSupportMaterial, erSupportTransition, erSupportMaterialInterface or erMixed for all extrusion paths. - instance_to_print.object_by_extruder.support->chained_path_from(m_last_pos, support_extrusion_role)); + *instance_to_print.object_by_extruder.support, support_extrusion_role); + + // Make sure ironing is the last + if (support_extrusion_role == erMixed || support_extrusion_role == erSupportMaterialInterface) { + gcode += this->extrude_support(*instance_to_print.object_by_extruder.support, erIroning); + } + } m_layer = layer_to_print.layer(); m_object_layer_over_raft = object_layer_over_raft; @@ -4781,7 +4787,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou const auto speed_for_path = [&speed, &small_peri_speed](const ExtrusionPath& path) { // don't apply small perimeter setting for overhangs/bridges/non-perimeters - const bool is_small_peri = is_perimeter(path.role()) && !is_bridge(path.role()) && small_peri_speed > 0 && (path.get_overhang_degree() == 0 || path.get_overhang_degree() > 5); + const bool is_small_peri = is_perimeter(path.role()) && !is_bridge(path.role()) && small_peri_speed > 0; return is_small_peri ? small_peri_speed : speed; }; @@ -5036,21 +5042,37 @@ std::string GCode::extrude_infill(const Print &print, const std::vectorrole(); + if ((role == support_extrusion_role) || (support_extrusion_role == erMixed && role != erIroning)) { + extrusions.emplace_back(ee); + } + } + if (extrusions.empty()) + return gcode; + + chain_and_reorder_extrusion_entities(extrusions, &m_last_pos); + const double support_speed = m_config.support_speed.value; const double support_interface_speed = m_config.get_abs_value("support_interface_speed"); - for (const ExtrusionEntity *ee : support_fills.entities) { + for (const ExtrusionEntity *ee : extrusions) { ExtrusionRole role = ee->role(); - assert(role == erSupportMaterial || role == erSupportMaterialInterface || role == erSupportTransition); + assert(role == erSupportMaterial || role == erSupportMaterialInterface || role == erSupportTransition || role == erIroning); const char* label = (role == erSupportMaterial) ? support_label : - ((role == erSupportMaterialInterface) ? support_interface_label : support_transition_label); + ((role == erSupportMaterialInterface) ? support_interface_label : + ((role == erIroning) ? support_ironing_label : support_transition_label)); // BBS //const double speed = (role == erSupportMaterial) ? support_speed : support_interface_speed; const double speed = -1.0; @@ -5067,7 +5089,7 @@ std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fill gcode += this->extrude_loop(*loop, label, speed); } else if (collection) { - gcode += extrude_support(*collection); + gcode += extrude_support(*collection, support_extrusion_role); } else { throw Slic3r::InvalidArgument("Unknown extrusion type"); @@ -5144,39 +5166,6 @@ void GCode::GCodeOutputStream::write_format(const char* format, ...) va_end(args); } -static std::map overhang_speed_key_map = -{ - {1, "overhang_1_4_speed"}, - {2, "overhang_2_4_speed"}, - {3, "overhang_3_4_speed"}, - {4, "overhang_4_4_speed"}, - {5, "bridge_speed"}, -}; - -double GCode::get_overhang_degree_corr_speed(float normal_speed, double path_degree) { - - //BBS: protection: overhang degree is float, make sure it not excess degree range - if (path_degree <= 0) - return normal_speed; - - if (path_degree >= 5 ) - return m_config.get_abs_value(overhang_speed_key_map[5].c_str()); - - int lower_degree_bound = int(path_degree); - if (path_degree==lower_degree_bound) - return m_config.get_abs_value(overhang_speed_key_map[lower_degree_bound].c_str()); - int upper_degree_bound = lower_degree_bound + 1; - - double lower_speed_bound = lower_degree_bound == 0 ? normal_speed : m_config.get_abs_value(overhang_speed_key_map[lower_degree_bound].c_str()); - double upper_speed_bound = upper_degree_bound == 0 ? normal_speed : m_config.get_abs_value(overhang_speed_key_map[upper_degree_bound].c_str()); - - lower_speed_bound = lower_speed_bound == 0 ? normal_speed : lower_speed_bound; - upper_speed_bound = upper_speed_bound == 0 ? normal_speed : upper_speed_bound; - - double speed_out = lower_speed_bound + (upper_speed_bound - lower_speed_bound) * (path_degree - lower_degree_bound); - return speed_out; -} - bool GCode::_needSAFC(const ExtrusionPath &path) { if (!m_small_area_infill_flow_compensator || !m_config.small_area_infill_flow_compensation.value) @@ -5316,22 +5305,11 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, if (speed == -1) { if (path.role() == erPerimeter) { speed = m_config.get_abs_value("inner_wall_speed"); - if (m_config.overhang_speed_classic.value && m_config.enable_overhang_speed.value) { - double new_speed = 0; - new_speed = get_overhang_degree_corr_speed(speed, path.overhang_degree); - speed = new_speed == 0.0 ? speed : new_speed; - } - if (sloped) { speed = std::min(speed, m_config.scarf_joint_speed.get_abs_value(m_config.get_abs_value("inner_wall_speed"))); } } else if (path.role() == erExternalPerimeter) { speed = m_config.get_abs_value("outer_wall_speed"); - if (m_config.overhang_speed_classic.value && m_config.enable_overhang_speed.value ) { - double new_speed = 0; - new_speed = get_overhang_degree_corr_speed(speed, path.overhang_degree); - speed = new_speed == 0.0 ? speed : new_speed; - } if (sloped) { speed = std::min(speed, m_config.scarf_joint_speed.get_abs_value(m_config.get_abs_value("outer_wall_speed"))); } @@ -5439,7 +5417,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, bool variable_speed = false; std::vector new_points {}; - if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic && !this->on_first_layer() && + if (m_config.enable_overhang_speed && !this->on_first_layer() && (is_bridge(path.role()) || is_perimeter(path.role()))) { bool is_external = is_external_perimeter(path.role()); double ref_speed = is_external ? m_config.get_abs_value("outer_wall_speed") : m_config.get_abs_value("inner_wall_speed"); @@ -5724,11 +5702,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, if (enable_overhang_bridge_fan) { // BBS: Overhang_threshold_none means Overhang_threshold_1_4 and forcing cooling for all external // perimeter - int overhang_threshold = overhang_fan_threshold == Overhang_threshold_none ? Overhang_threshold_none - : overhang_fan_threshold - 1; if ((overhang_fan_threshold == Overhang_threshold_none && is_external_perimeter(path.role())) || - (path.get_overhang_degree() > overhang_threshold || - (path.role() == erBridgeInfill || path.role() == erOverhangPerimeter))) { // ORCA: Add support for separate internal bridge fan speed control + (path.role() == erBridgeInfill || path.role() == erOverhangPerimeter)) { // ORCA: Add support for separate internal bridge fan speed control if (!m_is_overhang_fan_on) { gcode += ";_OVERHANG_FAN_START\n"; m_is_overhang_fan_on = true; diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 46f6cbde88..d02b751d0d 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -449,7 +449,7 @@ private: std::string extrude_perimeters(const Print& print, const std::vector& by_region, bool is_first_layer, bool is_infill_first); std::string extrude_infill(const Print& print, const std::vector& by_region, bool ironing); - std::string extrude_support(const ExtrusionEntityCollection& support_fills); + std::string extrude_support(const ExtrusionEntityCollection& support_fills, const ExtrusionRole support_extrusion_role); // BBS LiftType to_lift_type(ZHopType z_hop_types); @@ -606,7 +606,6 @@ private: std::string _extrude(const ExtrusionPath &path, std::string description = "", double speed = -1); bool _needSAFC(const ExtrusionPath &path); - double get_overhang_degree_corr_speed(float speed, double path_degree); void print_machine_envelope(GCodeOutputStream &file, Print &print); void _print_first_layer_bed_temperature(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); void _print_first_layer_extruder_temperatures(GCodeOutputStream &file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait); diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 43e1a91d7c..07d1409481 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -7,7 +7,6 @@ #include "PrintConfig.hpp" #include "ShortestPath.hpp" #include "VariableWidth.hpp" -#include "CurveAnalyzer.hpp" #include "Arachne/WallToolPaths.hpp" #include "Geometry/ConvexHull.hpp" #include "ExPolygonCollection.hpp" @@ -24,8 +23,6 @@ #include "libnoise/noise.h" static const int overhang_sampling_number = 6; static const double narrow_loop_length_threshold = 10; -static const double min_degree_gap = 0.1; -static const int max_overhang_degree = overhang_sampling_number - 1; //BBS: when the width of expolygon is smaller than //ext_perimeter_width + ext_perimeter_spacing * (1 - SMALLER_EXT_INSET_OVERLAP_TOLERANCE), //we think it's small detail area and will generate smaller line width for it @@ -194,273 +191,6 @@ static void fuzzy_extrusion_line(std::vector& ext_li using PerimeterGeneratorLoops = std::vector; -static void lowpass_filter_by_paths_overhang_degree(ExtrusionPaths& paths) { - const double filter_range = scale_(6.5); - const double threshold_length = scale_(1.2); - - //0.save old overhang series first which is input of filter - const int path_num = paths.size(); - if (path_num < 2) - //don't need to do filting if only has one path in vector - return; - std::vector old_overhang_series; - old_overhang_series.reserve(path_num); - for (int i = 0; i < path_num; i++) - old_overhang_series.push_back(paths[i].get_overhang_degree()); - - //1.lowpass filter - for (int i = 0; i < path_num; i++) { - double current_length = paths[i].length(); - int current_overhang_degree = old_overhang_series[i]; - if (current_length < threshold_length && - (paths[i].role() == erPerimeter || paths[i].role() == erExternalPerimeter)) { - double left_total_length = (filter_range - current_length) / 2; - double right_total_length = left_total_length; - - double temp_length; - int j = i - 1; - int index; - std::vector> neighbor_path; - while (left_total_length > 0) { - index = (j < 0) ? path_num - 1 : j; - if (paths[index].role() == erOverhangPerimeter) - break; - temp_length = paths[index].length(); - if (temp_length > left_total_length) - neighbor_path.emplace_back(std::pair(left_total_length, old_overhang_series[index])); - else - neighbor_path.emplace_back(std::pair(temp_length, old_overhang_series[index])); - left_total_length -= temp_length; - j = index; - j--; - } - - j = i + 1; - while (right_total_length > 0) { - index = j % path_num; - if (paths[index].role() == erOverhangPerimeter) - break; - temp_length = paths[index].length(); - if (temp_length > right_total_length) - neighbor_path.emplace_back(std::pair(right_total_length, old_overhang_series[index])); - else - neighbor_path.emplace_back(std::pair(temp_length, old_overhang_series[index])); - right_total_length -= temp_length; - j++; - } - - double sum = 0; - double length_sum = 0; - for (auto it = neighbor_path.begin(); it != neighbor_path.end(); it++) { - sum += (it->first * it->second); - length_sum += it->first; - } - - double average_overhang = (double)(current_length * current_overhang_degree + sum) / (length_sum + current_length); - paths[i].set_overhang_degree((int)average_overhang); - } - } - - //2.merge path if have same overhang degree. from back to front to avoid data copy - int last_overhang = paths[0].get_overhang_degree(); - auto it = paths.begin() + 1; - while (it != paths.end()) - { - if (last_overhang == it->get_overhang_degree()) { - //BBS: don't need to append duplicated points, remove the last point - if ((it-1)->polyline.last_point() == it->polyline.first_point()) - (it-1)->polyline.points.pop_back(); - (it-1)->polyline.append(std::move(it->polyline)); - it = paths.erase(it); - } else { - last_overhang = it->get_overhang_degree(); - it++; - } - } -} - -struct PolylineWithDegree -{ - PolylineWithDegree(Polyline polyline, double overhang_degree) : polyline(polyline), overhang_degree(overhang_degree){}; - Polyline polyline; - double overhang_degree = 0; -}; - -static std::deque split_polyline_by_degree(const Polyline &polyline_with_insert_points, const std::deque &points_overhang) -{ - std::deque out; - Polyline left; - Polyline right; - Polyline temp_copy = polyline_with_insert_points; - - size_t poly_size = polyline_with_insert_points.size(); - // BBS: merge degree in limited range - //find first degee base - double degree_base = int(points_overhang[points_overhang.size() - 1] / min_degree_gap) * min_degree_gap + min_degree_gap; - degree_base = degree_base > max_overhang_degree ? max_overhang_degree : degree_base; - double short_poly_len = 0; - for (int point_idx = points_overhang.size() - 2; point_idx > 0; --point_idx) { - - double degree = points_overhang[point_idx]; - - if ( degree <= degree_base && degree >= degree_base - min_degree_gap ) - continue; - - temp_copy.split_at_index(point_idx, &left, &right); - - temp_copy = std::move(left); - out.push_back(PolylineWithDegree(right, degree_base)); - - degree_base = int(degree / min_degree_gap) * min_degree_gap + min_degree_gap; - degree_base = degree_base > max_overhang_degree ? max_overhang_degree : degree_base; - } - - if (!temp_copy.empty()) { - out.push_back(PolylineWithDegree(temp_copy, degree_base)); - } - - return out; - -} -static void insert_point_to_line( double left_point_degree, - Point left_point, - double right_point_degree, - Point right_point, - std::deque &points_overhang, - Polyline& polyline, - double mini_length) -{ - Line line_temp(left_point, right_point); - double line_length = line_temp.length(); - if (std::abs(left_point_degree - right_point_degree) <= 0.5 * min_degree_gap || line_length left_points_overhang; - std::deque right_points_overhang; - - double middle_degree = (left_point_degree + right_point_degree) / 2; - Polyline left_polyline; - Polyline right_polyline; - - insert_point_to_line(left_point_degree, left_point, middle_degree, middle_pt, left_points_overhang, left_polyline, mini_length); - insert_point_to_line(middle_degree, middle_pt, right_point_degree, right_point, right_points_overhang, right_polyline, mini_length); - - if (!left_polyline.empty()) { - polyline.points.insert(polyline.points.end(), std::make_move_iterator(left_polyline.points.begin()), std::make_move_iterator(left_polyline.points.end())); - points_overhang.insert(points_overhang.end(), std::make_move_iterator(left_points_overhang.begin()), std::make_move_iterator(left_points_overhang.end())); - } - - polyline.append(middle_pt); - points_overhang.emplace_back(middle_degree); - - if (!right_polyline.empty()) { - polyline.points.insert(polyline.points.end(), std::make_move_iterator(right_polyline.points.begin()), std::make_move_iterator(right_polyline.points.end())); - points_overhang.insert(points_overhang.end(), std::make_move_iterator(right_points_overhang.begin()), std::make_move_iterator(right_points_overhang.end())); - } -} - -class OverhangDistancer -{ - std::vector lines; - AABBTreeIndirect::Tree<2, double> tree; - -public: - OverhangDistancer(const Polygons layer_polygons) - { - for (const Polygon &island : layer_polygons) { - for (const auto &line : island.lines()) { - lines.emplace_back(line.a.cast(), line.b.cast()); - } - } - tree = AABBTreeLines::build_aabb_tree_over_indexed_lines(lines); - } - - float distance_from_perimeter(const Vec2f &point) const - { - Vec2d p = point.cast(); - size_t hit_idx_out{}; - Vec2d hit_point_out = Vec2d::Zero(); - auto distance = AABBTreeLines::squared_distance_to_indexed_lines(lines, tree, p, hit_idx_out, hit_point_out); - if (distance < 0) { return std::numeric_limits::max(); } - - distance = sqrt(distance); - return distance; - } -}; - -static std::deque detect_overahng_degree(Polygons lower_polygons, - Polylines middle_overhang_polyines, - const double &lower_bound, - const double &upper_bound, - Polylines &too_short_polylines) -{ - // BBS: collect lower_polygons points - //Polylines; - Points lower_polygon_points; - std::vector polygons_bound; - - std::unique_ptr prev_layer_distancer; - prev_layer_distancer = std::make_unique(lower_polygons); - std::deque out; - std::deque points_overhang; - //BBS: get overhang degree and split path - for (size_t polyline_idx = 0; polyline_idx < middle_overhang_polyines.size(); ++polyline_idx) { - //filter too short polyline - Polyline middle_poly = middle_overhang_polyines[polyline_idx]; - if (middle_poly.length() < scale_(1.0)) { - too_short_polylines.push_back(middle_poly); - continue; - } - - Polyline polyline_with_insert_points; - points_overhang.clear(); - double last_degree = 0; - // BBS : calculate overhang dist - for (size_t point_idx = 0; point_idx < middle_poly.points.size(); ++point_idx) { - Point pt = middle_poly.points[point_idx]; - - float overhang_dist = prev_layer_distancer->distance_from_perimeter(pt.cast()); - overhang_dist = overhang_dist > upper_bound ? upper_bound : overhang_dist; - // BBS : calculate overhang degree - int max_overhang = max_overhang_degree; - int min_overhang = 0; - double t = (overhang_dist - lower_bound) / (upper_bound - lower_bound); - t = t > 1.0 ? 1: t; - t = t < EPSILON ? 0 : t; - double this_degree = (1.0 - t) * min_overhang + t * max_overhang; - // BBS: intert points - if (point_idx > 0) { - insert_point_to_line(last_degree, middle_poly.points[point_idx - 1], this_degree, pt, points_overhang, polyline_with_insert_points, - upper_bound - lower_bound); - } - points_overhang.push_back(this_degree); - - polyline_with_insert_points.append(pt); - last_degree = this_degree; - - } - - // BBS : split path by degree - std::deque polyline_with_merged_degree = split_polyline_by_degree(polyline_with_insert_points, points_overhang); - out.insert(out.end(), std::make_move_iterator(polyline_with_merged_degree.begin()), std::make_move_iterator(polyline_with_merged_degree.end())); - } - - return out; -} - -std::pair PerimeterGenerator::dist_boundary(double width) -{ - std::pair out; - float nozzle_diameter = print_config->nozzle_diameter.get_at(config->wall_filament - 1); - float start_offset = -0.5 * width; - float end_offset = 0.5 * nozzle_diameter; - double degree_0 = scale_(start_offset + 0.5 * (end_offset - start_offset) / (overhang_sampling_number - 1)); - out.first = 0; - out.second = scale_(end_offset) - degree_0; - return out; -} - template static bool detect_steep_overhang(const PrintRegionConfig *config, bool is_contour, @@ -552,27 +282,23 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime // BBS: get lower polygons series, width, mm3_per_mm const std::vector *lower_polygons_series; - const std::pair *overhang_dist_boundary; double extrusion_mm3_per_mm; double extrusion_width; if (is_external) { if (is_small_width) { //BBS: smaller width external perimeter lower_polygons_series = &perimeter_generator.m_smaller_external_lower_polygons_series; - overhang_dist_boundary = &perimeter_generator.m_smaller_external_overhang_dist_boundary; extrusion_mm3_per_mm = perimeter_generator.smaller_width_ext_mm3_per_mm(); extrusion_width = perimeter_generator.smaller_ext_perimeter_flow.width(); } else { //BBS: normal external perimeter lower_polygons_series = &perimeter_generator.m_external_lower_polygons_series; - overhang_dist_boundary = &perimeter_generator.m_external_overhang_dist_boundary; extrusion_mm3_per_mm = perimeter_generator.ext_mm3_per_mm(); extrusion_width = perimeter_generator.ext_perimeter_flow.width(); } } else { //BBS: normal perimeter lower_polygons_series = &perimeter_generator.m_lower_polygons_series; - overhang_dist_boundary = &perimeter_generator.m_lower_overhang_dist_boundary; extrusion_mm3_per_mm = perimeter_generator.mm3_per_mm(); extrusion_width = perimeter_generator.perimeter_flow.width(); } @@ -704,70 +430,20 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime remain_polines = diff_pl({polygon}, lower_polygons_series_clipped); - bool detect_overhang_degree = perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && !perimeter_generator.has_fuzzy_skin; - - if (!detect_overhang_degree) { - if (!inside_polines.empty()) - extrusion_paths_append( - paths, - std::move(inside_polines), - 0, - int(0), - role, - extrusion_mm3_per_mm, - extrusion_width, - (float)perimeter_generator.layer_height); - } else { - Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_polygons_series->front(), bbox); - - Polylines middle_overhang_polyines = diff_pl({inside_polines}, lower_polygons_series_clipped); - //BBS: add zero_degree_path - Polylines zero_degree_polines = intersection_pl({inside_polines}, lower_polygons_series_clipped); - if (!zero_degree_polines.empty()) - extrusion_paths_append( - paths, - std::move(zero_degree_polines), - 0, - int(0), - role, - extrusion_mm3_per_mm, - extrusion_width, - (float)perimeter_generator.layer_height); - //BBS: detect middle line overhang - if (!middle_overhang_polyines.empty()) { - Polylines too_short_polylines; - std::deque polylines_degree_collection = detect_overahng_degree(lower_polygons_series->front(), - middle_overhang_polyines, - overhang_dist_boundary->first, - overhang_dist_boundary->second, - too_short_polylines); - if (!too_short_polylines.empty()) - extrusion_paths_append(paths, - std::move(too_short_polylines), - 0, - int(0), - role, - extrusion_mm3_per_mm, - extrusion_width, - (float) perimeter_generator.layer_height); - // BBS: add path with overhang degree - for (PolylineWithDegree polylines_collection : polylines_degree_collection) { - extrusion_paths_append(paths, - std::move(polylines_collection.polyline), - polylines_collection.overhang_degree, - int(0), - role, - extrusion_mm3_per_mm, - extrusion_width, (float) perimeter_generator.layer_height); - } - } - - } + if (!inside_polines.empty()) + extrusion_paths_append( + paths, + std::move(inside_polines), + role, + extrusion_mm3_per_mm, + extrusion_width, + (float)perimeter_generator.layer_height); + // get 100% overhang paths by checking what parts of this loop fall // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter if (remain_polines.size() != 0) { - extrusion_paths_append(paths, std::move(remain_polines), overhang_sampling_number - 1, int(0), + extrusion_paths_append(paths, std::move(remain_polines), erOverhangPerimeter, perimeter_generator.mm3_per_mm_overhang(), perimeter_generator.overhang_flow.width(), perimeter_generator.overhang_flow.height()); @@ -787,8 +463,6 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime ExtrusionPath path(role); //BBS. path.polyline = polygon.split_at_first_point(); - path.overhang_degree = 0; - path.curve_degree = 0; path.mm3_per_mm = extrusion_mm3_per_mm; path.width = extrusion_width; path.height = (float)perimeter_generator.layer_height; @@ -926,90 +600,6 @@ struct PerimeterGeneratorArachneExtrusion bool is_contour = false; }; - -static void smooth_overhang_level(ExtrusionPaths &paths) -{ - const double threshold_length = scale_(0.8); - const double filter_range = scale_(6.5); - - // 0.save old overhang series first which is input of filter - const int path_num = paths.size(); - if (path_num < 2) - // don't need to do filting if only has one path in vector - return; - std::vector old_overhang_series; - old_overhang_series.reserve(path_num); - for (int i = 0; i < path_num; i++) old_overhang_series.push_back(paths[i].get_overhang_degree()); - - for (int i = 0; i < path_num;) { - if ((paths[i].role() != erPerimeter && paths[i].role() != erExternalPerimeter)) { - i++; - continue; - } - - double current_length = paths[i].length(); - int current_overhang_degree = old_overhang_series[i]; - double total_lens = current_length; - int pt = i + 1; - - for (; pt < path_num; pt++) { - if (paths[pt].get_overhang_degree() != current_overhang_degree || (paths[pt].role() != erPerimeter && paths[pt].role() != erExternalPerimeter)) { - break; - } - total_lens += paths[pt].length(); - } - - if (total_lens < threshold_length) { - double left_total_length = (filter_range - total_lens) / 2; - double right_total_length = left_total_length; - - double temp_length; - int j = i - 1; - int index; - std::vector> neighbor_path; - while (left_total_length > 0) { - index = (j < 0) ? path_num - 1 : j; - if (paths[index].role() == erOverhangPerimeter) break; - temp_length = paths[index].length(); - if (temp_length > left_total_length) - neighbor_path.emplace_back(std::pair(left_total_length, old_overhang_series[index])); - else - neighbor_path.emplace_back(std::pair(temp_length, old_overhang_series[index])); - left_total_length -= temp_length; - j = index; - j--; - } - - j = pt; - while (right_total_length > 0) { - index = j % path_num; - if (paths[index].role() == erOverhangPerimeter) break; - temp_length = paths[index].length(); - if (temp_length > right_total_length) - neighbor_path.emplace_back(std::pair(right_total_length, old_overhang_series[index])); - else - neighbor_path.emplace_back(std::pair(temp_length, old_overhang_series[index])); - right_total_length -= temp_length; - j++; - } - - double sum = 0; - double length_sum = 0; - for (auto it = neighbor_path.begin(); it != neighbor_path.end(); it++) { - sum += (it->first * it->second); - length_sum += it->first; - } - - double average_overhang = (double) (total_lens * current_overhang_degree + sum) / (length_sum + total_lens); - - for (int idx=i; idx& pg_extrusions, bool &steep_overhang_contour, bool &steep_overhang_hole) { @@ -1129,9 +719,8 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p } } - ExtrusionPaths temp_paths; // get non-overhang paths by intersecting this loop with the grown lower slices - extrusion_paths_append(temp_paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role, + extrusion_paths_append(paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); // Always reverse extrusion if use fuzzy skin: https://github.com/SoftFever/OrcaSlicer/pull/2413#issuecomment-1769735357 @@ -1147,7 +736,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p bool found_steep_overhang = (pg_extrusion.is_contour && steep_overhang_contour) || (!pg_extrusion.is_contour && steep_overhang_hole); if (overhangs_reverse && !found_steep_overhang) { std::map recognization_paths; - for (const ExtrusionPath &path : temp_paths) { + for (const ExtrusionPath &path : paths) { if (recognization_paths.count(path.width)) recognization_paths[path.width].emplace_back(std::move(path)); else @@ -1169,56 +758,6 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p } } - if (perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && !perimeter_generator.has_fuzzy_skin) { - - Flow flow = is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow; - std::map> clipper_serise; - - std::map recognization_paths; - for (const ExtrusionPath &path : temp_paths) { - if (recognization_paths.count(path.width)) - recognization_paths[path.width].emplace_back(std::move(path)); - else - recognization_paths.insert(std::pair(path.width, {std::move(path)})); - } - - for (const auto &it : recognization_paths) { - Polylines be_clipped; - - for (const ExtrusionPath &p : it.second) { - be_clipped.emplace_back(std::move(p.polyline)); - } - - BoundingBox extrusion_bboxs = get_extents(be_clipped); - //ExPolygons lower_slcier_chopped = *perimeter_generator.lower_slices; - Polygons lower_slcier_chopped=ClipperUtils::clip_clipper_polygons_with_subject_bbox(*perimeter_generator.lower_slices, extrusion_bboxs, true); - - double start_pos = -it.first * 0.5; - double end_pos = 0.5 * it.first; - - Polylines remain_polylines; - std::vector degree_polygons; - for (int j = 0; j < overhang_sampling_number; j++) { - Polygons limiton_polygons = offset(lower_slcier_chopped, float(scale_(start_pos + (j + 0.5) * (end_pos - start_pos) / (overhang_sampling_number - 1)))); - - Polylines inside_polines = j == 0 ? intersection_pl(be_clipped, limiton_polygons) : intersection_pl(remain_polylines, limiton_polygons); - - remain_polylines = j == 0 ? diff_pl(be_clipped, limiton_polygons) : diff_pl(remain_polylines, limiton_polygons); - - extrusion_paths_append(paths, std::move(inside_polines), j, int(0), role, it.second.front().mm3_per_mm, it.second.front().width, it.second.front().height); - - if (remain_polylines.size() == 0) break; - } - - if (remain_polylines.size() != 0) { - extrusion_paths_append(paths, std::move(remain_polylines), overhang_sampling_number - 1, int(0), erOverhangPerimeter, it.second.front().mm3_per_mm, it.second.front().width, it.second.front().height); - } - } - - } else { - paths = std::move(temp_paths); - - } // get overhang paths by checking what parts of this loop fall // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter @@ -1262,11 +801,6 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p chain_and_reorder_extrusion_paths(paths, &start_point); - if (perimeter_generator.config->enable_overhang_speed && !perimeter_generator.has_fuzzy_skin) { - // BBS: filter the speed - smooth_overhang_level(paths); - } - if (overhangs_reverse) { for (const ExtrusionPath& path : paths) { if (path.role() == erOverhangPerimeter) { @@ -1998,16 +1532,12 @@ void PerimeterGenerator::process_classic() // prepare grown lower layer slices for overhang detection m_lower_polygons_series = generate_lower_polygons_series(this->perimeter_flow.width()); - m_lower_overhang_dist_boundary = dist_boundary(this->perimeter_flow.width()); if (ext_perimeter_width == perimeter_width){ m_external_lower_polygons_series = m_lower_polygons_series; - m_external_overhang_dist_boundary=m_lower_overhang_dist_boundary; } else { m_external_lower_polygons_series = generate_lower_polygons_series(this->ext_perimeter_flow.width()); - m_external_overhang_dist_boundary = dist_boundary(this->ext_perimeter_flow.width()); } m_smaller_external_lower_polygons_series = generate_lower_polygons_series(this->smaller_ext_perimeter_flow.width()); - m_smaller_external_overhang_dist_boundary = dist_boundary(this->smaller_ext_perimeter_flow.width()); // we need to process each island separately because we might have different // extra perimeters for each one Surfaces all_surfaces = this->slices->surfaces; diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp index c9767f421c..0787e952fa 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -87,9 +87,6 @@ public: std::vector m_lower_polygons_series; std::vector m_external_lower_polygons_series; std::vector m_smaller_external_lower_polygons_series; - std::pair m_lower_overhang_dist_boundary; - std::pair m_external_overhang_dist_boundary; - std::pair m_smaller_external_overhang_dist_boundary; bool has_fuzzy_skin = false; bool has_fuzzy_hole = false; @@ -142,7 +139,6 @@ private: void split_top_surfaces(const ExPolygons &orig_polygons, ExPolygons &top_fills, ExPolygons &non_top_polygons, ExPolygons &fill_clip) const; void apply_extra_perimeters(ExPolygons& infill_area); void process_no_bridge(Surfaces& all_surfaces, coord_t perimeter_spacing, coord_t ext_perimeter_width); - std::pair dist_boundary(double width); private: bool m_spiral_vase; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 5586c4fcff..b640815ec7 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -789,6 +789,7 @@ static std::vector s_Preset_print_options { "infill_direction", "solid_infill_direction", "rotate_solid_infill_direction", "counterbore_hole_bridging", "minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target", "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "ironing_inset", + "support_ironing", "support_ironing_pattern", "support_ironing_flow", "support_ironing_spacing", "max_travel_detour_distance", "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type", "fuzzy_skin_scale", "fuzzy_skin_octaves", "fuzzy_skin_persistence", "max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only", @@ -825,7 +826,7 @@ static std::vector s_Preset_print_options { "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk","default_junction_deviation", "top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio", "seam_gap", "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", "wipe_before_external_loop", - "bridge_density","internal_bridge_density", "precise_outer_wall", "overhang_speed_classic", "bridge_acceleration", + "bridge_density","internal_bridge_density", "precise_outer_wall", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim", "tree_support_brim_width", "gcode_comments", "gcode_label_objects", "initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max","initial_layer_min_bead_width", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 3d2b9d52d4..1bb7834927 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -3168,8 +3168,6 @@ const std::string PrintStatistics::TotalFilamentUsedWipeTowerValueMask = "; tota #define JSON_EXTRUSION_TYPE_LOOP "loop" #define JSON_EXTRUSION_TYPE_COLLECTION "collection" #define JSON_EXTRUSION_POLYLINE "polyline" -#define JSON_EXTRUSION_OVERHANG_DEGREE "overhang_degree" -#define JSON_EXTRUSION_CURVE_DEGREE "curve_degree" #define JSON_EXTRUSION_MM3_PER_MM "mm3_per_mm" #define JSON_EXTRUSION_WIDTH "width" #define JSON_EXTRUSION_HEIGHT "height" @@ -3263,8 +3261,6 @@ static void to_json(json& j, const Polyline& poly_line) { static void to_json(json& j, const ExtrusionPath& extrusion_path) { j[JSON_EXTRUSION_POLYLINE] = extrusion_path.polyline; - j[JSON_EXTRUSION_OVERHANG_DEGREE] = extrusion_path.overhang_degree; - j[JSON_EXTRUSION_CURVE_DEGREE] = extrusion_path.curve_degree; j[JSON_EXTRUSION_MM3_PER_MM] = extrusion_path.mm3_per_mm; j[JSON_EXTRUSION_WIDTH] = extrusion_path.width; j[JSON_EXTRUSION_HEIGHT] = extrusion_path.height; @@ -3541,8 +3537,6 @@ static void from_json(const json& j, Polyline& poly_line) { static void from_json(const json& j, ExtrusionPath& extrusion_path) { extrusion_path.polyline = j[JSON_EXTRUSION_POLYLINE]; - extrusion_path.overhang_degree = j[JSON_EXTRUSION_OVERHANG_DEGREE]; - extrusion_path.curve_degree = j[JSON_EXTRUSION_CURVE_DEGREE]; extrusion_path.mm3_per_mm = j[JSON_EXTRUSION_MM3_PER_MM]; extrusion_path.width = j[JSON_EXTRUSION_WIDTH]; extrusion_path.height = j[JSON_EXTRUSION_HEIGHT]; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f134902819..945ee4ab35 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1158,14 +1158,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloatOrPercent(50, true)); - // Orca: deprecated - def = this->add("overhang_speed_classic", coBool); - def->label = L("Classic mode"); - def->category = L("Speed"); - def->tooltip = L("Enable this option to use classic mode."); - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool{ false }); - def = this->add("enable_overhang_speed", coBool); def->label = L("Slow down for overhang"); def->category = L("Speed"); @@ -4897,7 +4889,8 @@ void PrintConfigDef::init_fff_params() def = this->add("support_interface_spacing", coFloat); def->label = L("Top interface spacing"); def->category = L("Support"); - def->tooltip = L("Spacing of interface lines. Zero means solid interface."); + def->tooltip = L("Spacing of interface lines. Zero means solid interface.\n" + "Force using solid interface when support ironing is enabled."); def->sidetext = L("mm"); def->min = 0; def->mode = comAdvanced; @@ -5192,6 +5185,48 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("This setting specifies whether to add infill inside large hollows of tree support."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("support_ironing", coBool); + def->label = L("Ironing Support Interface"); + def->category = L("Support"); + def->tooltip = L("Ironing is using small flow to print on same height of support interface again to make it more smooth. " + "This setting controls whether support interface being ironed. When enabled, support interface will be extruded as solid too."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("support_ironing_pattern", coEnum); + def->label = L("Support Ironing Pattern"); + def->tooltip = L("The pattern that will be used when ironing."); + def->category = L("Support"); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("concentric"); + def->enum_values.push_back("zig-zag"); + def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Rectilinear")); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnum(ipRectilinear)); + + def = this->add("support_ironing_flow", coPercent); + def->label = L("Support Ironing flow"); + def->category = L("Support"); + def->tooltip = L("The amount of material to extrude during ironing. Relative to flow of normal support interface layer height. " + "Too high value results in overextrusion on the surface."); + def->sidetext = "%"; + def->ratio_over = "layer_height"; + def->min = 0; + def->max = 100; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionPercent(10)); + + def = this->add("support_ironing_spacing", coFloat); + def->label = L("Support Ironing line spacing"); + def->category = L("Support"); + def->tooltip = L("The distance between the lines of ironing."); + def->sidetext = L("mm"); + def->min = 0; + def->max = 1; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(0.1)); def = this->add("activate_chamber_temp_control",coBools); def->label = L("Activate temperature control"); @@ -6650,8 +6685,6 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va } else if (opt_key == "draft_shield" && value == "limited") { value = "disabled"; - } else if (opt_key == "overhang_speed_classic") { - value = "0"; } // Ignore the following obsolete configuration keys: @@ -6670,7 +6703,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va "retraction_distance_when_cut", "extruder_type", "internal_bridge_support_thickness","extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill","filament_load_time","filament_unload_time", - "smooth_coefficient", "overhang_totally_speed", "silent_mode" + "smooth_coefficient", "overhang_totally_speed", "silent_mode", + "overhang_speed_classic", }; if (ignore.find(opt_key) != ignore.end()) { diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 226c9f15f8..5efb54d08b 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -862,6 +862,10 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatOrPercent, support_threshold_overlap)) ((ConfigOptionFloat, support_object_xy_distance)) ((ConfigOptionFloat, support_object_first_layer_gap)) + ((ConfigOptionBool, support_ironing)) + ((ConfigOptionEnum, support_ironing_pattern)) + ((ConfigOptionPercent, support_ironing_flow)) + ((ConfigOptionFloat, support_ironing_spacing)) ((ConfigOptionFloat, xy_hole_compensation)) ((ConfigOptionFloat, xy_contour_compensation)) ((ConfigOptionBool, flush_into_objects)) @@ -1025,7 +1029,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, wipe_before_external_loop)) ((ConfigOptionEnum, wall_infill_order)) ((ConfigOptionBool, precise_outer_wall)) - ((ConfigOptionBool, overhang_speed_classic)) ((ConfigOptionPercent, bridge_density)) ((ConfigOptionFloat, filter_out_gap_fill)) ((ConfigOptionFloatOrPercent, small_perimeter_speed)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 41fcc2819e..5db480347e 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1016,6 +1016,10 @@ bool PrintObject::invalidate_state_by_config_options( //|| opt_key == "independent_support_layer_height" // BBS || opt_key == "support_threshold_angle" || opt_key == "support_threshold_overlap" + || opt_key == "support_ironing" + || opt_key == "support_ironing_pattern" + || opt_key == "support_ironing_flow" + || opt_key == "support_ironing_spacing" || opt_key == "raft_expansion" || opt_key == "raft_first_layer_density" || opt_key == "raft_first_layer_expansion" @@ -1129,8 +1133,7 @@ bool PrintObject::invalidate_state_by_config_options( //BBS || opt_key == "enable_overhang_speed" || opt_key == "detect_thin_wall" - || opt_key == "precise_outer_wall" - || opt_key == "overhang_speed_classic") { + || opt_key == "precise_outer_wall") { steps.emplace_back(posPerimeters); steps.emplace_back(posSupportMaterial); } else if (opt_key == "bridge_flow" || opt_key == "internal_bridge_flow") { diff --git a/src/libslic3r/Support/SupportCommon.cpp b/src/libslic3r/Support/SupportCommon.cpp index f4611a175f..0de4067770 100644 --- a/src/libslic3r/Support/SupportCommon.cpp +++ b/src/libslic3r/Support/SupportCommon.cpp @@ -1605,6 +1605,9 @@ void generate_support_toolpaths( SupportGeneratorLayerExtruded base_interface_layer; boost::container::static_vector nonempty; + float ironing_angle; + Polygons polys_to_iron; + void add_nonempty_and_sort() { for (SupportGeneratorLayerExtruded *item : { &bottom_contact_layer, &top_contact_layer, &interface_layer, &base_interface_layer, &base_layer }) if (! item->empty()) @@ -1694,6 +1697,12 @@ void generate_support_toolpaths( base_layer = std::move(top_contact_layer); } } else { + if (support_params.ironing && !top_contact_layer.empty()) { + // Orca: save the top surface to be ironed later + layer_cache.ironing_angle = support_interface_angle; // TODO: should we rotate 90 degrees? + layer_cache.polys_to_iron = top_contact_layer.polygons_to_extrude(); + } + loop_interface_processor.generate(top_contact_layer, support_params.support_material_interface_flow); // If no loops are allowed, we treat the contact layer exactly as a generic interface layer. // Merge interface_layer into top_contact_layer, as the top_contact_layer is not synchronized and therefore it will be used @@ -1886,7 +1895,7 @@ void generate_support_toolpaths( // Now modulate the support layer height in parallel. tbb::parallel_for(tbb::blocked_range(n_raft_layers, support_layers.size()), - [&support_layers, &layer_caches] + [&support_layers, &layer_caches, &support_params, &bbox_object] (const tbb::blocked_range& range) { for (size_t support_layer_id = range.begin(); support_layer_id < range.end(); ++ support_layer_id) { SupportLayer &support_layer = *support_layers[support_layer_id]; @@ -1897,6 +1906,39 @@ void generate_support_toolpaths( modulate_extrusion_by_overlapping_layers(layer_cache_item.layer_extruded->extrusions, *layer_cache_item.layer_extruded->layer, layer_cache_item.overlapping); support_layer.support_fills.append(std::move(layer_cache_item.layer_extruded->extrusions)); } + + // Orca: Generate iron toolpath for contact layer + if (!layer_cache.polys_to_iron.empty()) { + auto f = std::unique_ptr(Fill::new_from_type(support_params.ironing_pattern)); + f->set_bounding_box(bbox_object); + f->layer_id = support_layer.id(); + f->z = support_layer.print_z; + f->overlap = 0; + f->angle = layer_cache.ironing_angle; + f->spacing = support_params.ironing_spacing; + f->link_max_length = (coord_t) scale_(3. * f->spacing); + + ExPolygons polys_to_iron = union_safety_offset_ex(layer_cache.polys_to_iron); + layer_cache.polys_to_iron.clear(); + + // Find the layer above that directly overlaps current layer, clip the overlapped part + if (support_layer_id < support_layers.size() - 1) { + const auto& upper_layer = support_layers[support_layer_id + 1]; + if (!upper_layer->support_islands.empty() && upper_layer->bottom_z() <= support_layer.print_z + EPSILON) { + polys_to_iron = diff_ex(polys_to_iron, upper_layer->support_islands); + } + } + + fill_expolygons_generate_paths( + // Destination + support_layer.support_fills.entities, + // Regions to fill + std::move(polys_to_iron), + // Filler and its parameters + f.get(), 1.f, + // Extrusion parameters + ExtrusionRole::erIroning, support_params.ironing_flow); + } } }); diff --git a/src/libslic3r/Support/SupportParameters.hpp b/src/libslic3r/Support/SupportParameters.hpp index bcc85e2202..655ee0d806 100644 --- a/src/libslic3r/Support/SupportParameters.hpp +++ b/src/libslic3r/Support/SupportParameters.hpp @@ -48,6 +48,11 @@ struct SupportParameters { this->support_material_interface_flow = Slic3r::support_material_interface_flow(&object, float(slicing_params.layer_height)); this->raft_interface_flow = support_material_interface_flow; + this->ironing = object_config.support_ironing; + this->ironing_flow = support_material_interface_flow.with_height(support_material_interface_flow.height() * 0.01 * object_config.support_ironing_flow.value); + this->ironing_spacing = object_config.support_ironing_spacing; + this->ironing_pattern = object_config.support_ironing_pattern; + // Calculate a minimum support layer height as a minimum over all extruders, but not smaller than 10um. this->support_layer_height_min = scaled(0.01); for (auto lh : print_config.min_layer_height.values) @@ -90,9 +95,11 @@ struct SupportParameters { this->base_angle = Geometry::deg2rad(float(object_config.support_angle.value)); this->interface_angle = Geometry::deg2rad(float(object_config.support_angle.value + 90.)); - this->interface_spacing = object_config.support_interface_spacing.value + this->support_material_interface_flow.spacing(); + // Orca: Force solid support interface when using support ironing + this->interface_spacing = (this->ironing ? 0 : object_config.support_interface_spacing.value) + this->support_material_interface_flow.spacing(); this->interface_density = std::min(1., this->support_material_interface_flow.spacing() / this->interface_spacing); - double raft_interface_spacing = object_config.support_interface_spacing.value + this->raft_interface_flow.spacing(); + // Orca: Force solid support interface when using support ironing + double raft_interface_spacing = (this->ironing ? 0 : object_config.support_interface_spacing.value) + this->raft_interface_flow.spacing(); this->raft_interface_density = std::min(1., this->raft_interface_flow.spacing() / raft_interface_spacing); this->support_spacing = object_config.support_base_pattern_spacing.value + this->support_material_flow.spacing(); this->support_density = std::min(1., this->support_material_flow.spacing() / this->support_spacing); @@ -260,6 +267,11 @@ struct SupportParameters { bool independent_layer_height = false; const double thresh_big_overhang = Slic3r::sqr(scale_(10)); + + bool ironing; + Flow ironing_flow; // Flow at the interface ironing. + InfillPattern ironing_pattern; + float ironing_spacing; }; } // namespace Slic3r diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index ed0abec884..c7ac162716 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -50,9 +50,6 @@ CopyrightsDialog::CopyrightsDialog() this->SetFont(wxGetApp().normal_font()); this->SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - wxStaticLine *staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); auto sizer = new wxBoxSizer(wxVERTICAL); @@ -216,9 +213,6 @@ AboutDialog::AboutDialog() SetFont(wxGetApp().normal_font()); SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - wxPanel* m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(125)), wxTAB_TRAVERSAL); wxBoxSizer *panel_versizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index f02543313c..ff5fac1710 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -1291,10 +1291,6 @@ void AmsReplaceMaterialDialog::create() SetMinSize(wxSize(FromDIP(445), -1)); SetMaxSize(wxSize(FromDIP(445), -1)); - // set icon for dialog - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - m_main_sizer = new wxBoxSizer(wxVERTICAL); auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); m_top_line->SetBackgroundColour(wxColour(166, 169, 170)); diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index 9155051c66..f01ee0f84a 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -62,10 +62,6 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/) #endif //__WINDOWS__ wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL); - - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -358,9 +354,6 @@ PingCodeBindDialog::~PingCodeBindDialog() { m_tocken.reset(new int(0)); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -967,8 +960,6 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Log out printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) { m_tocken.reset(new int(0)); -std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index 34ffd6f15b..eae3b2bfbd 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -20,8 +20,6 @@ CalibrationDialog::CalibrationDialog(Plater *plater) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Calibration"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { this->SetDoubleBuffered(true); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 78d8aaeff0..dc73eb9454 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -224,6 +224,17 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con apply(config, &new_conf); is_msg_dlg_already_exist = false; } + if (config->opt_float("support_ironing_spacing") < 0.05) + { + const wxString msg_text = _(L("Too small ironing spacing.\nReset to 0.1")); + MessageDialog dialog(nullptr, msg_text, "", wxICON_WARNING | wxOK); + DynamicPrintConfig new_conf = *config; + is_msg_dlg_already_exist = true; + dialog.ShowModal(); + new_conf.set_key_value("support_ironing_spacing", new ConfigOptionFloat(0.1)); + apply(config, &new_conf); + is_msg_dlg_already_exist = false; + } if (config->option("initial_layer_print_height")->value < EPSILON) { @@ -634,10 +645,18 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line("bridge_no_support", !support_is_normal_tree); toggle_line("support_critical_regions_only", is_auto(support_type) && support_is_tree); - for (auto el : { "support_interface_spacing", "support_interface_filament", + for (auto el : { "support_interface_filament", "support_interface_loop_pattern", "support_bottom_interface_spacing" }) toggle_field(el, have_support_material && have_support_interface); + bool can_ironing_support = have_raft || (have_support_material && config->opt_int("support_interface_top_layers") > 0); + toggle_field("support_ironing", can_ironing_support); + bool has_support_ironing = can_ironing_support && config->opt_bool("support_ironing"); + for (auto el : {"support_ironing_pattern", "support_ironing_flow", "support_ironing_spacing" }) + toggle_line(el, has_support_ironing); + // Orca: Force solid support interface when using support ironing + toggle_field("support_interface_spacing", have_support_material && have_support_interface && !has_support_ironing); + bool have_skirt_height = have_skirt && (config->opt_int("skirt_height") > 1 || config->opt_enum("draft_shield") != dsEnabled); toggle_line("support_speed", have_support_material || have_skirt_height); @@ -656,8 +675,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_field(el, have_support_material && !(support_is_normal_tree && !have_raft)); bool has_ironing = (config->opt_enum("ironing_type") != IroningType::NoIroning); - for (auto el : { "ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_speed", "ironing_angle", "ironing_inset"}) + for (auto el : { "ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_angle", "ironing_inset"}) toggle_line(el, has_ironing); + + toggle_line("ironing_speed", has_ironing || has_support_ironing); bool have_sequential_printing = (config->opt_enum("print_sequence") == PrintSequence::ByObject); // for (auto el : { "extruder_clearance_radius", "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid" }) @@ -713,13 +734,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line("max_travel_detour_distance", have_avoid_crossing_perimeters); bool has_overhang_speed = config->opt_bool("enable_overhang_speed"); - for (auto el : - {"overhang_speed_classic", "overhang_1_4_speed", - "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed"}) + for (auto el : {"overhang_1_4_speed", "overhang_2_4_speed", "overhang_3_4_speed", "overhang_4_4_speed"}) toggle_line(el, has_overhang_speed); - bool has_overhang_speed_classic = config->opt_bool("overhang_speed_classic"); - toggle_line("slowdown_for_curled_perimeters",!has_overhang_speed_classic && has_overhang_speed); + toggle_line("slowdown_for_curled_perimeters", has_overhang_speed); toggle_line("flush_into_objects", !is_global_config); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index ec32e2db27..d2dfcd054e 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -643,9 +643,6 @@ CreateFilamentPresetDialog::CreateFilamentPresetDialog(wxWindow *parent) this->SetBackgroundColour(*wxWHITE); this->SetSize(wxSize(FromDIP(600), FromDIP(480))); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - wxBoxSizer *m_main_sizer = new wxBoxSizer(wxVERTICAL); // top line auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -1542,9 +1539,6 @@ CreatePrinterPresetDialog::CreatePrinterPresetDialog(wxWindow *parent) this->SetBackgroundColour(*wxWHITE); SetSizeHints(wxDefaultSize, wxDefaultSize); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - wxBoxSizer *m_main_sizer = new wxBoxSizer(wxVERTICAL); // top line auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 2), wxTAB_TRAVERSAL); @@ -3224,8 +3218,6 @@ CreatePresetSuccessfulDialog::CreatePresetSuccessfulDialog(wxWindow *parent, con { this->SetBackgroundColour(*wxWHITE); this->SetSize(wxSize(FromDIP(450), FromDIP(200))); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer *m_main_sizer = new wxBoxSizer(wxVERTICAL); // top line @@ -3315,9 +3307,6 @@ ExportConfigsDialog::ExportConfigsDialog(wxWindow *parent) this->SetBackgroundColour(*wxWHITE); this->SetSize(wxSize(FromDIP(600), FromDIP(600))); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - m_main_sizer = new wxBoxSizer(wxVERTICAL); // top line auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -4192,9 +4181,6 @@ EditFilamentPresetDialog::EditFilamentPresetDialog(wxWindow *parent, Filamentinf this->SetBackgroundColour(*wxWHITE); this->SetMinSize(wxSize(FromDIP(600), -1)); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - m_main_sizer = new wxBoxSizer(wxVERTICAL); // top line auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -4616,9 +4602,6 @@ CreatePresetForPrinterDialog::CreatePresetForPrinterDialog(wxWindow *parent, std this->SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL); // top line auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); diff --git a/src/slic3r/GUI/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp index 542db08561..1c4f7a9bfb 100644 --- a/src/slic3r/GUI/DownloadProgressDialog.cpp +++ b/src/slic3r/GUI/DownloadProgressDialog.cpp @@ -39,10 +39,6 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title) wxString download_failed_msg = _L("Failed to download the plug-in. Please check your firewall settings and vpn software, check and retry."); wxString install_failed_msg = _L("Failed to install the plug-in. Please check whether it is blocked or deleted by anti-virus software."); - - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index ad32fc6d6c..237c8c9604 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -110,7 +110,7 @@ std::map> SettingsFactory::PART_CAT {"infill_combination", "",1}, {"infill_combination_max_layer_height", "",1}, {"infill_wall_overlap", "",1},{"top_bottom_infill_wall_overlap", "",1}, {"solid_infill_direction", "",1}, {"rotate_solid_infill_direction", "",1}, {"infill_direction", "",1}, {"bridge_angle", "",1}, {"internal_bridge_angle", "",1}, {"minimum_sparse_infill_area", "",1} }}, { L("Speed"), {{"outer_wall_speed", "",1},{"inner_wall_speed", "",2},{"sparse_infill_speed", "",3},{"top_surface_speed", "",4}, {"internal_solid_infill_speed", "",5}, - {"enable_overhang_speed", "",6}, {"overhang_speed_classic", "",6}, {"overhang_1_4_speed", "",7}, {"overhang_2_4_speed", "",8}, {"overhang_3_4_speed", "",9}, {"overhang_4_4_speed", "",10}, + {"enable_overhang_speed", "",6}, {"overhang_1_4_speed", "",7}, {"overhang_2_4_speed", "",8}, {"overhang_3_4_speed", "",9}, {"overhang_4_4_speed", "",10}, {"bridge_speed", "",11}, {"gap_infill_speed", "",12}, {"internal_bridge_speed", "", 13} }} }; diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index f2f8f4ed6e..35df1f460e 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -3312,10 +3312,6 @@ ObjectTableDialog::ObjectTableDialog(wxWindow* parent, Plater* platerObj, Model //m_panel->SetScrollRate(10, 10); auto m_main_sizer = new wxBoxSizer(wxVERTICAL); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicer.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - //top line auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 2), wxTAB_TRAVERSAL); m_line_top->SetBackgroundColour(wxColour(0xA6, 0xa9, 0xAA)); diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 3d9812bc70..c77458fe13 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -25,9 +25,6 @@ KBShortcutsDialog::KBShortcutsDialog() const wxFont& bold_font = wxGetApp().bold_font(); SetFont(font); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - this->SetSizeHints(wxDefaultSize, wxDefaultSize); this->SetBackgroundColour(wxColour(255, 255, 255)); diff --git a/src/slic3r/GUI/ModelMall.cpp b/src/slic3r/GUI/ModelMall.cpp index f5a6b6d4af..5fbd79a813 100644 --- a/src/slic3r/GUI/ModelMall.cpp +++ b/src/slic3r/GUI/ModelMall.cpp @@ -16,10 +16,6 @@ namespace GUI { ModelMallDialog::ModelMallDialog(Plater* plater /*= nullptr*/) :DPIFrame(nullptr, wxID_ANY, _L("3D Models"), wxDefaultPosition, wxDefaultSize, wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER) { - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetSize(MODEL_MALL_PAGE_SIZE); SetMinSize(wxSize(MODEL_MALL_PAGE_SIZE.x / 4, MODEL_MALL_PAGE_SIZE.y / 4)); diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index 53b3d774ee..56e74a6270 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -486,8 +486,6 @@ DeleteConfirmDialog::DeleteConfirmDialog(wxWindow *parent, const wxString &title { this->SetBackgroundColour(*wxWHITE); this->SetSize(wxSize(FromDIP(450), FromDIP(200))); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer *m_main_sizer = new wxBoxSizer(wxVERTICAL); // top line @@ -547,8 +545,6 @@ Newer3mfVersionDialog::Newer3mfVersionDialog(wxWindow *parent, const Semver *fil , m_new_keys(new_keys) { this->SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL); // top line @@ -664,8 +660,6 @@ NetworkErrorDialog::NetworkErrorDialog(wxWindow* parent) : DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Server Exception"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { this->SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp index 9aed022ba3..61907754a3 100644 --- a/src/slic3r/GUI/MultiMachinePage.cpp +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -307,9 +307,6 @@ MultiMachinePickPage::MultiMachinePickPage(Plater* plater /*= nullptr*/) app_config = get_app_config(); SetBackgroundColour(*wxWHITE); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index 116625e7cc..2099ab49e4 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -146,9 +146,6 @@ ObjColorDialog::ObjColorDialog(wxWindow * parent, , m_filament_ids(filament_ids) , m_first_extruder_id(first_extruder_id) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % Slic3r::resources_dir()).str(); - SetIcon(wxIcon(Slic3r::encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index 8c465dc32c..c5ac8ca687 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -28,8 +28,6 @@ TipsDialog::TipsDialog(wxWindow *parent, const wxString &title, const wxString & m_app_key(app_key) { SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/PlateSettingsDialog.cpp b/src/slic3r/GUI/PlateSettingsDialog.cpp index 80e17f8fa5..cca1272c4c 100644 --- a/src/slic3r/GUI/PlateSettingsDialog.cpp +++ b/src/slic3r/GUI/PlateSettingsDialog.cpp @@ -366,9 +366,6 @@ void OtherLayersSeqPanel::sync_layers_print_seq(int selection, const std::vector PlateSettingsDialog::PlateSettingsDialog(wxWindow* parent, const wxString& title, bool only_layer_seq, const wxPoint& pos, const wxSize& size, long style) :DPIDialog(parent, wxID_ANY, title, pos, size, style) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(650), -1)); @@ -614,9 +611,6 @@ std::vector PlateSettingsDialog::get_first_layer_print_seq() PlateNameEditDialog::PlateNameEditDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos, const wxSize &size, long style) : DPIDialog(parent, id, title, pos, size, style) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), -1)); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index c06e412ef3..18f97d8e9b 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -1070,9 +1070,6 @@ void PreferencesDialog::create() app_config = get_app_config(); m_backup_interval_time = app_config->get("backup_interval"); - // set icon for dialog - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetSizeHints(wxDefaultSize, wxDefaultSize); auto main_sizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 13d085468f..f5fb3bfbe5 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.cpp +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -12,8 +12,6 @@ PrintOptionsDialog::PrintOptionsDialog(wxWindow* parent) : DPIDialog(parent, wxID_ANY, _L("Print Options"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { this->SetDoubleBuffered(true); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index c6066b1002..cd2900ff3d 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -34,9 +34,6 @@ static std::string url_encode(const std::string& value) { PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style) :DPIDialog(parent, id, title, pos, size, style) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(540), 1)); diff --git a/src/slic3r/GUI/PublishDialog.cpp b/src/slic3r/GUI/PublishDialog.cpp index d9a9260dd4..4bb1ed3d82 100644 --- a/src/slic3r/GUI/PublishDialog.cpp +++ b/src/slic3r/GUI/PublishDialog.cpp @@ -30,10 +30,6 @@ PublishDialog::PublishDialog(Plater *plater) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Publish"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_plater(plater) { - - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - this->SetSize(wxSize(FromDIP(540),FromDIP(400))); this->SetSizeHints(wxDefaultSize, wxDefaultSize); diff --git a/src/slic3r/GUI/RecenterDialog.cpp b/src/slic3r/GUI/RecenterDialog.cpp index 6947763890..49f60d3c56 100644 --- a/src/slic3r/GUI/RecenterDialog.cpp +++ b/src/slic3r/GUI/RecenterDialog.cpp @@ -14,9 +14,6 @@ namespace Slic3r { namespace GUI { RecenterDialog::RecenterDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : DPIDialog(parent, id, _L("Confirm"), pos, size, style) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - hint1 = _L("Please home all axes (click "); hint2 = _L(") to locate the toolhead's position. This prevents device moving beyond the printable boundary and causing equipment wear."); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index abade15b26..0d5dcc467d 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -47,9 +47,6 @@ wxDEFINE_EVENT(EVT_UPDATE_TEXT_MSG, wxCommandEvent); ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Release Note"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); @@ -117,9 +114,6 @@ void ReleaseNoteDialog::update_release_note(wxString release_note, std::string v UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Network plug-in update"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); @@ -259,9 +253,6 @@ void UpdatePluginDialog::update_info(std::string json_path) UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) : DPIDialog(parent, wxID_ANY, _L("New version of Orca Slicer"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); @@ -550,8 +541,6 @@ SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, cons :DPIFrame(parent, id, title, pos, size, style) { m_button_style = btn_style; - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); m_sizer_main = new wxBoxSizer(wxVERTICAL); @@ -868,8 +857,6 @@ void SecondaryCheckDialog::rescale() PrintErrorDialog::PrintErrorDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) :DPIFrame(parent, id, title, pos, size, style) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); btn_bg_white = StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), @@ -1186,9 +1173,6 @@ void PrintErrorDialog::rescale() ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style, bool not_show_again_check) :DPIDialog(parent, id, title, pos, size, style) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(400), 1)); @@ -1464,9 +1448,6 @@ InputIpAddressDialog::InputIpAddressDialog(wxWindow *parent) wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); m_result = -1; wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index 1d6c57b1c9..0918226d5b 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -323,10 +323,6 @@ void SavePresetDialog::build(std::vector types, std::string suffix SetBackgroundColour(SAVE_PRESET_DIALOG_DEF_COLOUR); SetFont(wxGetApp().normal_font()); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - if (suffix.empty()) suffix = _CTX_utf8(L_CONTEXT("Copy", "PresetName"), "PresetName"); wxBoxSizer *m_Sizer_main = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index f0627712a2..5a1540280f 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -115,10 +115,6 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) // font SetFont(wxGetApp().normal_font()); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - Freeze(); SetBackgroundColour(m_colour_def_color); diff --git a/src/slic3r/GUI/SelectMachinePop.cpp b/src/slic3r/GUI/SelectMachinePop.cpp index 320df17184..77a982b592 100644 --- a/src/slic3r/GUI/SelectMachinePop.cpp +++ b/src/slic3r/GUI/SelectMachinePop.cpp @@ -853,9 +853,6 @@ void SelectMachinePopup::OnLeftUp(wxMouseEvent &event) EditDevNameDialog::EditDevNameDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Modifying the device name"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index dd31e6ad1a..59e6e0a871 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -263,9 +263,6 @@ SendMultiMachinePage::SendMultiMachinePage(Plater* plater) app_config = get_app_config(); SetBackgroundColour(*wxWHITE); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 180a7e8bee..4f290683ef 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -187,10 +187,6 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater) // font SetFont(wxGetApp().normal_font()); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - Freeze(); SetBackgroundColour(m_colour_def_color); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 395adecd6d..f58cf30882 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -4722,9 +4722,6 @@ void ScoreDialog::init() { SetMinSize(wxSize(FromDIP(540), FromDIP(380))); fail_image = wxImage(Slic3r::resources_dir() + "/images/oss_picture_load_failed.png", wxBITMAP_TYPE_ANY); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicer.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); } wxBoxSizer *ScoreDialog::get_score_sizer() { diff --git a/src/slic3r/GUI/StepMeshDialog.cpp b/src/slic3r/GUI/StepMeshDialog.cpp index fa87c01ed6..685b8e8290 100644 --- a/src/slic3r/GUI/StepMeshDialog.cpp +++ b/src/slic3r/GUI/StepMeshDialog.cpp @@ -82,10 +82,6 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line Bind(wxEVT_THREAD_DONE, &StepMeshDialog::on_task_done, this); - std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") - % Slic3r::resources_dir()).str(); - SetIcon(wxIcon(Slic3r::encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer* bSizer = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 8ee8b60c77..7b645a891f 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2076,13 +2076,13 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Precision"), L"param_precision"); optgroup->append_single_option_line("slice_closing_radius"); optgroup->append_single_option_line("resolution"); - optgroup->append_single_option_line("enable_arc_fitting", "acr-move"); - optgroup->append_single_option_line("xy_hole_compensation", "xy-hole-contour-compensation"); - optgroup->append_single_option_line("xy_contour_compensation", "xy-hole-contour-compensation"); - optgroup->append_single_option_line("elefant_foot_compensation"); - optgroup->append_single_option_line("elefant_foot_compensation_layers"); - optgroup->append_single_option_line("precise_outer_wall", "Precise-wall"); - optgroup->append_single_option_line("precise_z_height", "precise-z-height"); + optgroup->append_single_option_line("enable_arc_fitting", "quality_settings_precision#arc-fitting"); + optgroup->append_single_option_line("xy_hole_compensation", "quality_settings_precision#xy-compensation"); + optgroup->append_single_option_line("xy_contour_compensation", "quality_settings_precision#xy-compensation"); + optgroup->append_single_option_line("elefant_foot_compensation", "quality_settings_precision#elefant-foot-compensation"); + optgroup->append_single_option_line("elefant_foot_compensation_layers", "quality_settings_precision#elefant-foot-compensation"); + optgroup->append_single_option_line("precise_outer_wall", "quality_settings_precision#precise-wall"); + optgroup->append_single_option_line("precise_z_height", "quality_settings_precision#precise-z-height"); optgroup->append_single_option_line("hole_to_polyhole"); optgroup->append_single_option_line("hole_to_polyhole_threshold"); optgroup->append_single_option_line("hole_to_polyhole_twisted"); @@ -2090,14 +2090,13 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Ironing"), L"param_ironing"); optgroup->append_single_option_line("ironing_type", "parameter/ironing"); optgroup->append_single_option_line("ironing_pattern"); - optgroup->append_single_option_line("ironing_speed"); optgroup->append_single_option_line("ironing_flow"); optgroup->append_single_option_line("ironing_spacing"); optgroup->append_single_option_line("ironing_inset"); optgroup->append_single_option_line("ironing_angle"); optgroup = page->new_optgroup(L("Wall generator"), L"param_wall_generator"); - optgroup->append_single_option_line("wall_generator", "wall-generator"); + optgroup->append_single_option_line("wall_generator", "quality_settings_wall-generator"); optgroup->append_single_option_line("wall_transition_angle"); optgroup->append_single_option_line("wall_transition_filter_deviation"); optgroup->append_single_option_line("wall_transition_length"); @@ -2126,7 +2125,7 @@ void TabPrint::build() option.opt.is_code = true; option.opt.height = 15; optgroup->append_single_option_line(option, "small-area-infill-flow-compensation"); - + optgroup = page->new_optgroup(L("Bridging"), L"param_bridge"); optgroup->append_single_option_line("bridge_flow"); optgroup->append_single_option_line("internal_bridge_flow"); @@ -2136,8 +2135,8 @@ void TabPrint::build() optgroup->append_single_option_line("thick_internal_bridges"); optgroup->append_single_option_line("enable_extra_bridge_layer"); optgroup->append_single_option_line("dont_filter_internal_bridges"); - optgroup->append_single_option_line("counterbore_hole_bridging","counterbore-hole-bridging"); - + optgroup->append_single_option_line("counterbore_hole_bridging"); + optgroup = page->new_optgroup(L("Overhangs"), L"param_overhang"); optgroup->append_single_option_line("detect_overhang_wall"); optgroup->append_single_option_line("make_overhang_printable"); @@ -2157,15 +2156,15 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Top/bottom shells"), L"param_shell"); optgroup->append_single_option_line("top_shell_layers"); optgroup->append_single_option_line("top_shell_thickness"); - optgroup->append_single_option_line("top_surface_pattern", "fill-patterns#Infill of the top surface and bottom surface"); + optgroup->append_single_option_line("top_surface_pattern"); optgroup->append_single_option_line("bottom_shell_layers"); optgroup->append_single_option_line("bottom_shell_thickness"); - optgroup->append_single_option_line("bottom_surface_pattern", "fill-patterns#Infill of the top surface and bottom surface"); + optgroup->append_single_option_line("bottom_surface_pattern"); optgroup->append_single_option_line("top_bottom_infill_wall_overlap"); optgroup = page->new_optgroup(L("Infill"), L"param_infill"); - optgroup->append_single_option_line("sparse_infill_density"); - optgroup->append_single_option_line("sparse_infill_pattern", "fill-patterns#infill types and their properties of sparse"); + optgroup->append_single_option_line("sparse_infill_density", "strength_settings_infill#sparse-infill-density"); + optgroup->append_single_option_line("sparse_infill_pattern", "strength_settings_infill#sparse-infill-pattern"); optgroup->append_single_option_line("lattice_angle_1"); optgroup->append_single_option_line("lattice_angle_2"); optgroup->append_single_option_line("infill_overhang_angle"); @@ -2203,13 +2202,12 @@ void TabPrint::build() optgroup->append_single_option_line("internal_solid_infill_speed"); optgroup->append_single_option_line("top_surface_speed"); optgroup->append_single_option_line("gap_infill_speed"); + optgroup->append_single_option_line("ironing_speed"); optgroup->append_single_option_line("support_speed"); optgroup->append_single_option_line("support_interface_speed"); optgroup = page->new_optgroup(L("Overhang speed"), L"param_overhang_speed", 15); optgroup->append_single_option_line("enable_overhang_speed", "slow-down-for-overhang"); - // Orca: DEPRECATED - // optgroup->append_single_option_line("overhang_speed_classic", "slow-down-for-overhang"); optgroup->append_single_option_line("slowdown_for_curled_perimeters"); Line line = { L("Overhang speed"), L("This is the speed for various overhang degrees. Overhang degrees are expressed as a percentage of line width. 0 speed means no slowing down for the overhang degree range and wall speed is used") }; line.label_path = "slow-down-for-overhang"; @@ -2249,11 +2247,11 @@ void TabPrint::build() optgroup->append_single_option_line("initial_layer_jerk"); optgroup->append_single_option_line("travel_jerk"); optgroup->append_single_option_line("default_junction_deviation"); - + optgroup = page->new_optgroup(L("Advanced"), L"param_advanced", 15); - optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope", "extrusion-rate-smoothing"); - optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_segment_length", "extrusion-rate-smoothing"); - optgroup->append_single_option_line("extrusion_rate_smoothing_external_perimeter_only", "extrusion-rate-smoothing"); + optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope", "speed_extrusion_rate_smoothing"); + optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_segment_length", "speed_extrusion_rate_smoothing"); + optgroup->append_single_option_line("extrusion_rate_smoothing_external_perimeter_only", "speed_extrusion_rate_smoothing"); page = add_options_page(L("Support"), "custom-gcode_support"); // ORCA: icon only visible on placeholders optgroup = page->new_optgroup(L("Support"), L"param_support"); @@ -2278,6 +2276,12 @@ void TabPrint::build() optgroup->append_single_option_line("support_interface_filament", "support#support-filament"); optgroup->append_single_option_line("support_interface_not_for_body", "support#support-filament"); + optgroup = page->new_optgroup(L("Support ironing"), L"param_ironing"); + optgroup->append_single_option_line("support_ironing"); + optgroup->append_single_option_line("support_ironing_pattern"); + optgroup->append_single_option_line("support_ironing_flow"); + optgroup->append_single_option_line("support_ironing_spacing"); + //optgroup = page->new_optgroup(L("Options for support material and raft")); // Support diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index a76880a9ac..e3e0665727 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -837,9 +837,6 @@ inline int UnsavedChangesDialog::ShowModal() void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_presets, const std::string &new_selected_preset, const wxString &header) { SetBackgroundColour(*wxWHITE); - // icon - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index 946e3ba3be..5e2abe899d 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -100,9 +100,6 @@ MsgUpdateConfig::MsgUpdateConfig(const std::vector &updates, bool force_ auto title = force_before_wizard ? _L("Configuration update") : _L("Configuration update"); SetTitle(title); - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - SetBackgroundColour(*wxWHITE); wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index b95aa50b5f..fba6547f65 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -45,8 +45,6 @@ ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_AN // Url NetworkAgent* agent = wxGetApp().getAgent(); if (!agent) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); - SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index de93b3c5ac..20532464ee 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -355,9 +355,6 @@ WipingDialog::WipingDialog(wxWindow* parent, const std::vector& matrix, c wxDefaultSize, wxDEFAULT_DIALOG_STYLE /* | wxRESIZE_BORDER*/) { - std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % Slic3r::resources_dir()).str(); - SetIcon(wxIcon(Slic3r::encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170));