Merge branch 'main' into dev/bbl-network-upd
|
@ -30,7 +30,7 @@ function check_available_memory_and_disk() {
|
|||
}
|
||||
|
||||
function usage() {
|
||||
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-h][-i][-j N][-p][-r][-s][-u]"
|
||||
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-h][-i][-j N][-p][-r][-s][-u][-l]"
|
||||
echo " -1: limit builds to one core (where possible)"
|
||||
echo " -j N: limit builds to N cores (where possible)"
|
||||
echo " -b: build in debug mode"
|
||||
|
@ -43,6 +43,7 @@ function usage() {
|
|||
echo " -r: skip RAM and disk checks (low RAM compiling)"
|
||||
echo " -s: build the Orca Slicer (optional)"
|
||||
echo " -u: install system dependencies (asks for sudo password; build prerequisite)"
|
||||
echo " -l: use Clang instead of GCC (default: GCC)"
|
||||
echo "For a first use, you want to './${SCRIPT_NAME} -u'"
|
||||
echo " and then './${SCRIPT_NAME} -dsi'"
|
||||
}
|
||||
|
@ -50,7 +51,7 @@ function usage() {
|
|||
SLIC3R_PRECOMPILED_HEADERS="ON"
|
||||
|
||||
unset name
|
||||
while getopts ":1j:bcCdhiprsu" opt ; do
|
||||
while getopts ":1j:bcCdhiprsul" opt ; do
|
||||
case ${opt} in
|
||||
1 )
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=1
|
||||
|
@ -88,6 +89,9 @@ while getopts ":1j:bcCdhiprsu" opt ; do
|
|||
u )
|
||||
UPDATE_LIB="1"
|
||||
;;
|
||||
l )
|
||||
USE_CLANG="1"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
@ -139,6 +143,11 @@ if ! [[ -n "${SKIP_RAM_CHECK}" ]] ; then
|
|||
check_available_memory_and_disk
|
||||
fi
|
||||
|
||||
export CMAKE_C_CXX_COMPILER_CLANG=""
|
||||
if [[ -n "${USE_CLANG}" ]] ; then
|
||||
export CMAKE_C_CXX_COMPILER_CLANG="-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++"
|
||||
fi
|
||||
|
||||
if [[ -n "${BUILD_DEPS}" ]] ; then
|
||||
echo "Configuring dependencies..."
|
||||
BUILD_ARGS="${DEPS_EXTRA_BUILD_ARGS} -DDEP_WX_GTK3=ON"
|
||||
|
@ -155,13 +164,13 @@ if [[ -n "${BUILD_DEPS}" ]] ; then
|
|||
if [ ! -d "deps/build/release" ] ; then
|
||||
mkdir deps/build/release
|
||||
fi
|
||||
cmake -S deps -B deps/build/release -DSLIC3R_PCH=${SLIC3R_PRECOMPILED_HEADERS} -G Ninja -DDESTDIR="${SCRIPT_PATH}/deps/build/destdir" -DDEP_DOWNLOAD_DIR="${SCRIPT_PATH}/deps/DL_CACHE" ${COLORED_OUTPUT} ${BUILD_ARGS}
|
||||
cmake ${CMAKE_C_CXX_COMPILER_CLANG} -S deps -B deps/build/release -DSLIC3R_PCH=${SLIC3R_PRECOMPILED_HEADERS} -G Ninja -DDESTDIR="${SCRIPT_PATH}/deps/build/destdir" -DDEP_DOWNLOAD_DIR="${SCRIPT_PATH}/deps/DL_CACHE" ${COLORED_OUTPUT} ${BUILD_ARGS}
|
||||
cmake --build deps/build/release
|
||||
BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug"
|
||||
fi
|
||||
|
||||
echo "cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS}"
|
||||
cmake -S deps -B deps/build -G Ninja ${COLORED_OUTPUT} ${BUILD_ARGS}
|
||||
echo "cmake -S deps -B deps/build ${CMAKE_C_CXX_COMPILER_CLANG} -G Ninja ${BUILD_ARGS}"
|
||||
cmake -S deps -B deps/build ${CMAKE_C_CXX_COMPILER_CLANG} -G Ninja ${COLORED_OUTPUT} ${BUILD_ARGS}
|
||||
cmake --build deps/build
|
||||
fi
|
||||
|
||||
|
@ -180,7 +189,7 @@ if [[ -n "${BUILD_ORCA}" ]] ; then
|
|||
BUILD_ARGS="${BUILD_ARGS} -DBBL_RELEASE_TO_PUBLIC=1 -DBBL_INTERNAL_TESTING=0"
|
||||
fi
|
||||
|
||||
CMAKE_CMD="cmake -S . -B build -G Ninja \
|
||||
CMAKE_CMD="cmake -S . -B build ${CMAKE_C_CXX_COMPILER_CLANG} -G Ninja \
|
||||
-DSLIC3R_PCH=${SLIC3R_PRECOMPILED_HEADERS} \
|
||||
-DCMAKE_PREFIX_PATH="${SCRIPT_PATH}/deps/build/destdir/usr/local" \
|
||||
-DSLIC3R_STATIC=1 \
|
||||
|
|
78
doc/Home.md
|
@ -2,32 +2,56 @@
|
|||
|
||||
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)
|
||||
- [Strength Settings](#strength-settings)
|
||||
- [Printer Settings](#printer-settings)
|
||||
- [Material Settings](#material-settings)
|
||||
- [Printer Settings](#printer-settings)
|
||||
- [Printer Calibration](#printer-calibration)
|
||||
- [Prepare](#prepare)
|
||||
- [Process Settings](#process-settings)
|
||||
- [Quality Settings](#quality-settings)
|
||||
- [Strength Settings](#strength-settings)
|
||||
- [Speed Settings](#speed-settings)
|
||||
- [Support Settings](#support-settings)
|
||||
- [Multimaterial Settings](#multimaterial-settings)
|
||||
- [Others Settings](#others-settings)
|
||||
- [Calibrations](#calibrations)
|
||||
- [Developer Section](#developer-section)
|
||||
|
||||
> [!NOTE]
|
||||
> 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.
|
||||
|
||||
## Printer Settings
|
||||
|
||||

|
||||
|
||||
- [Air filtration/Exhaust fan handling](air-filtration)
|
||||
- [Auxiliary fan handling](Auxiliary-fan)
|
||||
- [Chamber temperature control](chamber-temperature)
|
||||
- [Adaptive Bed Mesh](adaptive-bed-mesh)
|
||||
- [Using different bed types in Orca](bed-types)
|
||||
|
||||
## Material Settings
|
||||
|
||||

|
||||
|
||||
- [Single Extruder Multimaterial](semm)
|
||||
- [Pellet Printers (pellet flow coefficient)](pellet-flow-coefficient)
|
||||
|
||||
## Prepare
|
||||
|
||||
First steps to prepare your model/s for printing.
|
||||
|
||||
- [STL Transformation](stl-transformation)
|
||||
|
||||
## Print Settings, Tips and Tricks
|
||||
## Process Settings
|
||||
|
||||

|
||||
|
||||
The below sections provide a detailed settings explanation as well as tips and tricks in setting these for optimal print results.
|
||||
|
||||
### Quality Settings
|
||||
|
||||

|
||||
|
||||
- [Layer Height Settings](quality_settings_layer_height)
|
||||
- [Line Width Settings](quality_settings_line_width)
|
||||
- [Seam Settings](quality_settings_seam)
|
||||
|
@ -44,28 +68,38 @@ The below sections provide a detailed settings explanation as well as tips and t
|
|||
- [Polyholes](quality_settings_precision#polyholes)
|
||||
- [Wall generator](quality_settings_wall_generator)
|
||||
|
||||
### Speed Settings
|
||||
|
||||
- [Extrusion rate smoothing](speed_extrusion_rate_smoothing)
|
||||
|
||||
### Strength Settings
|
||||
|
||||

|
||||
|
||||
- [Top and Bottom Shells](strength_settings_top_bottom_shells)
|
||||
- [Infill](strength_settings_infill)
|
||||
|
||||
## Material Settings
|
||||
### Speed Settings
|
||||
|
||||
- [Single Extruder Multimaterial](semm)
|
||||
- [Pellet Printers (pellet flow coefficient)](pellet-flow-coefficient)
|
||||

|
||||
|
||||
### Printer Settings
|
||||
- [Extrusion rate smoothing](speed_settings_extrusion_rate_smoothing)
|
||||
|
||||
- [Air filtration/Exhaust fan handling](air-filtration)
|
||||
- [Auxiliary fan handling](Auxiliary-fan)
|
||||
- [Chamber temperature control](chamber-temperature)
|
||||
- [Adaptive Bed Mesh](adaptive-bed-mesh)
|
||||
- [Using different bed types in Orca](bed-types)
|
||||
### Support Settings
|
||||
|
||||
## Printer Calibration
|
||||

|
||||
|
||||
WIP...
|
||||
|
||||
### Multimaterial Settings
|
||||
|
||||

|
||||
|
||||
WIP...
|
||||
|
||||
### Others Settings
|
||||
|
||||

|
||||
|
||||
WIP...
|
||||
|
||||
## Calibrations
|
||||
|
||||
The [Calibration Guide](Calibration) outlines Orca’s key calibration tests and their suggested order of execution.
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ The recommended order for calibration is as follows:
|
|||
|
||||
- **[Adaptative Pressure Advance](adaptive-pressure-advance-calib):** This is an advanced calibration technique that can be used to further optimize the pressure advance settings for different print speeds and geometries.
|
||||
|
||||
<img src="https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/pa-tower.jpg?raw=true" alt="pa-tower" height="200">
|
||||
<img src="https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/pa/pa-tower.jpg?raw=true" alt="pa-tower" height="200">
|
||||
|
||||
2. **[Retraction](retraction-calib):** Calibrate the retraction settings to minimize stringing and improve print quality. Doing this after Flow and
|
||||
|
||||
|
@ -47,10 +47,9 @@ The recommended order for calibration is as follows:
|
|||
|
||||
<img src="https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg?raw=true" alt="Input_Shaping" height="200">
|
||||
|
||||
### VFA
|
||||
7. **[VFA](vfa-calib):** A VFA speed test is available to find resonance speeds.
|
||||
|
||||
Vertical Fine Artifacts (VFA) are small artifacts that can occur on the surface of a 3D print, particularly in areas where there are sharp corners or changes in direction. These artifacts can be caused by a variety of factors, including mechanical vibrations, resonance, and other factors that can affect the quality of the print.
|
||||
Because of the nature of these artifacts the methods to reduce them can be mechanical such as changing motors, belts and pulleys or with advanced calibrations such as Jerk/[Junction Deviation](junction-deviation) corrections or [Input Shaping](input-shaping).
|
||||
<img src="https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/vfa/vfa_test_print.jpg?raw=true" alt="vfa_test_print" height="200">
|
||||
|
||||
---
|
||||
|
||||
|
@ -62,4 +61,3 @@ _Credits:_
|
|||
- _The temp tower model is remixed from [Smart compact temperature calibration tower](https://www.thingiverse.com/thing:2729076)._
|
||||
- _The max flowrate test was inspired by Stefan (CNC Kitchen), and the model used in the test is a remix of his [Extrusion Test Structure](https://www.printables.com/model/342075-extrusion-test-structure)._
|
||||
- _ZV Input Shaping is inspired by [Marlin Input Shaping](https://marlinfw.org/docs/features/input_shaping.html) and [Ringing Tower 3D STL](https://marlinfw.org/assets/stl/ringing_tower.stl)._
|
||||
- _ChatGPT_ ;)
|
||||
|
|
|
@ -4,7 +4,7 @@ Cornering is a critical aspect of 3D printing that affects the quality and accur
|
|||
|
||||
## Jerk
|
||||
|
||||
WIP... TODO: Jerk calibration not implemented yet.
|
||||
TODO: Jerk calibration not implemented yet.
|
||||
|
||||
## Junction Deviation
|
||||
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
During high-speed movements, vibrations can cause a phenomenon called "ringing," where periodic ripples appear on the print surface. Input Shaping provides an effective solution by counteracting these vibrations, improving print quality and reducing wear on components without needing to significantly lower print speeds.
|
||||
|
||||
- [Klipper](#klipper)
|
||||
- [Resonance Compensation](#resonance-compensation)
|
||||
- [Marlin](#marlin)
|
||||
- [ZV Input Shaping](#zv-input-shaping)
|
||||
- [Fixed-Time Motion](#fixed-time-motion)
|
||||
|
||||
## Klipper
|
||||
|
||||
|
@ -125,5 +128,4 @@ ZV Input Shaping introduces an anti-vibration signal into the stepper motion for
|
|||
|
||||
### Fixed-Time Motion
|
||||
|
||||
WIP...
|
||||
This calibration test is currently under development. See the [Marlin documentation](https://marlinfw.org/docs/gcode/M493.html) for more information.
|
||||
TODO: This calibration test is currently under development. See the [Marlin documentation](https://marlinfw.org/docs/gcode/M493.html) for more information.
|
||||
|
|
13
doc/calibration/vfa-calib.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# VFA
|
||||
|
||||
Vertical Fine Artifacts (VFA) are small artifacts that can occur on the surface of a 3D print, particularly in areas where there are sharp corners or changes in direction. These artifacts can be caused by a variety of factors, including mechanical vibrations, resonance, and other factors that can affect the quality of the print.
|
||||
|
||||
Because of the nature of these artifacts the methods to reduce them can be mechanical such as changing motors, belts and pulleys or with advanced calibrations such as [Jerk/Junction Deviation](cornering-calib) corrections or [Input Shaping](input-shaping-calib).
|
||||
|
||||
## VFA Test
|
||||
|
||||
OrcaSlicer's VFA test is used to identify the print speed that minimizes ringing artifacts. It prints a tower with walls at key angles while gradually increasing the print speed. The goal is to find the speed at which VFA artifacts are least visible, revealing the optimal range for clean surfaces.
|
||||
|
||||

|
||||
|
||||

|
|
@ -1,4 +1,4 @@
|
|||
# Max Volumetric speed
|
||||
# Max Volumetric Speed (FlowRate) Calibration
|
||||
|
||||
This is a test designed to calibrate the maximum volumetric speed of the specific filament. The generic or 3rd party filament types may not have the correct volumetric flow rate set in the filament. This test will help you to find the maximum volumetric speed of the filament.
|
||||
|
||||
|
@ -6,15 +6,15 @@ You will be promted to enter the settings for the test: start volumetric speed,
|
|||
|
||||
Once printed, take note of where the layers begin to fail and where the quality begins to suffer. Pay attention to changes from matte to shiny as well.
|
||||
|
||||

|
||||

|
||||
|
||||
Using calipers or a ruler, measure the height of the print at that point. Use the following calculation to determine the correct max flow value: `start + (height-measured * step)` . For example in the photo below, and using the default setting values, the print quality began to suffer at 19mm measured, so the calculation would be: `5 + (19 * 0.5)` , or `13mm³/s` using the default values. Enter your number into the "Max volumetric speed" value in the filament settings.
|
||||
|
||||

|
||||

|
||||
|
||||
You can also return to OrcaSlicer in the "Preview" tab, make sure the color scheme "flow" is selected. Scroll down to the layer height that you measured, and click on the toolhead slider. This will indicate the max flow level for your filmanet.
|
||||
You can also return to OrcaSlicer in the "Preview" tab, make sure the color scheme "flow" is selected. Scroll down to the layer height that you measured, and click on the toolhead slider. This will indicate the max flow level for your filament.
|
||||
|
||||

|
||||

|
||||
|
||||
> [!NOTE]
|
||||
> You may also choose to conservatively reduce the flow by 5-10% to ensure print quality.
|
||||
|
|
|
@ -1,10 +1,33 @@
|
|||
# How to Build
|
||||
|
||||
This wiki page provides detailed instructions for building OrcaSlicer from source on different operating systems, including Windows, macOS, and Linux.
|
||||
It includes tool requirements, setup commands, and build steps for each platform.
|
||||
|
||||
Whether you're a contributor or just want a custom build, this guide will help you compile OrcaSlicer successfully.
|
||||
|
||||
- [Windows 64-bit](#windows-64-bit)
|
||||
- [Windows Tools Required](#windows-tools-required)
|
||||
- [Windows Instructions](#windows-instructions)
|
||||
- [MacOS 64-bit](#macos-64-bit)
|
||||
- [MacOS Tools Required](#macos-tools-required)
|
||||
- [MacOS Instructions](#macos-instructions)
|
||||
- [Debugging in Xcode](#debugging-in-xcode)
|
||||
- [Linux](#linux)
|
||||
- [Using Docker (Recommended)](#using-docker-recommended)
|
||||
- [Docker Dependencies](#docker-dependencies)
|
||||
- [Docker Instructions](#docker-instructions)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
- [Ubuntu](#ubuntu)
|
||||
- [Ubuntu Dependencies](#ubuntu-dependencies)
|
||||
- [Ubuntu Instructions](#ubuntu-instructions)
|
||||
- [Portable User Configuration](#portable-user-configuration)
|
||||
- [Example folder structure](#example-folder-structure)
|
||||
|
||||
## Windows 64-bit
|
||||
|
||||
This guide is for building your Visual Studio 2022 solution for OrcaSlicer on Windows 64-bit.
|
||||
How to building with Visual Studio 2022 on Windows 64-bit.
|
||||
|
||||
### Tools Required
|
||||
### Windows Tools Required
|
||||
|
||||
- [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) or Visual Studio 2019
|
||||
```shell
|
||||
|
@ -33,7 +56,7 @@ This guide is for building your Visual Studio 2022 solution for OrcaSlicer on Wi
|
|||
> winget install --id=GitHub.GitHubDesktop -e
|
||||
> ```
|
||||
|
||||
### Instructions
|
||||
### Windows Instructions
|
||||
|
||||
1. Clone the repository:
|
||||
- If using GitHub Desktop clone the repository from the GUI.
|
||||
|
@ -74,9 +97,11 @@ This guide is for building your Visual Studio 2022 solution for OrcaSlicer on Wi
|
|||
> [!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.
|
||||
|
||||
## macOS 64-bit
|
||||
## MacOS 64-bit
|
||||
|
||||
### Tools Required
|
||||
How to building with Xcode on MacOS 64-bit.
|
||||
|
||||
### MacOS Tools Required
|
||||
|
||||
- Xcode
|
||||
- CMake (version 3.31.x is mandatory)
|
||||
|
@ -114,7 +139,7 @@ cmake --version
|
|||
> [!IMPORTANT]
|
||||
> If you've recently upgraded Xcode, be sure to open Xcode at least once and install the required macOS build support.
|
||||
|
||||
### Instructions
|
||||
### MacOS Instructions
|
||||
|
||||
1. Clone the repository:
|
||||
```shell
|
||||
|
@ -147,14 +172,18 @@ To build and debug directly in Xcode:
|
|||
|
||||
## Linux
|
||||
|
||||
Linux instructions are available in two formats: using Docker (recommended) or building directly on your system.
|
||||
|
||||
### Using Docker (Recommended)
|
||||
|
||||
#### Dependencies
|
||||
How to build and run OrcaSlicer using Docker.
|
||||
|
||||
#### Docker Dependencies
|
||||
|
||||
- Docker
|
||||
- Git
|
||||
|
||||
#### Instructions
|
||||
#### Docker Instructions
|
||||
|
||||
```shell
|
||||
git clone https://github.com/SoftFever/OrcaSlicer && cd OrcaSlicer && ./DockerBuild.sh && ./DockerRun.sh
|
||||
|
@ -179,7 +208,9 @@ By uncommenting and using these options as needed, you can often resolve issues
|
|||
|
||||
## Ubuntu
|
||||
|
||||
### Dependencies
|
||||
How to build OrcaSlicer on Ubuntu.
|
||||
|
||||
### Ubuntu Dependencies
|
||||
|
||||
All required dependencies will be installed automatically by the provided shell script, including:
|
||||
|
||||
|
@ -199,9 +230,27 @@ All required dependencies will be installed automatically by the provided shell
|
|||
- git
|
||||
- texinfo
|
||||
|
||||
### Instructions
|
||||
### Ubuntu Instructions
|
||||
|
||||
```shell
|
||||
`./build_linux.sh -u` # install dependencies
|
||||
`./build_linux.sh -disr` # build OrcaSlicer
|
||||
```
|
||||
|
||||
## Portable User Configuration
|
||||
|
||||
If you want OrcaSlicer to use a custom user configuration folder (e.g., for a portable installation), you can simply place a folder named `data_dir` next to the OrcaSlicer executable. OrcaSlicer will automatically use this folder as its configuration directory.
|
||||
|
||||
This allows for multiple self-contained installations with separate user data.
|
||||
|
||||
> [!TIP]
|
||||
> This feature is especially useful if you want to run OrcaSlicer from a USB stick or keep different profiles isolated.
|
||||
|
||||
### Example folder structure
|
||||
|
||||
```shell
|
||||
OrcaSlicer.exe
|
||||
data_dir/
|
||||
```
|
||||
|
||||
You don’t need to recompile or modify any settings — this works out of the box as long as `data_dir` exists in the same folder as the executable.
|
||||
|
|
|
@ -150,10 +150,13 @@ Always use raw GitHub URLs for image links to ensure correct display:
|
|||
Format = `![[filename]](` + Base URL + filename.extension + Raw tag + `)`
|
||||
|
||||
- Base URL:
|
||||
|
||||
```markdown
|
||||
https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/
|
||||
```
|
||||
|
||||
- Raw tag:
|
||||
|
||||
```markdown
|
||||
?raw=true
|
||||
```
|
||||
|
@ -167,6 +170,7 @@ Format = `![[filename]](` + Base URL + filename.extension + Raw tag + `)`
|
|||
```
|
||||
|
||||
- For an image in a subdirectory like `doc/images/calibration/pa-example.svg`:
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
@ -194,6 +198,7 @@ If resizing is necessary (e.g., for thumbnails), use the following syntax:
|
|||
|
||||
HTML Format = `<img src="` + Base URL + filename.extension + Raw tag + `" alt="` + filename + `"` + size limit.
|
||||
Example:
|
||||
|
||||
```html
|
||||
<img src="https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/InputShaping/IS_damp_marlin_print_measure.jpg?raw=true" alt="Input_Shaping" height="200">
|
||||
```
|
||||
|
|
|
@ -9,15 +9,15 @@ As the name might suggest this class deals with presets for various things. It d
|
|||
|
||||
- `TYPE_PRINT`: Refers to a process preset. It's called 'Print' probably due to some legacy code.
|
||||
|
||||

|
||||

|
||||
|
||||
- `TYPE_FILAMENT`: As the name suggests this preset is for filaments
|
||||
|
||||

|
||||

|
||||
|
||||
- `TYPE_PRINTER`: Preset for printers.
|
||||
|
||||

|
||||

|
||||
|
||||
There are other preset types but some of them are for SLA. Which is legacy code, since SLA printers are no longer supported. Above 3 are the important types.
|
||||
|
||||
|
|
|
@ -5,24 +5,24 @@ WIP...
|
|||
> [!WARNING]
|
||||
> !! incomplete, possibly inaccurate, being updated with new info !!
|
||||
|
||||
## [`Plater`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/GUI/Plater.hpp)
|
||||
## [`Plater`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/gui/Plater.hpp)
|
||||
|
||||
Refers to the entire application. The whole view, file loading, project saving and loading is all managed by this class. This class contains members for the model viewer, the sidebar, gcode viewer and everything else.
|
||||
|
||||
## [`Sidebar`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/GUI/Plater.hpp)
|
||||
## [`Sidebar`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/gui/Plater.hpp)
|
||||
|
||||
This is relating the the sidebar in the application window
|
||||
|
||||

|
||||

|
||||
|
||||
## [`ComboBox`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/GUI/Widgets/ComboBox.hpp)
|
||||
## [`ComboBox`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/gui/Widgets/ComboBox.hpp)
|
||||
|
||||
The drop down menus where you can see and select presets
|
||||
|
||||

|
||||

|
||||
|
||||
## [`Tab`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/GUI/Tab.hpp)
|
||||
## [`Tab`](https://github.com/SoftFever/OrcaSlicer/blob/main/src/slic3r/gui/Tab.hpp)
|
||||
|
||||
Refers to the various windows with settings. e.g. the Popup to edit printer or filament preset. Also the section to edit process preset and the object list. These 4 are managed by `TabPrinter`, `TabFilament`, `TabPrint` and `TabPrintModel` respectively.
|
||||
|
||||

|
||||

|
||||
|
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
BIN
doc/images/GUI/process-preset.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
doc/images/GUI/process/process-multimaterial.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
doc/images/GUI/process/process-others.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
doc/images/GUI/process/process-quality.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
doc/images/GUI/process/process-speed.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
doc/images/GUI/process/process-strength.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
doc/images/GUI/process/process-support.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 285 KiB After Width: | Height: | Size: 285 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
|
@ -1,3 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="401px" height="71px" viewBox="-0.5 -0.5 401 71"><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="fhMGX1kBES0GxHB0cy2X-14"><g><rect x="130" y="0" width="140" height="70" rx="25.9" ry="25.9" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 131px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="200" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="fhMGX1kBES0GxHB0cy2X-15"><g><rect x="260" y="0" width="140" height="70" rx="25.9" ry="25.9" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 261px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="330" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="fhMGX1kBES0GxHB0cy2X-9"><g><rect x="0" y="0" width="140" height="70" rx="25.9" ry="25.9" fill-opacity="0.75" fill="#fa6800" style="fill: light-dark(rgb(250, 104, 0), rgb(233, 107, 18)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));" stroke="#c73500" stroke-opacity="0.75" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Outer wall</div></div></div></foreignObject><text x="70" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Outer wall</text></switch></g></g></g></g></g></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="803px" height="143px" viewBox="-0.5 -0.5 803 143"><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="fhMGX1kBES0GxHB0cy2X-14"/><g data-cell-id="fhMGX1kBES0GxHB0cy2X-15"/><g data-cell-id="fhMGX1kBES0GxHB0cy2X-9"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-1"><g><rect x="260" y="0" width="280" height="140" rx="51.8" ry="51.8" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" stroke-width="2" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 131px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="200" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-2"><g><rect x="520" y="0" width="280" height="140" rx="51.8" ry="51.8" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" stroke-width="2" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 261px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="330" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-3"><g><rect x="0" y="0" width="280" height="140" rx="51.8" ry="51.8" fill-opacity="0.75" fill="#fa6800" style="fill: light-dark(rgb(250, 104, 0), rgb(233, 107, 18)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));" stroke="#c73500" stroke-opacity="0.75" stroke-width="2" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Outer wall</div></div></div></foreignObject><text x="70" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Outer wall</text></switch></g></g></g><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-4"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-6"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-1"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-5"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-6"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-7"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-8"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-9"/></g></g></g></svg>
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4.6 KiB |
|
@ -1,3 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="411px" height="71px" viewBox="-0.5 -0.5 411 71"><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="fhMGX1kBES0GxHB0cy2X-14"><g><rect x="140" y="0" width="140" height="70" rx="25.9" ry="25.9" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="210" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="fhMGX1kBES0GxHB0cy2X-15"><g><rect x="270" y="0" width="140" height="70" rx="25.9" ry="25.9" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 271px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="340" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="fhMGX1kBES0GxHB0cy2X-9"><g><rect x="0" y="0" width="140" height="70" rx="25.9" ry="25.9" fill-opacity="0.75" fill="#fa6800" style="fill: light-dark(rgb(250, 104, 0), rgb(233, 107, 18)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));" stroke="#c73500" stroke-opacity="0.75" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Outer wall</div></div></div></foreignObject><text x="70" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Outer wall</text></switch></g></g></g></g></g></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="822px" height="143px" viewBox="-0.5 -0.5 822 143"><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="fhMGX1kBES0GxHB0cy2X-14"><g><rect x="280" y="0" width="280" height="140" rx="51.8" ry="51.8" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" stroke-width="2" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="210" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="fhMGX1kBES0GxHB0cy2X-15"><g><rect x="540" y="0" width="280" height="140" rx="51.8" ry="51.8" fill-opacity="0.75" fill="#e3c800" style="fill: light-dark(rgb(227, 200, 0), rgb(103, 80, 0)); stroke: light-dark(rgb(176, 149, 0), rgb(141, 118, 0));" stroke="#b09500" stroke-opacity="0.75" stroke-width="2" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 271px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inner wall</div></div></div></foreignObject><text x="340" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Inner wall</text></switch></g></g></g><g data-cell-id="fhMGX1kBES0GxHB0cy2X-9"><g><rect x="0" y="0" width="280" height="140" rx="51.8" ry="51.8" fill-opacity="0.75" fill="#fa6800" style="fill: light-dark(rgb(250, 104, 0), rgb(233, 107, 18)); stroke: light-dark(rgb(199, 53, 0), rgb(255, 145, 100));" stroke="#c73500" stroke-opacity="0.75" stroke-width="2" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)scale(2)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 35px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: "Helvetica"; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Outer wall</div></div></div></foreignObject><text x="70" y="39" fill="#000000" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Outer wall</text></switch></g></g></g><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-1"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-2"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-3"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-4"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-6"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-1"/><g data-cell-id="JIVyJF1suF0Iw4lcCjqO-5"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-6"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-7"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-8"/><g data-cell-id="iafkVJ-x-7XXIqqUWIqP-9"/></g></g></g></svg>
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
BIN
doc/images/fill/InfillAnchorOff.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
doc/images/fill/InfillAnchorOn.png
Normal file
After Width: | Height: | Size: 21 KiB |
3
doc/images/fill/InfillWallOverlapOff.svg
Normal file
After Width: | Height: | Size: 5.7 KiB |
3
doc/images/fill/InfillWallOverlapOn.svg
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
doc/images/fill/infill-top-2d-honeycomb.png
Normal file
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 34 KiB |
BIN
doc/images/fill/infill-top-coss-zag.png
Normal file
After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 324 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 72 KiB |
BIN
doc/images/fill/infill-top-locked-zag.png
Normal file
After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 362 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 48 KiB |
BIN
doc/images/fill/infill-top-zig-zag.png
Normal file
After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
BIN
doc/images/vfa/vfa_test_menu.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
doc/images/vfa/vfa_test_print.jpg
Normal file
After Width: | Height: | Size: 324 KiB |
|
@ -16,4 +16,3 @@ Ramming is a technique used to push the filament through the nozzle to ensure th
|
|||
## Manual filament change
|
||||
|
||||
Manual filament change is a feature that allows the user to change the filament during the print. This can be useful for multi-material prints or when changing colors. The user can specify the position and timing of the filament change, as well as the speed and distance of the ramming process.
|
||||
WIP...
|
||||
|
|
|
@ -1,23 +1,58 @@
|
|||
# Wall Generator
|
||||
|
||||
WIP...
|
||||
The Wall Generator defines how the outer and inner walls (perimeters) of the model are printed.
|
||||
|
||||
## Classic
|
||||
|
||||
WIP...
|
||||
The Classic wall generator is a simple and reliable method used in many slicers. It creates as many walls as possible (limited by [Wall Loops](strength_settings_walls#wall-loops)) by extruding along the model’s perimeter using the defined [Line Width](quality_settings_line_width).
|
||||
This method does not vary extrusion width and is ideal for fast, predictable slicing.
|
||||
|
||||

|
||||
|
||||
## Arachne
|
||||
|
||||
WIP...
|
||||
The Arachne wall generator dynamically adjusts extrusion width to follow the shape of the model more closely. This allows better handling of thin features and smooth transitions between wall counts.
|
||||
|
||||

|
||||
|
||||
- Wall transitioning threshhold angle
|
||||
- Wall transitioning filter
|
||||
- Wall transitioning length
|
||||
- Wall distribution count
|
||||
- First layer minimum wall width
|
||||
- Minimum feature size
|
||||
- Minimum wall length
|
||||
### Wall transitioning threshhold angle
|
||||
|
||||
Defines the minimum angle (in degrees) required for the algorithm to create a transition between an even and odd number of walls. If a wedge shape exceeds this angle, no extra center wall will be added. Lowering this value reduces center walls but may cause under- or over-extrusion in sharp corners.
|
||||
|
||||
### Wall transitioning filter margin
|
||||
|
||||
Prevents rapid switching between more or fewer walls by defining a tolerance range around the minimum wall width. The extrusion width will stay within the range:
|
||||
|
||||
```math
|
||||
\left[ \text{Minimum Wall Width} - \text{Margin},\ 2 \times \text{Minimum Wall Width} + \text{Margin} \right]
|
||||
```
|
||||
|
||||
Higher values reduce transitions, travel moves, and extrusion starts/stops, but may increase extrusion variability and introduce print quality issues. Expressed as a percentage of nozzle diameter.
|
||||
|
||||
### Wall transitioning length
|
||||
|
||||
Controls how far into the model the transition between wall counts extends. A lower value shortens or removes center walls, improving print time but potentially reducing coverage in tight areas.
|
||||
|
||||
### Wall distribution count
|
||||
|
||||
Sets how many walls (counted inward from the outer wall) are allowed to vary in width. Lower values constrain variation to inner walls, keeping outer walls consistent for best surface quality.
|
||||
|
||||
### Minimum wall width
|
||||
|
||||
Defines the narrowest wall that can be printed to represent thin features. If the feature is thinner than this value, the wall will match its width. Expressed as a percentage of nozzle diameter.
|
||||
|
||||
#### First layer minimum wall width
|
||||
|
||||
Specifies the minimum wall width for the first layer. It is recommended to match the nozzle diameter to improve adhesion and ensure stable base walls.
|
||||
|
||||
### Minimum feature size
|
||||
|
||||
Minimum width required for a model feature to be printed. Features below this value are skipped; features above it are widened to match the **Minimum Wall Width**. Expressed as a percentage of nozzle diameter.
|
||||
|
||||
### Minimum wall length
|
||||
|
||||
Avoids very short or isolated wall segments that add unnecessary time. Increasing this value removes short unconnected walls, improving efficiency.
|
||||
|
||||
> [!NOTE]
|
||||
> Top and bottom surfaces are not affected by this setting to avoid visual artifacts.
|
||||
> Use the One Wall Threshold (in Advanced settings) to adjust how aggressively OrcaSlicer considers a region a top surface. This option only appears when this setting exceeds 0.5, or if single-wall top surfaces are enabled.
|
||||
|
|
|
@ -2,6 +2,41 @@
|
|||
|
||||
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](#sparse-infill-density)
|
||||
- [Direction and Rotation](#direction-and-rotation)
|
||||
- [Direction](#direction)
|
||||
- [Rotation](#rotation)
|
||||
- [Infill Wall Overlap](#infill-wall-overlap)
|
||||
- [Apply gap fill](#apply-gap-fill)
|
||||
- [Anchor](#anchor)
|
||||
- [Internal Solid Infill](#internal-solid-infill)
|
||||
- [Sparse Infill Pattern](#sparse-infill-pattern)
|
||||
- [Concentric](#concentric)
|
||||
- [Rectilinear](#rectilinear)
|
||||
- [Grid](#grid)
|
||||
- [2D Lattice](#2d-lattice)
|
||||
- [Line](#line)
|
||||
- [Cubic](#cubic)
|
||||
- [Triangles](#triangles)
|
||||
- [Tri-hexagon](#tri-hexagon)
|
||||
- [Gyroid](#gyroid)
|
||||
- [TPMS-D](#tpms-d)
|
||||
- [Honeycomb](#honeycomb)
|
||||
- [Adaptive Cubic](#adaptive-cubic)
|
||||
- [Aligned Rectilinear](#aligned-rectilinear)
|
||||
- [2D Honeycomb](#2d-honeycomb)
|
||||
- [3D Honeycomb](#3d-honeycomb)
|
||||
- [Hilbert Curve](#hilbert-curve)
|
||||
- [Archimedean Chords](#archimedean-chords)
|
||||
- [Octagram Spiral](#octagram-spiral)
|
||||
- [Support Cubic](#support-cubic)
|
||||
- [Lightning](#lightning)
|
||||
- [Cross Hatch](#cross-hatch)
|
||||
- [Quarter Cubic](#quarter-cubic)
|
||||
- [Zig Zag](#zig-zag)
|
||||
- [Coss Zag](#coss-zag)
|
||||
- [Locked Zag](#locked-zag)
|
||||
|
||||
## Sparse infill density
|
||||
|
||||
Density usually should be calculated as a % of the total infill volume, not the total print volume.
|
||||
|
@ -9,6 +44,82 @@ Higher density increases strength but also material usage and print time. Lower
|
|||
|
||||
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.
|
||||
|
||||
## Direction and Rotation
|
||||
|
||||
### Direction
|
||||
|
||||
Controls the direction of the infill lines to optimize or strengthen the print.
|
||||
|
||||
### Rotation
|
||||
|
||||
This parameter adds a rotation to the sparse infill direction for each layer according to the specified template. The template is a comma-separated list of angles in degrees.
|
||||
|
||||
For example:
|
||||
|
||||
```c++
|
||||
0,90
|
||||
```
|
||||
|
||||
The first layer uses 0°, the second uses 90°, and the pattern repeats for subsequent layers.
|
||||
|
||||
Other examples:
|
||||
|
||||
```c++
|
||||
0,45,90
|
||||
```
|
||||
|
||||
```c++
|
||||
0,60,120,180
|
||||
```
|
||||
|
||||
If there are more layers than angles, the sequence repeats.
|
||||
> [!NOTE]
|
||||
> Not all sparse infill patterns support rotation.
|
||||
|
||||
## Infill Wall Overlap
|
||||
|
||||
Infill area is enlarged slightly to overlap with wall for better bonding. The percentage value is relative to line width of sparse infill. Set this value to ~10-15% to minimize potential over extrusion and accumulation of material resulting in rough surfaces.
|
||||
|
||||
- **Infill Wall Overlap Off**
|
||||
|
||||

|
||||
|
||||
- **Infill Wall Overlap On**
|
||||
|
||||

|
||||
|
||||
## Apply gap fill
|
||||
|
||||
Enables gap fill for the selected solid surfaces. The minimum gap length that will be filled can be controlled from the filter out tiny gaps option.
|
||||
|
||||
1. **Everywhere:** Applies gap fill to top, bottom and internal solid surfaces for maximum strength.
|
||||
2. **Top and Bottom surfaces:** Applies gap fill to top and bottom surfaces only, balancing print speed, reducing potential over extrusion in the solid infill and making sure the top and bottom surfaces have no pinhole gaps.
|
||||
3. **Nowhere:** Disables gap fill for all solid infill areas.
|
||||
|
||||
Note that if using the [classic perimeter generator](quality_settings_wall_generator#classic), gap fill may also be generated between perimeters, if a full width line cannot fit between them.
|
||||
That perimeter gap fill is not controlled by this setting.
|
||||
|
||||
If you would like all gap fill, including the classic perimeter generated one, removed, set the filter out tiny gaps value to a large number, like 999999.
|
||||
|
||||
However this is not advised, as gap fill between perimeters is contributing to the model's strength. For models where excessive gap fill is generated between perimeters, a better option would be to switch to the [arachne wall generator](quality_settings_wall_generator#arachne) and use this option to control whether the cosmetic top and bottom surface gap fill is generated.
|
||||
|
||||
## Anchor
|
||||
|
||||
Connect an infill line to an internal perimeter with a short segment of an additional perimeter. If expressed as percentage (example: 15%) it is calculated over infill extrusion width.
|
||||
OrcaSlicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. If set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0.
|
||||
|
||||
- **Anchor Off**
|
||||
|
||||

|
||||
|
||||
- **Anchor On**
|
||||
|
||||

|
||||
|
||||
## Internal Solid Infill
|
||||
|
||||
Line pattern of internal solid infill. If the [detect narrow internal solid infill](strength_settings_advanced#detect-narrow-internal-solid-infill) be enabled, the concentric pattern will be used for the small area.
|
||||
|
||||
## 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.
|
||||
|
@ -18,30 +129,33 @@ There is no one-size-fits-all solution, as the best pattern depends on the speci
|
|||
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 |
|
||||
| Pattern | X-Y Strength | Z Strength | Material Usage | Print Time |
|
||||
|-----------------------------------------------|--------------|-------------|----------------|-------------|
|
||||
| [Concentric](#concentric) | Low | Normal | Normal | Normal |
|
||||
| [Rectilinear](#rectilinear) | Normal-Low | Low | Normal | Normal-Low |
|
||||
| [Grid](#grid) | High | High | Normal | Normal-Low |
|
||||
| [2D Lattice](#2d-lattice) | Normal-Low | Low | Normal | Normal-Low |
|
||||
| [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-Low |
|
||||
| [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 |
|
||||
| [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 |
|
||||
| [Zig Zag](#zig-zag) | Normal-Low | Low | Normal | Normal |
|
||||
| [Coss Zag](#coss-zag) | Normal | Low | Normal | Normal |
|
||||
| [Locked Zag](#locked-zag) | Normal-Low | Normal-Low | Normal-High | Extra-High |
|
||||
|
||||
> [!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.
|
||||
|
@ -61,14 +175,14 @@ Fills the area with progressively smaller versions of the outer contour, creatin
|
|||
|
||||
### Rectilinear
|
||||
|
||||
Parallel lines spaced according to infill density. Each layer is printed perpendicular to the previous, resulting in low vertical bonding.
|
||||
Parallel lines spaced according to infill density. Each layer is printed perpendicular to the previous, resulting in low vertical bonding. Considere using new [Zig Zag](#zig-zag) infill instead.
|
||||
|
||||
- **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
|
||||
- **Print Time:** Normal-Low
|
||||
- **Material/Time (Higher better):** Normal
|
||||
|
||||

|
||||
|
||||
|
@ -80,7 +194,7 @@ Two-layer pattern of perpendicular lines, forming a grid. Overlapping points may
|
|||
- **Vertical Strength (Z):** High
|
||||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal
|
||||
- **Print Time:** Normal-Low
|
||||
- **Material/Time (Higher better):** Normal
|
||||
|
||||

|
||||
|
@ -93,7 +207,7 @@ Low-strength pattern with good flexibility. Angle 1 and angle 2 TBD.
|
|||
- **Vertical Strength (Z):** Low
|
||||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal
|
||||
- **Print Time:** Normal-Low
|
||||
- **Material/Time (Higher better):** Normal
|
||||
|
||||

|
||||
|
@ -159,7 +273,7 @@ Mathematical, isotropic surface providing equal strength in all directions. Exce
|
|||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal-High
|
||||
- **Material/Time (Higher better):** Low
|
||||
- **Material/Time (Higher better):** Normal-Low
|
||||
|
||||

|
||||
|
||||
|
@ -172,7 +286,7 @@ Triply Periodic Minimal Surface - D. Hybrid between [Cross Hatch](#cross-hatch)
|
|||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** High
|
||||
- **Material/Time (Higher better):** Low
|
||||
- **Material/Time (Higher better):** Normal-Low
|
||||
|
||||

|
||||
|
||||
|
@ -185,7 +299,7 @@ Hexagonal pattern balancing strength and material use. Double walls in each hexa
|
|||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** High
|
||||
- **Print Time:** Ultra-High
|
||||
- **Material/Time (Higher better):** Extra Low
|
||||
- **Material/Time (Higher better):** Low
|
||||
|
||||

|
||||
|
||||
|
@ -211,7 +325,7 @@ Recommended with layer anchoring to improve not perpendicular strength.
|
|||
- **Vertical Strength (Z):** Normal
|
||||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal
|
||||
- **Print Time:** Normal-Low
|
||||
- **Material/Time (Higher better):** Normal
|
||||
|
||||

|
||||
|
@ -238,7 +352,7 @@ This infill tries to generate a printable honeycomb structure by printing square
|
|||
- **Density Calculation:** Unknown
|
||||
- **Material Usage:** Normal-Low
|
||||
- **Print Time:** High
|
||||
- **Material/Time (Higher better):** Extra Low
|
||||
- **Material/Time (Higher better):** Low
|
||||
|
||||

|
||||
|
||||
|
@ -252,7 +366,7 @@ Print speed is very low due to the complexity of the path, which can lead to lon
|
|||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** High
|
||||
- **Material/Time (Higher better):** Extra Low
|
||||
- **Material/Time (Higher better):** Low
|
||||
|
||||

|
||||
|
||||
|
@ -277,8 +391,8 @@ Esthetic pattern with low strength and high print time.
|
|||
- **Vertical Strength (Z):** Normal
|
||||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal-High
|
||||
- **Material/Time (Higher better):** Normal
|
||||
- **Print Time:** Normal
|
||||
- **Material/Time (Higher better):** Normal-Low
|
||||
|
||||

|
||||
|
||||
|
@ -304,7 +418,7 @@ Ultra-fast, ultra-low material infill. Designed for speed and efficiency, ideal
|
|||
- **Density Calculation:** % of layer before top shell layers
|
||||
- **Material Usage:** Ultra-Low
|
||||
- **Print Time:** Ultra-Low
|
||||
- **Material/Time (Higher better):** Extra Low
|
||||
- **Material/Time (Higher better):** Low
|
||||
|
||||

|
||||
|
||||
|
@ -317,7 +431,7 @@ Similar to [Gyroid](#gyroid) but with linear patterns, creating weak points at i
|
|||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal-High
|
||||
- **Material/Time (Higher better):** Low
|
||||
- **Material/Time (Higher better):** Normal-Low
|
||||
|
||||

|
||||
|
||||
|
@ -333,3 +447,42 @@ Similar to [Gyroid](#gyroid) but with linear patterns, creating weak points at i
|
|||
- **Material/Time (Higher better):** Normal
|
||||
|
||||

|
||||
|
||||
### Zig Zag
|
||||
|
||||
Similar to [rectilinear](#rectilinear) with consistent pattern between layers. Allows you to add a Symmetric infil Y axis for models with two symmetric parts.
|
||||
|
||||
- **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
|
||||
|
||||

|
||||
|
||||
### Coss Zag
|
||||
|
||||
Similar to [Zig Zag](#zig-zag) but displacing each lager with Infill shift step parammeter.
|
||||
|
||||
- **Horizontal Strength (X-Y):** Normal
|
||||
- **Vertical Strength (Z):** Low
|
||||
- **Density Calculation:** % of total infill volume
|
||||
- **Material Usage:** Normal
|
||||
- **Print Time:** Normal
|
||||
- **Material/Time (Higher better):** Normal
|
||||
|
||||

|
||||
|
||||
### Locked Zag
|
||||
|
||||
Adaptative version of [Zig Zag](#zig-zag) adding an external skin texture to interlock layers and a low material skeleton.
|
||||
|
||||
- **Horizontal Strength (X-Y):** Normal-Low
|
||||
- **Vertical Strength (Z):** Normal-Low
|
||||
- **Density Calculation:** Same as [Zig Zag](#zig-zag) but increasing near walls
|
||||
- **Material Usage:** Normal-High
|
||||
- **Print Time:** Extra-High
|
||||
- **Material/Time (Higher better):** Low
|
||||
|
||||

|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# Top and Bottom Shells
|
||||
|
||||
Controls how the top and bottom solid layers (shells) are generated in the print.
|
||||
|
||||
- **Shells:** This is the number of solid layers of shell, including the surface layer. When the thickness calculated by this value is thinner than shell thickness, the shell layers will be increased.
|
||||
- **Shell Thickness:** The number of solid layers is increased when slicing if the thickness calculated by shell layers is thinner than this value. This can avoid having too thin shell when layer height is small. 0 means that this setting is disabled and thickness of shell is absolutely determined by shell layers.
|
||||
- **Infill/Wall Overlap:** Top solid infill area is enlarged slightly to overlap with wall for better bonding and to minimize the appearance of pinholes where the infill meets the walls. A value of 25-30% is a good starting point, minimizing the appearance of pinholes. The percentage value is relative to line width of sparse infill.
|
||||
- **Surface Pattern:** This setting controls the pattern of the surface. The options are:
|
||||
- **Concentric:** Fills the surface with inward-tracing loops that follow the outer contour.
|
||||
- **Rectilinear:** Fills the surface with straight lines alternating direction per layer.
|
||||
- **Monotonic:** Prints lines in a uniform direction for a smoother visual surface.
|
||||
- **Monotonic Lines:** Similar to Monotonic but avoids overlapping with the perimeter, reducing excess material at joints. May introduce visible seams.
|
||||
- **Aligned Rectilinear:** The surface is printed with rectilinear lines that are aligned with the infill pattern.
|
||||
- **Hilbert Curve:** Applies a space-filling curve for even material distribution and a unique appearance. Slow to print but useful in esthetic applications.
|
||||
- **Archimedean Chords:** Generates concentric arc-like lines, promoting uniform material spread.
|
||||
- **Octagram Spiral:** Creates an octagonal spiral for decorative, esthetic surfaces.
|
||||
|
||||
> [!NOTE]
|
||||
> Some patterns may have further information in its [Sparse Infill Pattern Wiki](strength_settings_infill#sparse-infill-pattern)
|
|
@ -22,93 +22,16 @@
|
|||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="24.479167"
|
||||
inkscape:cx="12.214468"
|
||||
inkscape:cy="12.88851"
|
||||
inkscape:zoom="45.254834"
|
||||
inkscape:cx="17.987029"
|
||||
inkscape:cy="12.805262"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1377"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg10"
|
||||
showguides="true">
|
||||
<sodipodi:guide
|
||||
position="7.4348935,20.691064"
|
||||
orientation="1,0"
|
||||
id="guide13"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="10.662128,17.545532"
|
||||
orientation="0,-1"
|
||||
id="guide14"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="17.525106,21.140426"
|
||||
orientation="1,0"
|
||||
id="guide19"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="11.029787,7.4961704"
|
||||
orientation="0,-1"
|
||||
id="guide20"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<line
|
||||
x1="1.5"
|
||||
y1="17.5"
|
||||
x2="17.5"
|
||||
y2="1.5"
|
||||
style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.75"
|
||||
id="line1" />
|
||||
<line
|
||||
x1="22.5"
|
||||
y1="16.5"
|
||||
x2="17.5"
|
||||
y2="21.5"
|
||||
style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.75"
|
||||
id="line2" />
|
||||
<line
|
||||
x1="7.5"
|
||||
y1="1.5"
|
||||
x2="1.5"
|
||||
y2="7.5"
|
||||
style="fill:none;stroke:#575757;stroke-linecap:round;stroke-linejoin:round;opacity:0.75;stroke-opacity:1"
|
||||
id="line3" />
|
||||
<line
|
||||
x1="22.5"
|
||||
y1="6.5"
|
||||
x2="6.5"
|
||||
y2="22.5"
|
||||
style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.75"
|
||||
id="line4" />
|
||||
<line
|
||||
x1="18.5"
|
||||
y1="22.5"
|
||||
x2="1.5"
|
||||
y2="5.5"
|
||||
style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="line7" />
|
||||
<line
|
||||
x1="17.5"
|
||||
y1="1.5"
|
||||
x2="22.5"
|
||||
y2="6.5"
|
||||
style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="line8" />
|
||||
<line
|
||||
x1="1.5"
|
||||
y1="15.5"
|
||||
x2="8.5"
|
||||
y2="22.5"
|
||||
style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="line9" />
|
||||
<line
|
||||
x1="7.5"
|
||||
y1="1.5"
|
||||
x2="22.5"
|
||||
y2="16.5"
|
||||
style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"
|
||||
id="line10" />
|
||||
showguides="true" />
|
||||
<path
|
||||
d="M3.5,1.5h17a2,2,0,0,1,2,2v17a2,2,0,0,1-2,2H3.5a2,2,0,0,1-2-2V3.5A2,2,0,0,1,3.5,1.5Z"
|
||||
style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"
|
||||
|
@ -117,76 +40,42 @@
|
|||
style="fill:#939393;fill-opacity:1;stroke:none;stroke-width:0.0408511"
|
||||
d="M 2.90923,22.896259 C 2.0613133,22.674106 1.4709446,22.121791 1.1317723,21.233374 l -0.09007,-0.235927 -0.010758,-8.854467 c -0.0094,-7.7388928 -0.00304,-8.8917826 0.050495,-9.1506389 0.1859554,-0.8991302 0.9034473,-1.644147 1.8305395,-1.9007639 0.2366323,-0.065499 0.8566253,-0.070301 9.0778082,-0.070301 7.25241,0 8.863843,0.00978 9.048511,0.054939 0.41936,0.1025422 0.894759,0.3676462 1.184681,0.6606312 0.460787,0.465656 0.674736,0.9256377 0.740656,1.5923869 0.02306,0.2331921 0.03324,3.8138627 0.02551,8.9669367 -0.01218,8.11996 -0.0168,8.591678 -0.08634,8.820989 -0.280161,0.923863 -1.004037,1.61516 -1.884942,1.800108 -0.246575,0.05177 -1.492743,0.05983 -9.04851,0.0585 -8.488697,-0.0015 -8.7718539,-0.004 -9.0601322,-0.07951 z m 18.140693,-0.972914 c 0.331179,-0.133671 0.679356,-0.465886 0.829868,-0.791824 l 0.118507,-0.256627 0.01067,-8.781151 C 22.020819,2.3471958 22.04116,3.0891606 21.749942,2.6450177 21.599404,2.4154289 21.375482,2.2298349 21.079149,2.0890425 l -0.18383,-0.08734 H 12.010213 3.1251064 L 2.8684789,2.1202084 C 2.5425414,2.270721 2.2103264,2.6188978 2.0766551,2.9500767 l -0.095379,0.2363063 -0.011773,8.578723 c -0.00774,5.63809 0.00244,8.687076 0.029697,8.89482 0.093595,0.713409 0.5893405,1.239468 1.2564016,1.333226 0.1304402,0.01833 4.1343554,0.03159 8.8975893,0.02945 l 8.660426,-0.0039 z"
|
||||
id="path18" />
|
||||
<path
|
||||
style="fill:#575757;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511;stroke-opacity:1"
|
||||
d="m 12.847206,16.115289 -0.325345,-0.327265 2.133833,-2.133833 2.133833,-2.133833 0.336923,0.336924 0.336923,0.336923 -2.12388,2.124174 c -1.168133,1.168296 -2.133568,2.124174 -2.14541,2.124174 -0.01184,0 -0.167937,-0.147269 -0.346877,-0.327264 z"
|
||||
id="path21" />
|
||||
<path
|
||||
style="fill:#575757;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511;stroke-opacity:1"
|
||||
d="m 7.8534456,21.130094 -0.3361443,-0.3379 2.1346396,-2.134349 2.1346401,-2.134349 0.336144,0.3379 0.336144,0.337899 -2.13464,2.134349 -2.1346391,2.134349 z"
|
||||
id="path22" />
|
||||
<path
|
||||
style="fill:#575757;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511;stroke-opacity:1"
|
||||
d="m 6.546827,21.763848 0.2344496,-0.234449 0.2344496,0.234449 0.2344496,0.23445 H 6.7812766 6.3123774 Z"
|
||||
id="path23" />
|
||||
<path
|
||||
style="fill:#575757;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511;stroke-opacity:1"
|
||||
d="m 17.861947,11.121574 -0.336135,-0.33789 2.13578,-2.1354894 2.135779,-2.135489 0.09025,0.096067 c 0.0827,0.088027 0.09025,0.1368911 0.09025,0.583812 v 0.4877446 l -1.889895,1.8895673 -1.889895,1.8895675 z"
|
||||
id="path24" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 6.5877715,21.763941 0.193505,-0.193505 0.193505,0.193505 0.1935051,0.193506 H 6.7812765 6.3942664 Z"
|
||||
id="path1" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="M 7.8529991,21.088808 7.558256,20.792085 9.6516156,18.699021 c 1.1513474,-1.151185 2.1121364,-2.093064 2.1350854,-2.093064 0.02295,0 0.174361,0.133526 0.33647,0.296724 l 0.294743,0.296723 -2.09336,2.093064 c -1.1513475,1.151185 -2.1121362,2.093064 -2.1350855,2.093064 -0.022949,0 -0.1743606,-0.133526 -0.3364694,-0.296724 z"
|
||||
id="path2" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 12.847659,16.074118 -0.285957,-0.284076 2.113902,-2.114406 2.113903,-2.114406 0.316736,0.318165 0.316735,0.318166 -2.093037,2.081645 c -1.15117,1.144905 -2.116277,2.081047 -2.144681,2.080316 -0.0284,-7.31e-4 -0.180324,-0.129163 -0.337601,-0.285404 z"
|
||||
id="path3" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 17.86151,11.080298 -0.294742,-0.296722 2.118341,-2.118048 c 2.117619,-2.1173249 2.118364,-2.1180149 2.185127,-2.0226982 0.05244,0.074868 0.06679,0.1965381 0.06679,0.5664281 v 0.4710787 l -1.848677,1.8483423 c -1.016773,1.0165881 -1.867445,1.8483421 -1.890384,1.8483421 -0.02294,0 -0.174341,-0.133525 -0.33645,-0.296723 z"
|
||||
id="path4" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="M 2.8696064,6.137744 2.5334527,5.7998348 4.422634,3.9109812 6.3118152,2.0221276 H 6.804957 c 0.4607028,0 0.4989051,0.00614 0.5807596,0.093265 L 7.4733352,2.2086584 5.3395475,4.3421556 3.20576,6.475653 Z"
|
||||
id="path5" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 17.861947,21.130084 -0.336135,-0.33789 2.135779,-2.135489 2.13578,-2.135489 0.09025,0.09607 c 0.0827,0.08803 0.09025,0.136891 0.09025,0.583812 v 0.487745 l -1.889895,1.889567 -1.889895,1.889567 z"
|
||||
id="path6" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="M 7.8633763,11.131459 7.5380311,10.804194 9.6718639,8.6703613 11.805697,6.5365285 12.14262,6.8734517 12.479543,7.2103748 10.355663,9.334549 c -1.1681333,1.168296 -2.1335682,2.124174 -2.1454103,2.124174 -0.011842,0 -0.1679366,-0.147269 -0.3468764,-0.327264 z"
|
||||
id="path7" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 2.8696157,16.146264 -0.3361442,-0.3379 2.1346395,-2.134349 2.1346397,-2.134349 0.3361442,0.3379 0.3361442,0.337899 -2.1346396,2.134349 -2.1346395,2.134349 z"
|
||||
id="path8" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 2.0017021,17.218723 v -0.468899 l 0.2344496,0.23445 0.2344496,0.234449 -0.2344496,0.23445 -0.2344496,0.234449 z"
|
||||
id="path9" />
|
||||
<path
|
||||
style="fill:#949494;fill-opacity:0.74902;stroke:#575757;stroke-width:0.0408511"
|
||||
d="M 12.878117,6.137744 12.541963,5.7998348 14.431144,3.9109812 16.320326,2.0221276 h 0.493142 c 0.460702,0 0.498905,0.00614 0.580759,0.093265 l 0.08762,0.093265 -2.133788,2.1334972 -2.133787,2.1334974 z"
|
||||
id="path11" />
|
||||
<path
|
||||
style="fill:#009688;fill-opacity:1;stroke:#575757;stroke-width:0.0408511"
|
||||
d="M 6.8044173,8.9013728 C 5.8891463,8.6799894 5.1293329,7.9312103 4.8777561,7.0026907 4.7837651,6.6557878 4.7837651,6.0488929 4.8777561,5.70199 5.3133212,4.0944072 7.0721201,3.2823661 8.5576782,4.0029623 9.8573624,4.6333971 10.401452,6.2283001 9.7552143,7.513329 9.4074091,8.204932 8.7490599,8.7280789 8.0061889,8.9031641 7.6791867,8.9802341 7.1270552,8.9794111 6.8044173,8.9013741 Z M 7.7254879,7.9858114 c 0.518457,-0.097597 0.962572,-0.4436182 1.1925798,-0.929168 0.1209241,-0.2552726 0.1304428,-0.3066675 0.1304428,-0.704303 0,-0.3976356 -0.00952,-0.4490305 -0.1304428,-0.7043031 -0.6030824,-1.2731159 -2.4041171,-1.2731159 -3.0071994,0 -0.1209241,0.2552726 -0.1304429,0.3066675 -0.1304429,0.7043031 0,0.3976355 0.00952,0.4490304 0.1304429,0.704303 0.3306819,0.6980745 1.0595769,1.0713019 1.8146196,0.929168 z"
|
||||
id="path19" />
|
||||
<path
|
||||
style="fill:#009688;fill-opacity:1;stroke:#575757;stroke-width:0.0408511"
|
||||
d="M 16.935481,8.9013728 C 16.02021,8.6799894 15.260397,7.9312103 15.00882,7.0026907 c -0.09399,-0.3469029 -0.09399,-0.9537978 0,-1.3007007 0.435565,-1.6075828 2.194364,-2.4196239 3.679922,-1.6990277 1.299684,0.6304348 1.843774,2.2253378 1.197536,3.5103667 -0.347805,0.691603 -1.006154,1.2147499 -1.749025,1.3898351 -0.327003,0.07707 -0.879134,0.076247 -1.201772,-0.00179 z m 0.921071,-0.9155614 c 0.518457,-0.097597 0.962572,-0.4436182 1.192579,-0.929168 0.120924,-0.2552726 0.130443,-0.3066675 0.130443,-0.704303 0,-0.3976356 -0.0095,-0.4490305 -0.130443,-0.7043031 -0.603082,-1.2731159 -2.404117,-1.2731159 -3.007199,0 -0.120924,0.2552726 -0.130443,0.3066675 -0.130443,0.7043031 0,0.3976355 0.0095,0.4490304 0.130443,0.704303 0.330682,0.6980745 1.059577,1.0713019 1.81462,0.929168 z"
|
||||
id="path20" />
|
||||
<path
|
||||
style="fill:#009688;fill-opacity:1;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 6.8044173,19.073288 c -0.915271,-0.221384 -1.6750844,-0.970163 -1.9266612,-1.898683 -0.093991,-0.346902 -0.093991,-0.953797 0,-1.3007 0.4355651,-1.607583 2.194364,-2.419624 3.6799221,-1.699028 1.2996842,0.630435 1.8437738,2.225338 1.1975361,3.510367 -0.3478052,0.691603 -1.0061544,1.21475 -1.7490254,1.389835 -0.3270022,0.07707 -0.8791337,0.07625 -1.2017716,-0.0018 z m 0.9210706,-0.915562 c 0.518457,-0.0976 0.962572,-0.443618 1.1925798,-0.929168 0.1209241,-0.255272 0.1304428,-0.306667 0.1304428,-0.704303 0,-0.397635 -0.00952,-0.44903 -0.1304428,-0.704303 -0.6030824,-1.273116 -2.4041171,-1.273116 -3.0071994,0 -0.1209241,0.255273 -0.1304429,0.306668 -0.1304429,0.704303 0,0.397636 0.00952,0.449031 0.1304429,0.704303 0.3306819,0.698075 1.0595769,1.071302 1.8146196,0.929168 z"
|
||||
id="path25" />
|
||||
<path
|
||||
style="fill:#009688;fill-opacity:1;stroke:#575757;stroke-width:0.0408511"
|
||||
d="m 16.935481,19.073288 c -0.915271,-0.221384 -1.675084,-0.970163 -1.926661,-1.898683 -0.09399,-0.346902 -0.09399,-0.953797 0,-1.3007 0.435565,-1.607583 2.194364,-2.419624 3.679922,-1.699028 1.299684,0.630435 1.843774,2.225338 1.197536,3.510367 -0.347805,0.691603 -1.006154,1.21475 -1.749025,1.389835 -0.327003,0.07707 -0.879134,0.07625 -1.201772,-0.0018 z m 0.921071,-0.915562 c 0.518457,-0.0976 0.962572,-0.443618 1.192579,-0.929168 0.120924,-0.255272 0.130443,-0.306667 0.130443,-0.704303 0,-0.397635 -0.0095,-0.44903 -0.130443,-0.704303 -0.603082,-1.273116 -2.404117,-1.273116 -3.007199,0 -0.120924,0.255273 -0.130443,0.306668 -0.130443,0.704303 0,0.397636 0.0095,0.449031 0.130443,0.704303 0.330682,0.698075 1.059577,1.071302 1.81462,0.929168 z"
|
||||
id="path26" />
|
||||
<g
|
||||
id="g22"
|
||||
transform="matrix(1.005528,0,0,1.005528,-284.3849,-929.53132)"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.01989005;stroke-dasharray:none;stroke-opacity:1">
|
||||
<g
|
||||
id="g26"
|
||||
transform="matrix(0.20848903,0,0,0.20848903,234.2996,741.49731)"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1">
|
||||
<g
|
||||
id="g25"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1">
|
||||
<path
|
||||
d="m 242.24433,953.1427 c 2.41634,0.034 4.85811,0.0685 7.25372,0.0238 4.81496,-0.09 9.44196,-0.45875 13.41146,-1.99804 1.82617,-0.70815 3.52041,-1.68272 4.93981,-3.03133 1.13152,-1.0751 2.07818,-2.41806 2.7437,-3.88292 0.66553,-1.46486 1.08821,-3.02601 1.39603,-4.62759 0.66119,-3.44013 0.80391,-7.10747 1.15952,-10.39304 0.26711,-2.46787 0.66196,-4.70591 1.31545,-6.35074 0.42497,-1.06965 0.92891,-1.86275 1.55021,-2.45158 0.62129,-0.58883 1.482,-1.08822 2.60084,-1.49345 1.11885,-0.40523 2.47944,-0.70639 3.98056,-0.93114 3.33585,-0.49945 7.32241,-0.60831 11.10357,-1.1895 1.97868,-0.30414 3.91492,-0.73834 5.71534,-1.518 1.42883,-0.61874 2.76044,-1.49742 3.83999,-2.56194 1.07956,-1.06452 1.93659,-2.30465 2.6115,-3.64247 1.45684,-2.88778 2.10667,-6.21944 2.43293,-9.75357 0.32626,-3.53412 0.31166,-7.28875 0.26414,-11.02316 -0.006,-0.49199 -0.0132,-0.98354 -0.0201,-1.474 h -5.10039 l 5.1e-4,0.0359 c 0.0396,2.81557 0.0778,5.59659 0.0778,5.59659 -0.19559,6.41285 -0.58043,9.85971 -0.58043,9.85971 -1.33123,4.00029 -1.91463,5.1435 -1.91463,5.1435 -1.41735,1.80699 -2.21458,2.46835 -2.21458,2.46835 -2.23261,1.0634 -3.69969,1.46201 -3.69969,1.46201 -4.95371,0.83909 -8.97151,0.95184 -8.97151,0.95184 -5.71276,0.79548 -7.55271,1.1586 -7.55271,1.1586 -3.47167,1.26386 -5.13747,2.19295 -5.13747,2.19295 -2.29139,2.41691 -3.00736,3.60745 -3.00736,3.60745 -1.35336,3.13091 -1.791,5.1587 -1.791,5.1587 -0.85869,5.83665 -0.97122,9.79137 -0.97122,9.79137 -0.73101,4.72236 -1.02483,6.01996 -1.02483,6.01996 -0.779,2.14885 -1.24169,2.95922 -1.24169,2.95922 -1.51073,1.73921 -2.75354,2.55079 -2.75354,2.55079 -4.56905,1.75542 -8.70783,2.18247 -8.70783,2.18247 -6.85743,0.12671 -9.25191,0.0935 -11.67225,0.0594 l -0.0359,-5e-4 z"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path7-4"
|
||||
sodipodi:nodetypes="cssssssssssssssssccscccccccccccccccscc" />
|
||||
<path
|
||||
d="m 271.56839,982.46676 c -0.034,-2.41634 -0.0686,-4.85811 -0.0238,-7.25372 0.09,-4.81496 0.45876,-9.44196 1.99805,-13.41146 0.70815,-1.82617 1.68271,-3.52041 3.03133,-4.93981 1.0751,-1.13152 2.41806,-2.07818 3.88292,-2.74371 1.46486,-0.66552 3.02601,-1.0882 4.62759,-1.39602 3.44012,-0.6612 7.10747,-0.80391 10.39304,-1.15952 2.46787,-0.26711 4.70591,-0.66196 6.35074,-1.31545 1.06965,-0.42497 1.86275,-0.92891 2.45158,-1.55021 0.58883,-0.62129 1.08822,-1.482 1.49345,-2.60084 0.40523,-1.11885 0.70638,-2.47944 0.93114,-3.98056 0.49945,-3.33585 0.60831,-7.32241 1.1895,-11.10357 0.30414,-1.97868 0.73834,-3.91492 1.518,-5.71534 0.61874,-1.42883 1.49742,-2.76044 2.56194,-3.84 1.06452,-1.07955 2.30465,-1.93658 3.64247,-2.61149 2.88778,-1.45684 6.21944,-2.10667 9.75357,-2.43293 3.53412,-0.32626 7.28875,-0.31166 11.02315,-0.26415 0.492,0.006 0.98354,0.0132 1.47401,0.0201 v 5.10039 l -0.0359,-5.1e-4 c -2.81557,-0.0396 -5.59659,-0.0778 -5.59659,-0.0778 -6.41285,0.19559 -9.85971,0.58043 -9.85971,0.58043 -4.00029,1.33123 -5.1435,1.91463 -5.1435,1.91463 -1.80699,1.41735 -2.46835,2.21458 -2.46835,2.21458 -1.0634,2.2326 -1.46201,3.69969 -1.46201,3.69969 -0.8391,4.9537 -0.95184,8.97151 -0.95184,8.97151 -0.79549,5.71276 -1.1586,7.55271 -1.1586,7.55271 -1.26386,3.47166 -2.19295,5.13747 -2.19295,5.13747 -2.41692,2.29138 -3.60745,3.00736 -3.60745,3.00736 -3.13091,1.35336 -5.15871,1.791 -5.15871,1.791 -5.83664,0.85869 -9.79136,0.97122 -9.79136,0.97122 -4.72236,0.73101 -6.01996,1.02483 -6.01996,1.02483 -2.14885,0.779 -2.95922,1.24169 -2.95922,1.24169 -1.73921,1.51073 -2.55079,2.75354 -2.55079,2.75354 -1.75542,4.56905 -2.18247,8.70783 -2.18247,8.70783 -0.12671,6.85743 -0.0935,9.25191 -0.0594,11.67225 l 5e-4,0.0359 z"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path8-2"
|
||||
sodipodi:nodetypes="cssssssssssssssssccscccccccccccccccscc" />
|
||||
<path
|
||||
d="m 315.53867,982.46676 c 0.56866,-3.26382 0.71472,-6.69801 1.04975,-9.79336 0.26711,-2.46787 0.66196,-4.70591 1.31544,-6.35074 0.42497,-1.06965 0.92892,-1.86275 1.55021,-2.45158 0.6213,-0.58883 1.48201,-1.08823 2.60085,-1.49345 1.11884,-0.40523 2.47943,-0.70639 3.98056,-0.93114 3.33585,-0.49945 7.32241,-0.60831 11.10357,-1.1895 0.24338,-0.0374 0.48612,-0.0768 0.72804,-0.11853 V 954.947 c -0.32137,0.0671 -0.65252,0.12937 -0.99227,0.18692 -3.27703,0.55509 -7.29483,0.66783 -11.13625,1.20274 -1.87134,0.26058 -3.7113,0.6237 -5.44713,1.25562 -1.73583,0.63193 -3.40164,1.56103 -4.72047,2.95211 -0.97255,1.02583 -1.68853,2.21637 -2.22915,3.46706 -0.81273,1.88021 -1.25037,3.90801 -1.5549,5.97793 -0.55416,3.76672 -0.66669,7.72145 -1.17617,11.01266 -0.0784,0.50627 -0.16578,0.99584 -0.26328,1.46472 z"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path10-3"
|
||||
sodipodi:nodetypes="cssssssccssssssscc" />
|
||||
<path
|
||||
id="path13"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 242.24433,914.36362 c 5.93188,-1.18366 12.18304,-0.64248 17.9227,-2.77546 2.99045,-1.06215 5.46813,-3.40375 6.63316,-6.36102 1.97348,-4.85312 1.85987,-10.18795 2.48623,-15.30992 0.11991,-1.02993 0.26559,-2.05784 0.47767,-3.07322 h -5.19146 c -0.215,1.24914 -0.36892,2.50793 -0.49786,3.76858 -0.49119,4.23086 -0.41243,8.62265 -1.97915,12.64584 -0.67781,1.8559 -2.3263,3.16931 -4.18514,3.72589 -5.06962,1.59358 -10.4786,1.23093 -15.66615,2.18811 z"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
d="m 242.24433,914.36362 z m 8.71065,-0.88529 z m 12.18589,-3.36566 z m 4.97298,-9.26881 z"
|
||||
style="fill:#009688;fill-opacity:1;stroke:#000000;stroke-width:0.09540093;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path21-2" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 9 KiB |
|
@ -67,11 +67,13 @@
|
|||
"travel_acceleration": "2500",
|
||||
"travel_jerk": "7",
|
||||
"travel_speed": "250",
|
||||
"version": "0.0.0.0",
|
||||
"version": "0.0.0.1",
|
||||
"wipe_on_loops": "1",
|
||||
"wipe_speed": "30",
|
||||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0",
|
||||
"instantiation": "true",
|
||||
"skin_infill_line_width": "1.2",
|
||||
"skeleton_infill_line_width": "1.2",
|
||||
"compatible_printers": ["Ginger G1 1.2 nozzle"]
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
"travel_acceleration": "2500",
|
||||
"travel_jerk": "7",
|
||||
"travel_speed": "250",
|
||||
"version": "0.0.0.0",
|
||||
"version": "0.0.0.1",
|
||||
"wall_generator": "arachne",
|
||||
"wall_loops": "1",
|
||||
"wipe_on_loops": "1",
|
||||
|
@ -64,5 +64,7 @@
|
|||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0",
|
||||
"instantiation": "true",
|
||||
"skin_infill_line_width": "3.0",
|
||||
"skeleton_infill_line_width": "3.0",
|
||||
"compatible_printers": ["Ginger G1 3.0 nozzle"]
|
||||
}
|
||||
|
|
|
@ -63,12 +63,14 @@
|
|||
"travel_acceleration": "2500",
|
||||
"travel_jerk": "7",
|
||||
"travel_speed": "250",
|
||||
"version": "0.0.0.0",
|
||||
"version": "0.0.0.1",
|
||||
"wall_loops": "1",
|
||||
"wipe_on_loops": "1",
|
||||
"wipe_speed": "40",
|
||||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0",
|
||||
"instantiation": "true",
|
||||
"skin_infill_line_width": "3.0",
|
||||
"skeleton_infill_line_width": "3.0",
|
||||
"compatible_printers": ["Ginger G1 3.0 nozzle"]
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
"travel_acceleration": "2500",
|
||||
"travel_jerk": "7",
|
||||
"travel_speed": "250",
|
||||
"version": "0.0.0.0",
|
||||
"version": "0.0.0.1",
|
||||
"wall_generator": "arachne",
|
||||
"wall_loops": "1",
|
||||
"wipe_on_loops": "1",
|
||||
|
@ -71,5 +71,7 @@
|
|||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0",
|
||||
"instantiation": "true",
|
||||
"skin_infill_line_width": "5.0",
|
||||
"skeleton_infill_line_width": "5.0",
|
||||
"compatible_printers": ["Ginger G1 5.0 nozzle"]
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
"travel_acceleration": "2500",
|
||||
"travel_jerk": "7",
|
||||
"travel_speed": "250",
|
||||
"version": "0.0.0.0",
|
||||
"version": "0.0.0.1",
|
||||
"wall_generator": "arachne",
|
||||
"wall_loops": "1",
|
||||
"wipe_on_loops": "1",
|
||||
|
@ -69,5 +69,7 @@
|
|||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0",
|
||||
"instantiation": "true",
|
||||
"skin_infill_line_width": "8.0",
|
||||
"skeleton_infill_line_width": "8.0",
|
||||
"compatible_printers": ["Ginger G1 8.0 nozzle"]
|
||||
}
|
||||
|
|
|
@ -5986,6 +5986,11 @@ bool CLI::setup(int argc, char **argv)
|
|||
// The resources are packed to 'resources'
|
||||
// Path from Slic3r binary to resources:
|
||||
boost::filesystem::path path_resources = boost::filesystem::canonical(path_to_binary).parent_path().parent_path() / "resources";
|
||||
//Orca: for build systems that support multiple configurations, the binary may be in a subdirectory like "bin/Release" or "bin/Debug".
|
||||
if( !boost::filesystem::exists(path_resources)) {
|
||||
// If the resources directory does not exist, try to use the resources directory
|
||||
path_resources = boost::filesystem::canonical(path_to_binary).parent_path().parent_path().parent_path() / "resources";
|
||||
}
|
||||
#endif
|
||||
|
||||
set_resources_dir(path_resources.string());
|
||||
|
|
|
@ -3,9 +3,6 @@ project(libslic3r)
|
|||
|
||||
include(PrecompiledHeader)
|
||||
|
||||
string(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S)
|
||||
set(SLIC3R_BUILD_TIME ${COMPILE_TIME})
|
||||
|
||||
if(NOT DEFINED ORCA_CHECK_GCODE_PLACEHOLDERS)
|
||||
set(ORCA_CHECK_GCODE_PLACEHOLDERS "0")
|
||||
endif()
|
||||
|
|
|
@ -41,6 +41,8 @@ struct SurfaceFillParams
|
|||
|
||||
// FillParams
|
||||
float density = 0.f;
|
||||
// Infill line multiplier count.
|
||||
int multiline = 1;
|
||||
// Don't adjust spacing to fill the space evenly.
|
||||
// bool dont_adjust = false;
|
||||
// Length of the infill anchor along the perimeter line.
|
||||
|
@ -88,6 +90,7 @@ struct SurfaceFillParams
|
|||
RETURN_COMPARE_NON_EQUAL(overlap);
|
||||
RETURN_COMPARE_NON_EQUAL(angle);
|
||||
RETURN_COMPARE_NON_EQUAL(density);
|
||||
RETURN_COMPARE_NON_EQUAL(multiline);
|
||||
// RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_adjust);
|
||||
RETURN_COMPARE_NON_EQUAL(anchor_length);
|
||||
RETURN_COMPARE_NON_EQUAL(anchor_length_max);
|
||||
|
@ -117,6 +120,7 @@ struct SurfaceFillParams
|
|||
this->bridge == rhs.bridge &&
|
||||
this->bridge_angle == rhs.bridge_angle &&
|
||||
this->density == rhs.density &&
|
||||
this->multiline == rhs.multiline &&
|
||||
// this->dont_adjust == rhs.dont_adjust &&
|
||||
this->anchor_length == rhs.anchor_length &&
|
||||
this->anchor_length_max == rhs.anchor_length_max &&
|
||||
|
@ -647,6 +651,7 @@ std::vector<SurfaceFill> group_fills(const Layer &layer, LockRegionParam &lock_p
|
|||
params.extruder = layerm.region().extruder(extrusion_role);
|
||||
params.pattern = region_config.sparse_infill_pattern.value;
|
||||
params.density = float(region_config.sparse_infill_density);
|
||||
params.multiline = int(region_config.fill_multiline);
|
||||
params.lattice_angle_1 = region_config.lattice_angle_1;
|
||||
params.lattice_angle_2 = region_config.lattice_angle_2;
|
||||
params.infill_overhang_angle = region_config.infill_overhang_angle;
|
||||
|
@ -1023,6 +1028,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
|
|||
// apply half spacing using this flow's own spacing and generate infill
|
||||
FillParams params;
|
||||
params.density = float(0.01 * surface_fill.params.density);
|
||||
params.multiline = surface_fill.params.multiline;
|
||||
params.dont_adjust = false; // surface_fill.params.dont_adjust;
|
||||
params.anchor_length = surface_fill.params.anchor_length;
|
||||
params.anchor_length_max = surface_fill.params.anchor_length_max;
|
||||
|
@ -1199,6 +1205,7 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc
|
|||
params.lattice_angle_1 = surface_fill.params.lattice_angle_1;
|
||||
params.lattice_angle_2 = surface_fill.params.lattice_angle_2;
|
||||
params.infill_overhang_angle = surface_fill.params.infill_overhang_angle;
|
||||
params.multiline = surface_fill.params.multiline;
|
||||
|
||||
for (ExPolygon &expoly : surface_fill.expolygons) {
|
||||
// Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "../ClipperUtils.hpp"
|
||||
#include "../ShortestPath.hpp"
|
||||
#include "../Surface.hpp"
|
||||
|
||||
#include "FillBase.hpp"
|
||||
#include "Fill3DHoneycomb.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
@ -212,7 +212,7 @@ void Fill3DHoneycomb::_fill_surface_single(
|
|||
// = 4 * integrate(func=4*x(sqrt(2) - 1) + 1, from=0, to=0.25)
|
||||
// = (sqrt(2) + 1) / 2 [... I think]
|
||||
// make a first guess at the preferred grid Size
|
||||
coordf_t gridSize = (scale_(this->spacing) * ((zScale + 1.) / 2.) / params.density);
|
||||
coordf_t gridSize = (scale_(this->spacing) * ((zScale + 1.) / 2.) * params.multiline / params.density);
|
||||
|
||||
// This density calculation is incorrect for many values > 25%, possibly
|
||||
// due to quantisation error, so this value is used as a first guess, then the
|
||||
|
@ -228,7 +228,7 @@ void Fill3DHoneycomb::_fill_surface_single(
|
|||
layersPerModule = 2;
|
||||
// re-adjust the grid size for a partial octahedral path
|
||||
// (scale of 1.1 guessed based on modeling)
|
||||
gridSize = (scale_(this->spacing) * 1.1 / params.density);
|
||||
gridSize = (scale_(this->spacing) * 1.1 * params.multiline / params.density);
|
||||
// re-adjust zScale to make layering consistent
|
||||
zScale = (gridSize * 2) / (layersPerModule * layerHeight);
|
||||
} else {
|
||||
|
@ -238,7 +238,7 @@ void Fill3DHoneycomb::_fill_surface_single(
|
|||
// re-adjust zScale to make layering consistent
|
||||
zScale = (gridSize * 2) / (layersPerModule * layerHeight);
|
||||
// re-adjust the grid size to account for the new zScale
|
||||
gridSize = (scale_(this->spacing) * ((zScale + 1.) / 2.) / params.density);
|
||||
gridSize = (scale_(this->spacing) * ((zScale + 1.) / 2.) * params.multiline / params.density);
|
||||
// re-calculate layersPerModule and zScale
|
||||
layersPerModule = floor((gridSize * 2) / (zScale * layerHeight) + 0.05);
|
||||
if(layersPerModule < 2){
|
||||
|
@ -264,11 +264,24 @@ void Fill3DHoneycomb::_fill_surface_single(
|
|||
// move pattern in place
|
||||
for (Polyline &pl : polylines){
|
||||
pl.translate(bb.min);
|
||||
pl.simplify(5 * spacing); // simplify to 5x line width
|
||||
}
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(polylines, params, spacing);
|
||||
|
||||
// clip pattern to boundaries, chain the clipped polylines
|
||||
polylines = intersection_pl(polylines, to_polygons(expolygon));
|
||||
|
||||
if (! polylines.empty()) {
|
||||
// Remove very small bits, but be careful to not remove infill lines connecting thin walls!
|
||||
// The infill perimeter lines should be separated by around a single infill line width.
|
||||
const double minlength = scale_(0.8 * this->spacing);
|
||||
polylines.erase(
|
||||
std::remove_if(polylines.begin(), polylines.end(), [minlength](const Polyline &pl) { return pl.length() < minlength; }),
|
||||
polylines.end());
|
||||
}
|
||||
|
||||
// copy from fliplines
|
||||
if (!polylines.empty()) {
|
||||
int infill_start_idx = polylines_out.size(); // only rotate what belongs to us.
|
||||
|
|
|
@ -1369,6 +1369,10 @@ void Filler::_fill_surface_single(
|
|||
// Convert lines to polylines.
|
||||
all_polylines.reserve(lines.size());
|
||||
std::transform(lines.begin(), lines.end(), std::back_inserter(all_polylines), [](const Line& l) { return Polyline{ l.a, l.b }; });
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(all_polylines, params, spacing);
|
||||
|
||||
// Crop all polylines
|
||||
all_polylines = intersection_pl(std::move(all_polylines), expolygon);
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <stdio.h>
|
||||
#include <numeric>
|
||||
|
||||
#include <cmath>
|
||||
#include "../ClipperUtils.hpp"
|
||||
#include "../EdgeGrid.hpp"
|
||||
#include "../Geometry.hpp"
|
||||
|
@ -25,7 +26,6 @@
|
|||
// BBS: new infill pattern header
|
||||
#include "FillConcentricInternal.hpp"
|
||||
#include "FillCrossHatch.hpp"
|
||||
|
||||
// #define INFILL_DEBUG_OUTPUT
|
||||
|
||||
namespace Slic3r {
|
||||
|
@ -190,22 +190,22 @@ void Fill::fill_surface_extrusion(const Surface* surface, const FillParams& para
|
|||
// Orca: Dedicated function to calculate gap fill lines for the provided surface, according to the print object parameters
|
||||
// and append them to the out ExtrusionEntityCollection.
|
||||
void Fill::_create_gap_fill(const Surface* surface, const FillParams& params, ExtrusionEntityCollection* out){
|
||||
|
||||
|
||||
//Orca: just to be safe, check against null pointer for the print object config and if NULL return.
|
||||
if (this->print_object_config == nullptr) return;
|
||||
|
||||
|
||||
// Orca: Enable gap fill as per the user preference. Return early if gap fill is to not be applied.
|
||||
if ((this->print_object_config->gap_fill_target.value == gftNowhere) ||
|
||||
(surface->surface_type == stInternalSolid && this->print_object_config->gap_fill_target.value != gftEverywhere))
|
||||
return;
|
||||
|
||||
|
||||
Flow new_flow = params.flow;
|
||||
ExPolygons unextruded_areas;
|
||||
unextruded_areas = diff_ex(this->no_overlap_expolygons, union_ex(out->polygons_covered_by_spacing(10)));
|
||||
ExPolygons gapfill_areas = union_ex(unextruded_areas);
|
||||
if (!this->no_overlap_expolygons.empty())
|
||||
gapfill_areas = intersection_ex(gapfill_areas, this->no_overlap_expolygons);
|
||||
|
||||
|
||||
if (gapfill_areas.size() > 0 && params.density >= 1) {
|
||||
double min = 0.2 * new_flow.scaled_spacing() * (1 - INSET_OVERLAP_TOLERANCE);
|
||||
double max = 2. * new_flow.scaled_spacing();
|
||||
|
@ -222,20 +222,20 @@ void Fill::_create_gap_fill(const Surface* surface, const FillParams& params, Ex
|
|||
std::vector<Points::size_type> order2 = chain_points(ordering_points);
|
||||
for (size_t i : order2)
|
||||
gaps_ex_sorted.emplace_back(std::move(gaps_ex[i]));
|
||||
|
||||
|
||||
ThickPolylines polylines;
|
||||
for (ExPolygon& ex : gaps_ex_sorted) {
|
||||
//BBS: Use DP simplify to avoid duplicated points and accelerate medial-axis calculation as well.
|
||||
ex.douglas_peucker(SCALED_RESOLUTION * 0.1);
|
||||
ex.medial_axis(min, max, &polylines);
|
||||
}
|
||||
|
||||
|
||||
if (!polylines.empty() && !is_bridge(params.extrusion_role)) {
|
||||
polylines.erase(std::remove_if(polylines.begin(), polylines.end(),
|
||||
[&](const ThickPolyline& p) {
|
||||
return p.length() < scale_(params.config->filter_out_gap_fill.value);
|
||||
}), polylines.end());
|
||||
|
||||
|
||||
ExtrusionEntityCollection gap_fill;
|
||||
variable_width(polylines, erGapFill, params.flow, gap_fill.entities);
|
||||
auto gap = std::move(gap_fill.entities);
|
||||
|
@ -2696,4 +2696,55 @@ void Fill::connect_base_support(Polylines &&infill_ordered, const Polygons &boun
|
|||
connect_base_support(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params);
|
||||
}
|
||||
|
||||
//Fill Multiline
|
||||
void multiline_fill(Polylines& polylines, const FillParams& params, float spacing)
|
||||
{
|
||||
if (params.multiline > 1) {
|
||||
const int n_lines = params.multiline;
|
||||
const int n_polylines = static_cast<int>(polylines.size());
|
||||
Polylines all_polylines;
|
||||
all_polylines.reserve(n_lines * n_polylines);
|
||||
|
||||
const float center = (n_lines - 1) / 2.0f;
|
||||
|
||||
for (int line = 0; line < n_lines; ++line) {
|
||||
float offset = (static_cast<float>(line) - center) * spacing;
|
||||
|
||||
for (const Polyline& pl : polylines) {
|
||||
const size_t n = pl.points.size();
|
||||
if (n < 2) {
|
||||
all_polylines.emplace_back(pl);
|
||||
continue;
|
||||
}
|
||||
|
||||
Points new_points;
|
||||
new_points.reserve(n);
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
Vec2f tangent;
|
||||
if (i == 0)
|
||||
tangent = Vec2f(pl.points[1].x() - pl.points[0].x(), pl.points[1].y() - pl.points[0].y());
|
||||
else if (i == n - 1)
|
||||
tangent = Vec2f(pl.points[n - 1].x() - pl.points[n - 2].x(), pl.points[n - 1].y() - pl.points[n - 2].y());
|
||||
else
|
||||
tangent = Vec2f(pl.points[i + 1].x() - pl.points[i - 1].x(), pl.points[i + 1].y() - pl.points[i - 1].y());
|
||||
|
||||
float len = std::hypot(tangent.x(), tangent.y());
|
||||
if (len == 0)
|
||||
len = 1.0f;
|
||||
tangent /= len;
|
||||
Vec2f normal(-tangent.y(), tangent.x());
|
||||
|
||||
Point p = pl.points[i];
|
||||
p.x() += scale_(normal.x() * offset);
|
||||
p.y() += scale_(normal.y() * offset);
|
||||
new_points.push_back(p);
|
||||
}
|
||||
|
||||
all_polylines.emplace_back(std::move(new_points));
|
||||
}
|
||||
}
|
||||
polylines = std::move(all_polylines);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Slic3r
|
||||
|
|
|
@ -53,6 +53,7 @@ struct FillParams
|
|||
|
||||
// Fill density, fraction in <0, 1>
|
||||
float density { 0.f };
|
||||
int multiline{1};
|
||||
|
||||
// Length of an infill anchor along the perimeter.
|
||||
// 1000mm is roughly the maximum length line that fits into a 32bit coord_t.
|
||||
|
@ -223,7 +224,8 @@ public:
|
|||
|
||||
static coord_t _adjust_solid_spacing(const coord_t width, const coord_t distance);
|
||||
};
|
||||
|
||||
//Fill Multiline
|
||||
void multiline_fill(Polylines& polylines, const FillParams& params, float spacing);
|
||||
} // namespace Slic3r
|
||||
|
||||
#endif // slic3r_FillBase_hpp_
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "../ShortestPath.hpp"
|
||||
#include "../Surface.hpp"
|
||||
#include <cmath>
|
||||
|
||||
#include "FillBase.hpp"
|
||||
#include "FillCrossHatch.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
@ -186,7 +186,8 @@ void FillCrossHatch ::_fill_surface_single(
|
|||
BoundingBox bb = expolygon.contour.bounding_box();
|
||||
|
||||
// linespace modifier
|
||||
coord_t line_spacing = coord_t(scale_(this->spacing) / params.density);
|
||||
double density_adjusted = params.density / params.multiline;
|
||||
coord_t line_spacing = coord_t(scale_(this->spacing) / density_adjusted);
|
||||
|
||||
// reduce density
|
||||
if (params.density < 0.999) line_spacing *= 1.08;
|
||||
|
@ -204,6 +205,9 @@ void FillCrossHatch ::_fill_surface_single(
|
|||
// shift the pattern to the actual space
|
||||
for (Polyline &pl : polylines) { pl.translate(bb.min); }
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(polylines, params, spacing);
|
||||
|
||||
polylines = intersection_pl(polylines, to_polygons(expolygon));
|
||||
|
||||
// --- remove small remains from gyroid infill
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include <cmath>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
#include "FillBase.hpp"
|
||||
#include "FillGyroid.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
@ -149,10 +149,10 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
|
|||
constexpr double FillGyroid::PatternTolerance;
|
||||
|
||||
void FillGyroid::_fill_surface_single(
|
||||
const FillParams ¶ms,
|
||||
const FillParams ¶ms,
|
||||
unsigned int thickness_layers,
|
||||
const std::pair<float, Point> &direction,
|
||||
ExPolygon expolygon,
|
||||
const std::pair<float, Point> &direction,
|
||||
ExPolygon expolygon,
|
||||
Polylines &polylines_out)
|
||||
{
|
||||
auto infill_angle = float(this->angle + (CorrectionAngle * 2*M_PI) / 360.);
|
||||
|
@ -161,7 +161,7 @@ void FillGyroid::_fill_surface_single(
|
|||
|
||||
BoundingBox bb = expolygon.contour.bounding_box();
|
||||
// Density adjusted to have a good %of weight.
|
||||
double density_adjusted = std::max(0., params.density * DensityAdjust);
|
||||
double density_adjusted = std::max(0., params.density * DensityAdjust / params.multiline);
|
||||
// Distance between the gyroid waves in scaled coordinates.
|
||||
coord_t distance = coord_t(scale_(this->spacing) / density_adjusted);
|
||||
|
||||
|
@ -184,6 +184,9 @@ void FillGyroid::_fill_surface_single(
|
|||
for (Polyline &pl : polylines)
|
||||
pl.translate(bb.min);
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(polylines, params, spacing);
|
||||
|
||||
polylines = intersection_pl(polylines, expolygon);
|
||||
|
||||
if (! polylines.empty()) {
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
namespace Slic3r {
|
||||
|
||||
void FillHoneycomb::_fill_surface_single(
|
||||
const FillParams ¶ms,
|
||||
const FillParams ¶ms,
|
||||
unsigned int thickness_layers,
|
||||
const std::pair<float, Point> &direction,
|
||||
const std::pair<float, Point> &direction,
|
||||
ExPolygon expolygon,
|
||||
Polylines &polylines_out)
|
||||
{
|
||||
|
@ -19,7 +19,7 @@ void FillHoneycomb::_fill_surface_single(
|
|||
if (it_m == this->cache.end()) {
|
||||
it_m = this->cache.insert(it_m, std::pair<CacheID, CacheData>(cache_id, CacheData()));
|
||||
CacheData &m = it_m->second;
|
||||
coord_t min_spacing = coord_t(scale_(this->spacing));
|
||||
coord_t min_spacing = coord_t(scale_(this->spacing)) * params.multiline;
|
||||
m.distance = coord_t(min_spacing / params.density);
|
||||
m.hex_side = coord_t(m.distance / (sqrt(3)/2));
|
||||
m.hex_width = m.distance * 2; // $m->{hex_width} == $m->{hex_side} * sqrt(3);
|
||||
|
@ -36,14 +36,14 @@ void FillHoneycomb::_fill_surface_single(
|
|||
{
|
||||
// adjust actual bounding box to the nearest multiple of our hex pattern
|
||||
// and align it so that it matches across layers
|
||||
|
||||
|
||||
BoundingBox bounding_box = expolygon.contour.bounding_box();
|
||||
{
|
||||
// rotate bounding box according to infill direction
|
||||
Polygon bb_polygon = bounding_box.polygon();
|
||||
bb_polygon.rotate(direction.first, m.hex_center);
|
||||
bounding_box = bb_polygon.bounding_box();
|
||||
|
||||
|
||||
// extend bounding box so that our pattern will be aligned with other layers
|
||||
// $bounding_box->[X1] and [Y1] represent the displacement between new bounding box offset and old one
|
||||
// The infill is not aligned to the object bounding box, but to a world coordinate system. Supposedly good enough.
|
||||
|
@ -69,10 +69,13 @@ void FillHoneycomb::_fill_surface_single(
|
|||
x += m.distance;
|
||||
}
|
||||
p.rotate(-direction.first, m.hex_center);
|
||||
p.simplify(5 * spacing); // simplify to 5x line width
|
||||
all_polylines.push_back(p);
|
||||
}
|
||||
}
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(all_polylines, params, 1.1 * spacing);
|
||||
|
||||
all_polylines = intersection_pl(std::move(all_polylines), expolygon);
|
||||
chain_or_connect_infill(std::move(all_polylines), expolygon, polylines_out, this->spacing, params);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "../Print.hpp"
|
||||
#include "../ShortestPath.hpp"
|
||||
|
||||
#include "FillBase.hpp"
|
||||
#include "FillLightning.hpp"
|
||||
#include "Lightning/Generator.hpp"
|
||||
|
||||
|
@ -16,6 +16,10 @@ void Filler::_fill_surface_single(
|
|||
const Layer &layer = generator->getTreesForLayer(this->layer_id);
|
||||
Polylines fill_lines = layer.convertToLines(to_polygons(expolygon), scaled<coord_t>(0.5 * this->spacing - this->overlap));
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(fill_lines, params, spacing);
|
||||
|
||||
|
||||
chain_or_connect_infill(std::move(fill_lines), expolygon, polylines_out, this->spacing, params);
|
||||
}
|
||||
|
||||
|
|
|
@ -2956,11 +2956,49 @@ void make_fill_lines(const ExPolygonWithOffset &poly_with_offset, Point refpt, d
|
|||
}
|
||||
}
|
||||
|
||||
// Remove lines that are too close to each other.
|
||||
static inline void remove_overlapped(Polylines& polylines, coord_t line_width){
|
||||
const coord_t tolerance = coord_t(0.75 * line_width);
|
||||
Polylines cleaned;
|
||||
cleaned.reserve(polylines.size());
|
||||
|
||||
auto midpoint = [](const Polyline& line) -> Point {
|
||||
const Point& p1 = line.first_point();
|
||||
const Point& p2 = line.last_point();
|
||||
return Point((p1.x() + p2.x()) / 2, (p1.y() + p2.y()) / 2);
|
||||
};
|
||||
|
||||
for (const Polyline& line : polylines) {
|
||||
Point mp1 = midpoint(line);
|
||||
bool overlapped = false;
|
||||
|
||||
for (const Polyline& existing : cleaned) {
|
||||
Point mp2 = midpoint(existing);
|
||||
|
||||
// Early skip: if they're far apart on one axis, skip
|
||||
if (std::abs(mp1.y() - mp2.y()) > tolerance &&
|
||||
std::abs(mp1.x() - mp2.x()) > tolerance)
|
||||
continue;
|
||||
|
||||
if (mp1.distance_to(mp2) < tolerance) {
|
||||
overlapped = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!overlapped)
|
||||
cleaned.push_back(line);
|
||||
}
|
||||
|
||||
polylines = std::move(cleaned);
|
||||
}
|
||||
|
||||
bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list<SweepParams> &sweep_params, Polylines &polylines_out)
|
||||
{
|
||||
assert(sweep_params.size() >= 1);
|
||||
assert(! params.full_infill());
|
||||
assert(!params.full_infill());
|
||||
params.density /= double(sweep_params.size());
|
||||
int n_multilines = params.multiline;
|
||||
assert(params.density > 0.0001f && params.density <= 1.f);
|
||||
|
||||
ExPolygonWithOffset poly_with_offset_base(surface->expolygon, 0, float(scale_(this->overlap - 0.5 * this->spacing)));
|
||||
|
@ -2970,16 +3008,28 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
|
|||
|
||||
Polylines fill_lines;
|
||||
coord_t line_width = coord_t(scale_(this->spacing));
|
||||
coord_t line_spacing = coord_t(scale_(this->spacing) / params.density);
|
||||
coord_t line_spacing = coord_t(scale_(this->spacing) * params.multiline / params.density);
|
||||
std::pair<float, Point> rotate_vector = this->_infill_direction(surface);
|
||||
for (const SweepParams &sweep : sweep_params) {
|
||||
// Rotate polygons so that we can work with vertical lines here
|
||||
float angle = rotate_vector.first + sweep.angle_base;
|
||||
make_fill_lines(ExPolygonWithOffset(poly_with_offset_base, - angle), rotate_vector.second.rotated(-angle), angle, line_width + coord_t(SCALED_EPSILON), line_spacing, coord_t(scale_(sweep.pattern_shift)), fill_lines);
|
||||
//Fill Multiline
|
||||
for (int i = 0; i < n_multilines; ++i) {
|
||||
coord_t group_offset = i * line_spacing;
|
||||
coord_t internal_offset = (i - (n_multilines - 1) / 2.0f) * line_width;
|
||||
coord_t total_offset = group_offset + internal_offset;
|
||||
coord_t pattern_shift = scale_(sweep.pattern_shift + unscale_(total_offset));
|
||||
|
||||
make_fill_lines(ExPolygonWithOffset(poly_with_offset_base, -angle), rotate_vector.second.rotated(-angle), angle,
|
||||
line_width + coord_t(SCALED_EPSILON), line_spacing, pattern_shift, fill_lines);
|
||||
}
|
||||
}
|
||||
|
||||
if ((params.pattern == ip2DLattice || params.pattern == ip2DHoneycomb ) && params.multiline >1 )
|
||||
remove_overlapped(fill_lines, line_width);
|
||||
|
||||
if (!fill_lines.empty()) {
|
||||
if (params.dont_connect()) {
|
||||
if (params.dont_connect()) {
|
||||
if (fill_lines.size() > 1)
|
||||
fill_lines = chain_polylines(std::move(fill_lines));
|
||||
append(polylines_out, std::move(fill_lines));
|
||||
|
@ -3057,8 +3107,7 @@ Polylines Fill2DLattice::fill_surface(const Surface *surface, const FillParams &
|
|||
return polylines_out;
|
||||
}
|
||||
|
||||
Polylines FillTriangles::fill_surface(const Surface *surface, const FillParams ¶ms)
|
||||
{
|
||||
Polylines FillTriangles::fill_surface(const Surface *surface, const FillParams ¶ms){
|
||||
Polylines polylines_out;
|
||||
if (! this->fill_surface_by_multilines(
|
||||
surface, params,
|
||||
|
@ -3073,7 +3122,7 @@ Polylines FillStars::fill_surface(const Surface *surface, const FillParams ¶
|
|||
Polylines polylines_out;
|
||||
if (! this->fill_surface_by_multilines(
|
||||
surface, params,
|
||||
{ { 0.f, 0.f }, { float(M_PI / 3.), 0.f }, { float(2. * M_PI / 3.), float((3./2.) * this->spacing / params.density) } },
|
||||
{ { 0.f, 0.f }, { float(M_PI / 3.), 0.f }, { float(2. * M_PI / 3.), float((3./2.) * this->spacing * params.multiline / params.density) } },
|
||||
polylines_out))
|
||||
BOOST_LOG_TRIVIAL(error) << "FillStars::fill_surface() failed to fill a region.";
|
||||
return polylines_out;
|
||||
|
@ -3094,7 +3143,6 @@ Polylines FillCubic::fill_surface(const Surface *surface, const FillParams ¶
|
|||
Polylines FillQuarterCubic::fill_surface(const Surface* surface, const FillParams& params)
|
||||
{
|
||||
using namespace boost::math::float_constants;
|
||||
|
||||
Polylines polylines_out;
|
||||
|
||||
coord_t line_width = coord_t(scale_(this->spacing));
|
||||
|
@ -3139,7 +3187,7 @@ Polylines Fill2DHoneycomb::fill_surface(const Surface *surface, const FillParams
|
|||
using namespace boost::math::float_constants;
|
||||
|
||||
// lets begin calculating some base properties of the honeycomb pattern
|
||||
const float half_horizontal_period = .5f * (1*(2/3.f) + 2*(1/3.f)) * float(spacing) / params.density;
|
||||
const float half_horizontal_period = .5f * (1*(2/3.f) + 2*(1/3.f)) * float(spacing) * params.multiline / params.density;
|
||||
const float vertical_period = 3 * half_horizontal_period / tanf(degree * float(params.infill_overhang_angle));
|
||||
|
||||
// we want to align the base pattern with its knot on height 0
|
||||
|
|
|
@ -55,8 +55,9 @@ static Polylines make_waves(double gridZ, double density_adjusted, double line_s
|
|||
std::vector<std::pair<double,double>> wave;
|
||||
{//fill one wave
|
||||
const auto v=[&](double u){return acos(a/b*cos(u));};
|
||||
for(int c=0;c<=4;++c){
|
||||
const double u=minU+2*M_PI*c/4;
|
||||
const int initialSegments=16;
|
||||
for(int c=0;c<=initialSegments;++c){
|
||||
const double u=minU+2*M_PI*c/initialSegments;
|
||||
wave.emplace_back(u,v(u));
|
||||
}
|
||||
{//refine
|
||||
|
@ -110,7 +111,7 @@ void FillTpmsD::_fill_surface_single(
|
|||
|
||||
BoundingBox bb = expolygon.contour.bounding_box();
|
||||
// Density adjusted to have a good %of weight.
|
||||
double density_adjusted = std::max(0., params.density * DensityAdjust);
|
||||
double density_adjusted = std::max(0., params.density * DensityAdjust / params.multiline);
|
||||
// Distance between the gyroid waves in scaled coordinates.
|
||||
coord_t distance = coord_t(scale_(this->spacing) / density_adjusted);
|
||||
|
||||
|
@ -129,6 +130,8 @@ void FillTpmsD::_fill_surface_single(
|
|||
for (Polyline &pl : polylines)
|
||||
pl.translate(bb.min);
|
||||
|
||||
// Apply multiline offset if needed
|
||||
multiline_fill(polylines, params, spacing);
|
||||
|
||||
polylines = intersection_pl(polylines, expolygon);
|
||||
|
||||
|
|
|
@ -785,7 +785,7 @@ static std::vector<std::string> s_Preset_print_options {
|
|||
"layer_height", "initial_layer_print_height", "wall_loops", "alternate_extra_wall", "slice_closing_radius", "spiral_mode", "spiral_mode_smooth", "spiral_mode_max_xy_smoothing", "spiral_starting_flow_ratio", "spiral_finishing_flow_ratio", "slicing_mode",
|
||||
"top_shell_layers", "top_shell_thickness", "top_surface_density", "bottom_surface_density", "bottom_shell_layers", "bottom_shell_thickness",
|
||||
"extra_perimeters_on_overhangs", "ensure_vertical_shell_thickness", "reduce_crossing_wall", "detect_thin_wall", "detect_overhang_wall", "overhang_reverse", "overhang_reverse_threshold","overhang_reverse_internal_only", "wall_direction",
|
||||
"seam_position", "staggered_inner_seams", "wall_sequence", "is_infill_first", "sparse_infill_density", "sparse_infill_pattern", "lattice_angle_1", "lattice_angle_2", "infill_overhang_angle", "top_surface_pattern", "bottom_surface_pattern",
|
||||
"seam_position", "staggered_inner_seams", "wall_sequence", "is_infill_first", "sparse_infill_density","fill_multiline", "sparse_infill_pattern", "lattice_angle_1", "lattice_angle_2", "infill_overhang_angle", "top_surface_pattern", "bottom_surface_pattern",
|
||||
"infill_direction", "solid_infill_direction", "counterbore_hole_bridging","infill_shift_step", "sparse_infill_rotate_template", "solid_infill_rotate_template", "symmetric_infill_y_axis","skeleton_infill_density", "infill_lock_depth", "skin_infill_depth", "skin_infill_density",
|
||||
"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",
|
||||
|
|
|
@ -2361,6 +2361,14 @@ void PrintConfigDef::init_fff_params()
|
|||
def->max = 100;
|
||||
def->set_default_value(new ConfigOptionPercent(20));
|
||||
|
||||
// Infill multiline
|
||||
def = this->add("fill_multiline", coInt);
|
||||
def->label = L("Fill Multiline");
|
||||
def->tooltip = L("Using multiple lines for the infill pattern, if supported by infill pattern.");
|
||||
def->min = 1;
|
||||
def->max = 5; // Maximum number of lines for infill pattern
|
||||
def->set_default_value(new ConfigOptionInt(1));
|
||||
|
||||
def = this->add("sparse_infill_pattern", coEnum);
|
||||
def->label = L("Sparse infill pattern");
|
||||
def->category = L("Strength");
|
||||
|
@ -3119,7 +3127,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->tooltip = L("This parameter adds a rotation of sparse infill direction to each layer according to the specified template. "
|
||||
"The template is a comma-separated list of angles in degrees, e.g. '0,90'. "
|
||||
"The first angle is applied to the first layer, the second angle to the second layer, and so on. "
|
||||
"If there are more layers than angles, the angles will be repeated. Note that not all all sparse infill patterns support rotation.");
|
||||
"If there are more layers than angles, the angles will be repeated. Note that not all sparse infill patterns support rotation.");
|
||||
def->sidetext = L("°");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionString("0,90"));
|
||||
|
@ -3131,7 +3139,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->tooltip = L("This parameter adds a rotation of solid infill direction to each layer according to the specified template. "
|
||||
"The template is a comma-separated list of angles in degrees, e.g. '0,90'. "
|
||||
"The first angle is applied to the first layer, the second angle to the second layer, and so on. "
|
||||
"If there are more layers than angles, the angles will be repeated. Note that not all all solid infill patterns support rotation.");
|
||||
"If there are more layers than angles, the angles will be repeated. Note that not all solid infill patterns support rotation.");
|
||||
def->sidetext = L("°");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionString("0,90"));
|
||||
|
@ -3189,7 +3197,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0.4, false));
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
|
||||
|
||||
def = this->add("skeleton_infill_line_width", coFloatOrPercent);
|
||||
def->label = L("Skeleton line width");
|
||||
|
@ -3199,7 +3207,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->ratio_over = "nozzle_diameter";
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(0.4, false));
|
||||
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
|
||||
|
||||
def = this->add("symmetric_infill_y_axis", coBool);
|
||||
def->label = L("Symmetric infill y axis");
|
||||
|
|
|
@ -993,6 +993,7 @@ PRINT_CONFIG_CLASS_DEFINE(
|
|||
((ConfigOptionBool, infill_combination))
|
||||
// Orca:
|
||||
((ConfigOptionFloatOrPercent, infill_combination_max_layer_height))
|
||||
((ConfigOptionInt, fill_multiline))
|
||||
// Ironing options
|
||||
((ConfigOptionEnum<IroningType>, ironing_type))
|
||||
((ConfigOptionEnum<InfillPattern>, ironing_pattern))
|
||||
|
|
|
@ -1065,6 +1065,7 @@ bool PrintObject::invalidate_state_by_config_options(
|
|||
#endif
|
||||
} else if (
|
||||
opt_key == "interface_shells"
|
||||
|| opt_key == "infill_multiline"
|
||||
|| opt_key == "infill_combination"
|
||||
|| opt_key == "infill_combination_max_layer_height"
|
||||
|| opt_key == "bottom_shell_thickness"
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#define GIT_COMMIT_HASH "0000000" // 0000000 means uninitialized
|
||||
#endif
|
||||
#define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@"
|
||||
#define SLIC3R_BUILD_TIME "@SLIC3R_BUILD_TIME@"
|
||||
//#define SLIC3R_RC_VERSION "@SLIC3R_VERSION@"
|
||||
#define BBL_RELEASE_TO_PUBLIC @BBL_RELEASE_TO_PUBLIC@
|
||||
#define BBL_INTERNAL_TESTING @BBL_INTERNAL_TESTING@
|
||||
|
|
|
@ -262,13 +262,6 @@ AboutDialog::AboutDialog()
|
|||
vesizer->Add(version, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20));
|
||||
vesizer->AddSpacer(FromDIP(5));
|
||||
vesizer->Add(credits_string, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20));
|
||||
// #if BBL_INTERNAL_TESTING
|
||||
// wxString build_time = wxString::Format("Build Time: %s", std::string(SLIC3R_BUILD_TIME));
|
||||
// wxStaticText* build_time_text = new wxStaticText(this, wxID_ANY, build_time, wxDefaultPosition, wxDefaultSize);
|
||||
// build_time_text->SetForegroundColour(wxColour("#FFFFFE"));
|
||||
// build_time_text->SetBackgroundColour(wxColour("#00AF42"));
|
||||
// vesizer->Add(build_time_text, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5));
|
||||
// #endif
|
||||
vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5));
|
||||
}
|
||||
|
||||
|
|
|
@ -294,6 +294,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||
}
|
||||
|
||||
double sparse_infill_density = config->option<ConfigOptionPercent>("sparse_infill_density")->value;
|
||||
int fill_multiline = config->option<ConfigOptionInt>("fill_multiline")->value;
|
||||
auto timelapse_type = config->opt_enum<TimelapseType>("timelapse_type");
|
||||
|
||||
if (!is_plate_config &&
|
||||
|
@ -546,6 +547,20 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
|||
bool have_combined_infill = config->opt_bool("infill_combination") && have_infill;
|
||||
toggle_line("infill_combination_max_layer_height", have_combined_infill);
|
||||
|
||||
// Infill patterns that support multiline infill.
|
||||
InfillPattern pattern = config->opt_enum<InfillPattern>("sparse_infill_pattern");
|
||||
bool have_multiline_infill_pattern = pattern == ipGyroid || pattern == ipGrid || pattern == ipRectilinear || pattern == ipTpmsD || pattern == ipCrossHatch || pattern == ipHoneycomb || pattern == ip2DLattice || pattern == ip2DHoneycomb ||
|
||||
pattern == ipCubic || pattern == ipStars || pattern == ipAlignedRectilinear || pattern == ipLightning || pattern == ip3DHoneycomb || pattern == ipAdaptiveCubic || pattern == ipSupportCubic;
|
||||
toggle_line("fill_multiline", have_multiline_infill_pattern);
|
||||
|
||||
// If the infill pattern does not support multiline infill, set fill_multiline to 1.
|
||||
if (!have_multiline_infill_pattern) {
|
||||
DynamicPrintConfig new_conf = *config;
|
||||
new_conf.set_key_value("fill_multiline", new ConfigOptionInt(1));
|
||||
apply(config, &new_conf);
|
||||
}
|
||||
|
||||
// Hide infill anchor max if sparse_infill_pattern is not line or if sparse_infill_pattern is line but infill_anchor_max is 0.
|
||||
bool infill_anchor = config->opt_enum<InfillPattern>("sparse_infill_pattern") != ipLine;
|
||||
toggle_field("infill_anchor_max",infill_anchor);
|
||||
|
||||
|
@ -576,6 +591,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
|||
bool has_solid_infill = has_top_shell || has_bottom_shell;
|
||||
toggle_field("top_surface_pattern", has_top_shell);
|
||||
toggle_field("bottom_surface_pattern", has_bottom_shell);
|
||||
toggle_field("top_surface_density", has_top_shell);
|
||||
toggle_field("bottom_surface_density", has_bottom_shell);
|
||||
|
||||
for (auto el : { "infill_direction", "sparse_infill_line_width",
|
||||
"sparse_infill_speed", "bridge_speed", "internal_bridge_speed", "bridge_angle", "internal_bridge_angle",
|
||||
|
|
|
@ -67,10 +67,10 @@ private:
|
|||
static bool get_stream_url(std::string *url = nullptr);
|
||||
|
||||
private:
|
||||
static constexpr wxMediaState MEDIASTATE_IDLE = (wxMediaState) 3;
|
||||
static constexpr wxMediaState MEDIASTATE_INITIALIZING = (wxMediaState) 4;
|
||||
static constexpr wxMediaState MEDIASTATE_LOADING = (wxMediaState) 5;
|
||||
static constexpr wxMediaState MEDIASTATE_BUFFERING = (wxMediaState) 6;
|
||||
static const wxMediaState MEDIASTATE_IDLE = (wxMediaState) 3;
|
||||
static const wxMediaState MEDIASTATE_INITIALIZING = (wxMediaState) 4;
|
||||
static const wxMediaState MEDIASTATE_LOADING = (wxMediaState) 5;
|
||||
static const wxMediaState MEDIASTATE_BUFFERING = (wxMediaState) 6;
|
||||
|
||||
wxMediaCtrl2 * m_media_ctrl;
|
||||
wxMediaState m_last_state = MEDIASTATE_IDLE;
|
||||
|
|
|
@ -263,6 +263,28 @@ wxColor PresetComboBox::different_color(wxColor const &clr)
|
|||
wxString PresetComboBox::get_tooltip(const Preset &preset)
|
||||
{
|
||||
wxString tooltip = from_u8(preset.name);
|
||||
|
||||
// Add filament notes if available for filament presets
|
||||
if (m_type == Preset::TYPE_FILAMENT) {
|
||||
const DynamicConfig* config = &preset.config;
|
||||
Tab* tab = wxGetApp().get_tab(m_type);
|
||||
if (tab && tab->current_preset_is_dirty() && tab->get_presets()->get_selected_preset().name == preset.name) {
|
||||
config = tab->get_config();
|
||||
}
|
||||
|
||||
if (config->has("filament_notes")) {
|
||||
const ConfigOptionStrings* notes_opt = config->option<ConfigOptionStrings>("filament_notes");
|
||||
if (notes_opt && !notes_opt->values.empty() && !notes_opt->values[0].empty()) {
|
||||
std::string notes = notes_opt->values[0];
|
||||
// Truncate if longer than 200 characters
|
||||
if (notes.length() > 200) {
|
||||
notes = notes.substr(0, 197) + "...";
|
||||
}
|
||||
tooltip += "\n" + from_u8(notes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BBS: FIXME
|
||||
#if 0
|
||||
if (m_type == Preset::TYPE_FILAMENT) {
|
||||
|
|
|
@ -1522,7 +1522,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value)
|
|||
}
|
||||
update_wiping_button_visibility();
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (opt_key == "single_extruder_multi_material" ){
|
||||
const auto bSEMM = m_config->opt_bool("single_extruder_multi_material");
|
||||
|
@ -2137,15 +2137,15 @@ void TabPrint::build()
|
|||
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", "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");
|
||||
optgroup->append_single_option_line("wall_distribution_count");
|
||||
optgroup->append_single_option_line("initial_layer_min_bead_width");
|
||||
optgroup->append_single_option_line("min_bead_width");
|
||||
optgroup->append_single_option_line("min_feature_size");
|
||||
optgroup->append_single_option_line("min_length_factor");
|
||||
optgroup->append_single_option_line("wall_generator", "quality_settings_wall_generator");
|
||||
optgroup->append_single_option_line("wall_transition_angle", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("wall_transition_filter_deviation", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("wall_transition_length", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("wall_distribution_count", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("initial_layer_min_bead_width", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("min_bead_width", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("min_feature_size", "quality_settings_wall_generator#arachne");
|
||||
optgroup->append_single_option_line("min_length_factor", "quality_settings_wall_generator#arachne");
|
||||
|
||||
optgroup = page->new_optgroup(L("Walls and surfaces"), L"param_wall_surface");
|
||||
optgroup->append_single_option_line("wall_sequence");
|
||||
|
@ -2195,41 +2195,42 @@ void TabPrint::build()
|
|||
optgroup->append_single_option_line("detect_thin_wall");
|
||||
|
||||
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_density");
|
||||
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_density");
|
||||
optgroup->append_single_option_line("bottom_surface_pattern");
|
||||
optgroup->append_single_option_line("top_bottom_infill_wall_overlap");
|
||||
optgroup->append_single_option_line("top_shell_layers", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("top_shell_thickness", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("top_surface_density", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("top_surface_pattern", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("bottom_shell_layers", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("bottom_shell_thickness", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("bottom_surface_density", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("bottom_surface_pattern", "strength_top-bottom_shells");
|
||||
optgroup->append_single_option_line("top_bottom_infill_wall_overlap", "strength_top-bottom_shells");
|
||||
|
||||
optgroup = page->new_optgroup(L("Infill"), L"param_infill");
|
||||
optgroup->append_single_option_line("sparse_infill_density", "strength_settings_infill#sparse-infill-density");
|
||||
optgroup->append_single_option_line("fill_multiline"); // fill multiline
|
||||
optgroup->append_single_option_line("sparse_infill_pattern", "strength_settings_infill#sparse-infill-pattern");
|
||||
optgroup->append_single_option_line("infill_direction");
|
||||
optgroup->append_single_option_line("sparse_infill_rotate_template");
|
||||
optgroup->append_single_option_line("skin_infill_density");
|
||||
optgroup->append_single_option_line("skeleton_infill_density");
|
||||
optgroup->append_single_option_line("infill_lock_depth");
|
||||
optgroup->append_single_option_line("skin_infill_depth");
|
||||
optgroup->append_single_option_line("skin_infill_line_width", "parameter/line-width");
|
||||
optgroup->append_single_option_line("skeleton_infill_line_width", "parameter/line-width");
|
||||
optgroup->append_single_option_line("symmetric_infill_y_axis");
|
||||
optgroup->append_single_option_line("infill_shift_step");
|
||||
optgroup->append_single_option_line("infill_direction", "strength_settings_infill#direction");
|
||||
optgroup->append_single_option_line("sparse_infill_rotate_template", "strength_settings_infill#rotation");
|
||||
optgroup->append_single_option_line("skin_infill_density", "strength_settings_infill#locked-zag");
|
||||
optgroup->append_single_option_line("skeleton_infill_density", "strength_settings_infill#locked-zag");
|
||||
optgroup->append_single_option_line("infill_lock_depth", "strength_settings_infill#locked-zag");
|
||||
optgroup->append_single_option_line("skin_infill_depth", "strength_settings_infill#locked-zag");
|
||||
optgroup->append_single_option_line("skin_infill_line_width", "strength_settings_infill#locked-zag");
|
||||
optgroup->append_single_option_line("skeleton_infill_line_width", "strength_settings_infill#locked-zag");
|
||||
optgroup->append_single_option_line("symmetric_infill_y_axis", "strength_settings_infill#zig-zag");
|
||||
optgroup->append_single_option_line("infill_shift_step", "strength_settings_infill#cross-hatch");
|
||||
|
||||
optgroup->append_single_option_line("lattice_angle_1");
|
||||
optgroup->append_single_option_line("lattice_angle_2");
|
||||
optgroup->append_single_option_line("infill_overhang_angle");
|
||||
optgroup->append_single_option_line("infill_anchor_max");
|
||||
optgroup->append_single_option_line("infill_anchor");
|
||||
optgroup->append_single_option_line("internal_solid_infill_pattern");
|
||||
optgroup->append_single_option_line("solid_infill_direction");
|
||||
optgroup->append_single_option_line("solid_infill_rotate_template");
|
||||
optgroup->append_single_option_line("gap_fill_target");
|
||||
optgroup->append_single_option_line("filter_out_gap_fill");
|
||||
optgroup->append_single_option_line("infill_wall_overlap");
|
||||
optgroup->append_single_option_line("lattice_angle_1", "strength_settings_infill#2d-lattice");
|
||||
optgroup->append_single_option_line("lattice_angle_2", "strength_settings_infill#2d-lattice");
|
||||
optgroup->append_single_option_line("infill_overhang_angle", "strength_settings_infill#2d-honeycomb");
|
||||
optgroup->append_single_option_line("infill_anchor_max", "strength_settings_infill#anchor");
|
||||
optgroup->append_single_option_line("infill_anchor", "strength_settings_infill#anchor");
|
||||
optgroup->append_single_option_line("internal_solid_infill_pattern", "strength_settings_infill#internal-solid-infill");
|
||||
optgroup->append_single_option_line("solid_infill_direction", "strength_settings_infill");
|
||||
optgroup->append_single_option_line("solid_infill_rotate_template", "strength_settings_infill");
|
||||
optgroup->append_single_option_line("gap_fill_target", "strength_settings_infill#apply-gap-fill");
|
||||
optgroup->append_single_option_line("filter_out_gap_fill", "strength_settings_infill");
|
||||
optgroup->append_single_option_line("infill_wall_overlap", "strength_settings_infill#infill-wall-overlap");
|
||||
|
||||
optgroup = page->new_optgroup(L("Advanced"), L"param_advanced");
|
||||
optgroup->append_single_option_line("bridge_angle");
|
||||
|
@ -2302,9 +2303,9 @@ void TabPrint::build()
|
|||
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", "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");
|
||||
optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope", "speed_settings_extrusion_rate_smoothing");
|
||||
optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_segment_length", "speed_settings_extrusion_rate_smoothing");
|
||||
optgroup->append_single_option_line("extrusion_rate_smoothing_external_perimeter_only", "speed_settings_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");
|
||||
|
|