Merge branch 'main' into main

This commit is contained in:
Dan Martí 2026-01-05 20:53:01 -03:00 committed by GitHub
commit 89c58a7429
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
254 changed files with 6434 additions and 3647 deletions

View file

@ -48,7 +48,7 @@ PROJECT_NAME = OrcaSlicer
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 1.6.3
PROJECT_NUMBER = latest
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@ -68,7 +68,7 @@ PROJECT_LOGO = ./resources/images/OrcaSlicer_32px.png
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY = ../
OUTPUT_DIRECTORY = .
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format
@ -1059,7 +1059,11 @@ EXCLUDE_SYMLINKS = NO
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS =
EXCLUDE_PATTERNS = */deps/*
EXCLUDE_PATTERNS = */build/*
EXCLUDE_PATTERNS = */deps_src/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@ -1286,7 +1290,7 @@ GENERATE_HTML = YES
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = OrcaSlicer_Dev_Document
HTML_OUTPUT = internal_docs
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
@ -1565,7 +1569,7 @@ TOC_EXPAND = NO
# protocol see https://www.sitemaps.org
# This tag requires that the tag GENERATE_HTML is set to YES.
SITEMAP_URL =
SITEMAP_URL = internals.orcaslicer.com
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that

View file

@ -48,17 +48,16 @@ concurrency:
jobs:
build_linux: # Separate so unit tests can wait on just Linux builds to complete.
build_linux:
name: Build Linux
strategy:
fail-fast: false
# Don't run scheduled builds on forks:
if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }}
uses: ./.github/workflows/build_deps.yml
uses: ./.github/workflows/build_check_cache.yml
with:
os: ubuntu-24.04
build-deps-only: ${{ inputs.build-deps-only || false }}
force-build: ${{ github.event_name == 'schedule' }}
secrets: inherit
build_all:
name: Build Non-Linux
@ -71,7 +70,7 @@ jobs:
arch: arm64
# Don't run scheduled builds on forks:
if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }}
uses: ./.github/workflows/build_deps.yml
uses: ./.github/workflows/build_check_cache.yml
with:
os: ${{ matrix.os }}
arch: ${{ matrix.arch }}
@ -94,7 +93,7 @@ jobs:
- name: Apt-Install Dependencies
uses: ./.github/actions/apt-install-deps
- name: Restore Test Artifact
uses: actions/download-artifact@v6
uses: actions/download-artifact@v7
with:
name: ${{ github.sha }}-tests
- uses: lukka/get-cmake@latest
@ -106,14 +105,14 @@ jobs:
tar -xvf build_tests.tar
scripts/run_unit_tests.sh
- name: Upload Test Logs
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
if: ${{ failure() }}
with:
name: unit-test-logs
path: build/tests/**/*.log
- name: Publish Test Results
if: always()
uses: EnricoMi/publish-unit-test-result-action/linux@v2
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: "ctest_results.xml"
flatpak:
@ -170,7 +169,7 @@ jobs:
arch: ${{ matrix.variant.arch }}
upload-artifact: false
- name: Upload artifacts Flatpak
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak'

62
.github/workflows/build_check_cache.yml vendored Normal file
View file

@ -0,0 +1,62 @@
name: Check Cache
on:
workflow_call:
inputs:
os:
required: true
type: string
arch:
required: false
type: string
build-deps-only:
required: false
type: boolean
force-build:
required: false
type: boolean
jobs:
check_cache: # determines if there is a cache and outputs variables used in caching process
name: Check Cache
runs-on: ${{ inputs.os }}
outputs:
cache-key: ${{ steps.set_outputs.outputs.cache-key }}
cache-path: ${{ steps.set_outputs.outputs.cache-path }}
valid-cache: ${{ steps.cache_deps.outputs.cache-hit }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
lfs: 'true'
- name: set outputs
id: set_outputs
env:
dep-folder-name: ${{ inputs.os != 'macos-14' && '/OrcaSlicer_dep' || '' }}
output-cmd: ${{ inputs.os == 'windows-latest' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
run: |
echo cache-key=${{ inputs.os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }}
echo cache-path=${{ github.workspace }}/deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }}
- name: load cache
id: cache_deps
uses: actions/cache@v5
with:
path: ${{ steps.set_outputs.outputs.cache-path }}
key: ${{ steps.set_outputs.outputs.cache-key }}
lookup-only: true
build_deps: # call next step
name: Build Deps
needs: [check_cache]
uses: ./.github/workflows/build_deps.yml
with:
cache-key: ${{ needs.check_cache.outputs.cache-key }}
cache-path: ${{ needs.check_cache.outputs.cache-path }}
valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' }}
os: ${{ inputs.os }}
arch: ${{ inputs.arch }}
build-deps-only: ${{ inputs.build-deps-only }}
force-build: ${{ inputs.force-build }}
secrets: inherit

View file

@ -1,6 +1,15 @@
on:
workflow_call:
inputs:
cache-key:
required: true
type: string
cache-path:
required: true
type: string
valid-cache:
required: true
type: boolean
os:
required: true
type: string
@ -17,62 +26,55 @@ on:
jobs:
build_deps:
name: Build Deps
if: ${{ !cancelled() && (inputs.build-deps-only || inputs.force-build || inputs.valid-cache != true) }}
runs-on: ${{ inputs.os }}
outputs:
artifact-name: ${{ env.ARTIFACT_NAME }}
artifact-path: ${{ env.DEPS_PATH }}
env:
DO_BUILD: ${{ inputs.build-deps-only || inputs.force-build }}
DEPS_PATH: ${{ github.workspace }}/deps/build${{ inputs.os != 'macos-14' && '/OrcaSlicer_dep' || '' }}
ARTIFACT_NAME: OrcaSlicer_dep_${{ inputs.os }}_${{ inputs.arch }}
date:
steps:
# Setup the environment
- name: Checkout
uses: actions/checkout@v6
with:
lfs: 'true'
# Cached deps are just the final outputs, no intermediate files.
# So building XOR cache loading.
# We use `lookup-only` to skip pulling cache.
- name: load cached deps
uses: actions/cache/restore@v4
id: cache-load
uses: actions/cache@v5
with:
path: ${{ env.DEPS_PATH }}
key: ${{ inputs.os }}-${{ inputs.arch }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }}
lookup-only: ${{ env.DO_BUILD == 'true' }} # Doing this instead of `if` preserves the outputs of this step
path: ${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
- uses: lukka/get-cmake@latest
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') }}
with:
cmakeVersion: "~3.28.0" # use most recent 3.28.x version
- name: setup dev on Windows
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'windows-latest' }}
if: inputs.os == 'windows-latest'
uses: microsoft/setup-msbuild@v2
- name: Get the date on Ubuntu and macOS
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os != 'windows-latest' }}
if: inputs.os != 'windows-latest'
run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
shell: bash
- name: Get the date on Windows
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'windows-latest' }}
if: inputs.os == 'windows-latest'
run: echo "date=$(Get-Date -Format 'yyyyMMdd')" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
shell: pwsh
# Build Dependencies
- name: Build on Windows
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'windows-latest' }}
if: inputs.os == 'windows-latest'
working-directory: ${{ github.workspace }}
run: |
choco install strawberryperl
.\build_release_vs.bat deps
.\build_release_vs.bat pack
cd ${{ github.workspace }}/deps/build
# Windows and Linux don't need to delete any directories, because they only package up deps/build/OrcaSlicer_dep.
# But Mac has multiple and we're preserving their directory structure relationship.
# So the garbage siblings of OrcaSlicer_dep can be deleted to save artifact and cache space.
- name: Build on Mac ${{ inputs.arch }}
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'macos-14' }}
if: inputs.os == 'macos-14'
working-directory: ${{ github.workspace }}
run: |
brew install automake texinfo libtool
@ -85,40 +87,53 @@ jobs:
done
brew install zstd
- name: Apt-Install Dependencies
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && inputs.os == 'ubuntu-24.04' }}
if: inputs.os == 'ubuntu-24.04'
uses: ./.github/actions/apt-install-deps
- name: Build on Ubuntu
if: ${{ !cancelled() && (env.DO_BUILD == 'true' || steps.cache-load.outputs.cache-hit != 'true') && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }}
if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04'
working-directory: ${{ github.workspace }}
run: |
mkdir -p ${{ github.workspace }}/deps/build/destdir
./build_linux.sh -dr
cd deps/build
tar -czvf OrcaSlicer_dep_ubuntu_$(date +"%Y%m%d").tar.gz destdir
- name: Upload OrcaSlicer_dep director(ies) for use later
if: ${{ !cancelled() && ! env.ACT}}
uses: actions/upload-artifact@v5
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.DEPS_PATH }}
retention-days: 10 # It's not too big, but we don't need it for a very long time.
if-no-files-found: error
- name: Save cache from main branch
if: ${{ !cancelled() && github.ref == 'refs/heads/main' && steps.cache-load.outputs.cache-hit != 'true' }}
uses: actions/cache/save@v4
# Upload Artifacts
# - name: Upload Mac ${{ inputs.arch }} artifacts
# if: inputs.os == 'macos-14'
# uses: actions/upload-artifact@v6
# with:
# name: OrcaSlicer_dep_mac_${{ env.date }}
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz
- name: Upload Windows artifacts
if: inputs.os == 'windows-latest'
uses: actions/upload-artifact@v6
with:
path: ${{ env.DEPS_PATH }}
key: ${{ steps.cache-load.outputs.cache-primary-key }}
name: OrcaSlicer_dep_win64_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip
- name: Upload Ubuntu artifacts
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz
build_orca:
name: Build OrcaSlicer
needs: [build_deps]
if: ${{ !cancelled() && (!inputs.build-deps-only || inputs.force-build) }}
if: ${{ !cancelled() && !inputs.build-deps-only && (inputs.force-build || (inputs.valid-cache == true && needs.build_deps.result == 'skipped') || (inputs.valid-cache != true && success())) }}
uses: ./.github/workflows/build_orca.yml
with:
artifact-name: ${{ needs.build_deps.outputs.artifact-name }}
artifact-path: ${{ needs.build_deps.outputs.artifact-path }}
cache-key: ${{ inputs.cache-key }}
cache-path: ${{ inputs.cache-path }}
os: ${{ inputs.os }}
arch: ${{ inputs.arch }}
secrets: inherit

View file

@ -1,10 +1,10 @@
on:
workflow_call:
inputs:
artifact-name:
cache-key:
required: true
type: string
artifact-path:
cache-path:
required: true
type: string
os:
@ -30,11 +30,12 @@ jobs:
with:
lfs: 'true'
- name: Download deps artifacts
uses: actions/download-artifact@v4
- name: load cached deps
uses: actions/cache@v5
with:
name: ${{ inputs.artifact-name }}
path: ${{ inputs.artifact-path }}
path: ${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
fail-on-cache-miss: true
- uses: lukka/get-cmake@latest
with:
@ -180,14 +181,14 @@ jobs:
- name: Upload artifacts mac
if: inputs.os == 'macos-14'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Mac_universal_${{ env.ver }}
path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
- name: Upload OrcaSlicer_profile_validator DMG mac
if: inputs.os == 'macos-14'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_profile_validator_Mac_universal_DMG_${{ env.ver }}
path: ${{ github.workspace }}/OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
@ -254,28 +255,28 @@ jobs:
- name: Upload artifacts Win zip
if: inputs.os == 'windows-latest'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Windows_${{ env.ver }}_portable
path: ${{ github.workspace }}/build/OrcaSlicer
- name: Upload artifacts Win installer
if: inputs.os == 'windows-latest'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Windows_${{ env.ver }}
path: ${{ github.workspace }}/build/OrcaSlicer*.exe
- name: Upload artifacts Win PDB
if: inputs.os == 'windows-latest'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: PDB
path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z
- name: Upload OrcaSlicer_profile_validator Win
if: inputs.os == 'windows-latest'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_profile_validator_Windows_${{ env.ver }}
path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe
@ -335,7 +336,7 @@ jobs:
# and doesn't preserve file permissions
- name: Upload Test Artifact
if: inputs.os == 'ubuntu-24.04'
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: ${{ github.sha }}-tests
overwrite: true
@ -357,7 +358,7 @@ jobs:
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }}
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage'
@ -366,7 +367,7 @@ jobs:
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
path: './build/src/Release/OrcaSlicer_profile_validator'

78
.github/workflows/doxygen-docs.yml vendored Normal file
View file

@ -0,0 +1,78 @@
name: Generate Doxygen Documentation
on:
schedule:
- cron: '0 0 * * 1' # Every Monday at midnight UTC
workflow_dispatch: # Manual trigger
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
jobs:
build-and-deploy:
name: Build and Deploy Docs
runs-on: ubuntu-latest
timeout-minutes: 60
# Only run on main branch of the main repository
if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main'
permissions:
contents: read
steps:
- uses: thejerrybao/setup-swap-space@v1
with:
swap-space-path: /swapfile
swap-size-gb: 8
remove-existing-swap-files: true
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Doxygen and Graphviz
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y doxygen graphviz
- name: Generate documentation
run: |
set -euo pipefail
# Override DOT_NUM_THREADS to avoid parallel dot race condition bug
sed -i 's/^DOT_NUM_THREADS.*/DOT_NUM_THREADS = 1/' .doxygen
doxygen .doxygen
# Verify documentation was generated
if [ ! -f "internal_docs/index.html" ]; then
echo "Error: Documentation generation failed - index.html not found"
exit 1
fi
- name: Install Rclone
run: |
set -euo pipefail
sudo -v
curl -fsSL https://rclone.org/install.sh | sudo bash
- name: optimize
run: |
set -euo pipefail
rm -f internal_docs/Nodes.xml internal_docs/Tokens.xml
find internal_docs -name "*.map" -type f -delete || true
find internal_docs -name "*.md5" -type f -delete || true
- name: upload
# We configure rclone dynamically using environment variables
run: |
set -euo pipefail
# Remove existing config if it exists to avoid conflicts
rclone config delete cloudflare 2>/dev/null || true
rclone config create cloudflare s3 \
provider Cloudflare \
access_key_id ${{ secrets.R2_ACCESS_KEY_ID }} \
secret_access_key ${{ secrets.R2_SECRET_ACCESS_KEY }} \
endpoint ${{ secrets.R2_ENDPOINT }}
rclone sync internal_docs/ cloudflare:orcaslicer-internals \
--progress \
--transfers 512 \
--checkers 512
echo "Documentation upload completed successfully"

View file

@ -21,7 +21,7 @@ jobs:
steps:
- name: Cache shellcheck download
id: cache-shellcheck-v0_11
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/shellcheck
key: ${{ runner.os }}-shellcheck-v0_11

1
.gitignore vendored
View file

@ -42,3 +42,4 @@ deps_src/build/
test.js
/.cache/
.clangd
internal_docs/

View file

@ -1,3 +1,7 @@
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0")
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
endif()
cmake_minimum_required(VERSION 3.13)
# Verify that your CMake version is exactly 3.5 series or higher on windows
@ -571,6 +575,7 @@ endif()
if(POLICY CMP0167)
cmake_policy(SET CMP0167 NEW)
endif()
set(Boost_NO_SYSTEM_PATHS TRUE)
find_package(Boost 1.83.0 REQUIRED COMPONENTS system filesystem thread log log_setup locale regex chrono atomic date_time iostreams program_options nowide)
add_library(boost_libs INTERFACE)
@ -688,6 +693,10 @@ find_package(PNG REQUIRED)
set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
set(OPENGL_LIBRARIES "-framework OpenGL" CACHE STRING "OpenGL framework" FORCE)
endif()
set(GLEW_ROOT "${CMAKE_PREFIX_PATH}")
message("GLEW_ROOT: ${GLEW_ROOT}")
# Find glew or use bundled version

View file

@ -44,19 +44,19 @@ If you come across any of these in search results, please <b>report them</b> as
# Main features
- **[Advanced Calibration Tools](https://github.com/OrcaSlicer/OrcaSlicer/wiki/Calibration)**
- **[Advanced Calibration Tools](https://www.orcaslicer.com/wiki/Calibration)**
Comprehensive suite: temperature towers, flow rate, retraction & more for optimal performance.
- **[Precise Wall](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_precision#precise-wall) and [Seam Control](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_seam)**
- **[Precise Wall](https://www.orcaslicer.com/wiki/quality_settings_precision#precise-wall) and [Seam Control](https://www.orcaslicer.com/wiki/quality_settings_seam)**
Adjust outer wall spacing and apply scarf seams to enhance print accuracy.
- **[Sandwich Mode](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_wall_and_surfaces#innerouterinner) and [Polyholes](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_precision#polyholes) Support**
Use varied infill [patterns](https://github.com/OrcaSlicer/OrcaSlicer/wiki/strength_settings_patterns) and accurate hole shapes for improved clarity.
- **[Overhang](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_overhangs) and [Support Optimization](https://github.com/OrcaSlicer/OrcaSlicer/wiki#support-settings)**
- **[Sandwich Mode](https://www.orcaslicer.com/wiki/quality_settings_wall_and_surfaces#innerouterinner) and [Polyholes](https://www.orcaslicer.com/wiki/quality_settings_precision#polyholes) Support**
Use varied infill [patterns](https://www.orcaslicer.com/wiki/strength_settings_patterns) and accurate hole shapes for improved clarity.
- **[Overhang](https://www.orcaslicer.com/wiki/quality_settings_overhangs) and [Support Optimization](https://www.orcaslicer.com/wiki#support-settings)**
Modify geometry for printable overhangs with precise support placement.
- **[Granular Controls and Customization](https://github.com/OrcaSlicer/OrcaSlicer/wiki#process-settings)**
- **[Granular Controls and Customization](https://www.orcaslicer.com/wiki#process-settings)**
Fine-tune print speed, layer height, pressure, and temperature with precision.
- **Network Printer Support**
Seamless integration with Klipper, PrusaLink, and OctoPrint for remote control.
- **[Mouse Ear Brims](https://github.com/OrcaSlicer/OrcaSlicer/wiki/others_settings_brim) & [Adaptive Bed Mesh](https://github.com/OrcaSlicer/OrcaSlicer/wiki/printer_basic_information_adaptive_bed_mesh)**
- **[Mouse Ear Brims](https://www.orcaslicer.com/wiki/others_settings_brim) & [Adaptive Bed Mesh](https://www.orcaslicer.com/wiki/printer_basic_information_adaptive_bed_mesh)**
Automatic brims and adaptive mesh calibration ensure consistent adhesion.
- **User-Friendly Interface**
Intuitive drag-and-drop design with pre-made profiles for popular printers.
@ -68,10 +68,10 @@ If you come across any of these in search results, please <b>report them</b> as
# Wiki
The [wiki](https://github.com/OrcaSlicer/OrcaSlicer/wiki) aims to provide a detailed explanation of the slicer settings, including how to maximize their use and how to calibrate and set up your printer.
The [wiki](https://www.orcaslicer.com/wiki) aims to provide a detailed explanation of the slicer settings, including how to maximize their use and how to calibrate and set up your printer.
- **[Access the wiki here](https://github.com/OrcaSlicer/OrcaSlicer/wiki)**
- **[Contribute to the wiki](https://github.com/OrcaSlicer/OrcaSlicer/wiki/How-to-wiki)**
- **[Access the wiki here](https://www.orcaslicer.com/wiki)**
- **[Contribute to the wiki](https://www.orcaslicer.com/wiki/How-to-wiki)**
# Download
@ -144,7 +144,7 @@ winget install --id=SoftFever.OrcaSlicer -e
# How to Compile
All updated build instructions for Windows, macOS, and Linux are now available on the official [OrcaSlicer Wiki - How to build](https://github.com/OrcaSlicer/OrcaSlicer/wiki/How-to-build) page.
All updated build instructions for Windows, macOS, and Linux are now available on the official [OrcaSlicer Wiki - How to build](https://www.orcaslicer.com/wiki/How-to-build) page.
Please refer to the wiki to ensure you're following the latest and most accurate steps for your platform.

View file

@ -21,7 +21,7 @@ function usage() {
echo " -p: boost ccache hit rate by disabling precompiled headers (default: ON)"
echo " -r: skip RAM and disk checks (low RAM compiling)"
echo " -s: build the Orca Slicer (optional)"
echo " -t: build tests (optional)"
echo " -t: build tests (optional), requires -s flag"
echo " -u: install system dependencies (asks for sudo password; build prerequisite)"
echo " -l: use Clang instead of GCC (default: GCC)"
echo " -L: use ld.lld as linker (if available)"

View file

@ -3,7 +3,7 @@
set -e
set -o pipefail
while getopts ":dpa:snt:xbc:1h" opt; do
while getopts ":dpa:snt:xbc:1Th" opt; do
case "${opt}" in
d )
export BUILD_TARGET="deps"
@ -37,6 +37,9 @@ while getopts ":dpa:snt:xbc:1h" opt; do
1 )
export CMAKE_BUILD_PARALLEL_LEVEL=1
;;
T )
export BUILD_TESTS="1"
;;
h ) echo "Usage: ./build_release_macos.sh [-d]"
echo " -d: Build deps only"
echo " -a: Set ARCHITECTURE (arm64 or x86_64 or universal)"
@ -47,6 +50,7 @@ while getopts ":dpa:snt:xbc:1h" opt; do
echo " -b: Build without reconfiguring CMake"
echo " -c: Set CMake build configuration, default is Release"
echo " -1: Use single job for building"
echo " -T: Build and run tests"
exit 0
;;
* )
@ -85,6 +89,15 @@ if [ -z "$OSX_DEPLOYMENT_TARGET" ]; then
export OSX_DEPLOYMENT_TARGET="11.3"
fi
CMAKE_VERSION=$(cmake --version | head -1 | sed 's/[^0-9]*\([0-9]*\).*/\1/')
if [ "$CMAKE_VERSION" -ge 4 ] 2>/dev/null; then
export CMAKE_POLICY_VERSION_MINIMUM=3.5
export CMAKE_POLICY_COMPAT="-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
echo "Detected CMake 4.x, adding compatibility flag (env + cmake arg)"
else
export CMAKE_POLICY_COMPAT=""
fi
echo "Build params:"
echo " - ARCH: $ARCH"
echo " - BUILD_CONFIG: $BUILD_CONFIG"
@ -133,7 +146,8 @@ function build_deps() {
-G "${DEPS_CMAKE_GENERATOR}" \
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
-DCMAKE_OSX_ARCHITECTURES:STRING="${_ARCH}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}" \
${CMAKE_POLICY_COMPAT}
fi
cmake --build . --config "$BUILD_CONFIG" --target deps
)
@ -170,13 +184,24 @@ function build_slicer() {
-G "${SLICER_CMAKE_GENERATOR}" \
-DORCA_TOOLS=ON \
${ORCA_UPDATER_SIG_KEY:+-DORCA_UPDATER_SIG_KEY="$ORCA_UPDATER_SIG_KEY"} \
${BUILD_TESTS:+-DBUILD_TESTS=ON} \
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
-DCMAKE_OSX_ARCHITECTURES="${_ARCH}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}" \
${CMAKE_POLICY_COMPAT}
fi
cmake --build . --config "$BUILD_CONFIG" --target "$SLICER_BUILD_TARGET"
)
if [ "1." == "$BUILD_TESTS". ]; then
echo "Running tests for $_ARCH..."
(
set -x
cd "$PROJECT_BUILD_DIR"
ctest --build-config "$BUILD_CONFIG" --output-on-failure
)
fi
echo "Verify localization with gettext..."
(
cd "$PROJECT_DIR"

View file

@ -223,8 +223,13 @@ if(NOT TARGET GLEW::glew AND NOT GLEW_USE_STATIC_LIBS)
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
if(APPLE)
set_target_properties(GLEW::glew
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
set_target_properties(GLEW::glew
PROPERTIES INTERFACE_LINK_LIBRARIES "-framework OpenGL")
else()
set_target_properties(GLEW::glew
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
endif()
endif()
if(GLEW_SHARED_LIBRARY_RELEASE)
@ -258,8 +263,13 @@ elseif(NOT TARGET GLEW::glew_s AND GLEW_USE_STATIC_LIBS)
set_target_properties(GLEW::glew_s PROPERTIES INTERFACE_COMPILE_DEFINITIONS GLEW_STATIC)
if(APPLE)
set_target_properties(GLEW::glew_s
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
set_target_properties(GLEW::glew_s
PROPERTIES INTERFACE_LINK_LIBRARIES "-framework OpenGL")
else()
set_target_properties(GLEW::glew_s
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
endif()
endif()
if(GLEW_STATIC_LIBRARY_RELEASE)
@ -292,8 +302,13 @@ if(NOT TARGET GLEW::GLEW)
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
if(APPLE)
set_target_properties(GLEW::GLEW
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
set_target_properties(GLEW::GLEW
PROPERTIES INTERFACE_LINK_LIBRARIES "-framework OpenGL")
else()
set_target_properties(GLEW::GLEW
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
endif()
endif()
if(TARGET GLEW::glew)

6
deps/CMakeLists.txt vendored
View file

@ -1,3 +1,7 @@
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0")
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
endif()
#
# This CMake project downloads, configures and builds OrcaSlicer dependencies on Unix and Windows.
#
@ -177,6 +181,7 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
${_gen}
CMAKE_ARGS
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
@ -221,6 +226,7 @@ else()
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
${_gen}
CMAKE_ARGS
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
-DBUILD_SHARED_LIBS:BOOL=OFF

View file

@ -1,11 +1,11 @@
include(GNUInstallDirs)
orcaslicer_add_cmake_project(Qhull
URL "https://github.com/qhull/qhull/archive/v8.0.1.zip"
URL_HASH SHA256=5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b
URL "https://github.com/qhull/qhull/archive/v8.0.2.zip"
URL_HASH SHA256=a378e9a39e718e289102c20d45632f873bfdc58a7a5f924246ea4b176e185f1e
CMAKE_ARGS
-DINCLUDE_INSTALL_DIR=${CMAKE_INSTALL_INCLUDEDIR}
)
if (MSVC)
add_debug_dep(dep_Qhull)
endif ()
endif ()

View file

@ -24,6 +24,14 @@ else ()
set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF")
endif ()
set(_wx_opengl_override "")
if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
set(_wx_opengl_override
-DOPENGL_gl_LIBRARY="-framework OpenGL"
-DOPENGL_glu_LIBRARY="-framework OpenGL"
)
endif()
orcaslicer_add_cmake_project(
wxWidgets
GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets"
@ -31,6 +39,7 @@ orcaslicer_add_cmake_project(
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${JPEG_PKG}
${_wx_flatpak_patch}
CMAKE_ARGS
${_wx_opengl_override}
-DwxBUILD_PRECOMP=ON
${_wx_toolkit}
"-DCMAKE_DEBUG_POSTFIX:STRING=${_wx_debug_postfix}"

View file

@ -10,7 +10,6 @@ add_subdirectory(earcut)
add_subdirectory(fast_float)
add_subdirectory(nanosvg)
add_subdirectory(nlohmann)
add_subdirectory(spline) # Header-only spline library
add_subdirectory(stb_dxt) # Header-only STB DXT compression library
# Static libraries

View file

@ -24,18 +24,7 @@ target_link_libraries(your_target PRIVATE semver::semver)
target_link_libraries(your_target PRIVATE hints)
```
### 3. **spline** (Interface Library)
- **Type**: Interface library (header-only)
- **Target**: `spline` or `spline::spline`
- **Headers**: `spline.h`
- **Usage**:
```cmake
target_link_libraries(your_target PRIVATE spline)
# or
target_link_libraries(your_target PRIVATE spline::spline)
```
### 4. **stb_dxt** (Interface Library)
### 3. **stb_dxt** (Interface Library)
- **Type**: Interface library (header-only)
- **Target**: `stb_dxt` or `stb_dxt::stb_dxt`
- **Headers**: `stb_dxt.h`
@ -53,10 +42,9 @@ target_link_libraries(your_target PRIVATE stb_dxt::stb_dxt)
1. **In your CMakeLists.txt**, simply link the library:
```cmake
add_executable(my_app main.cpp)
target_link_libraries(my_app
PRIVATE
target_link_libraries(my_app
PRIVATE
semver::semver # For version parsing
spline::spline # For spline interpolation
stb_dxt::stb_dxt # For DXT texture compression
hints # For hints functionality
)
@ -67,9 +55,6 @@ target_link_libraries(my_app
// For semver
#include <semver.h>
// For spline
#include <spline.h>
// For stb_dxt
#include <stb_dxt.h>
@ -100,7 +85,6 @@ target_link_libraries(mycomponent
PUBLIC
semver::semver # Version handling is part of public API
PRIVATE
spline::spline # Used internally for interpolation
stb_dxt::stb_dxt # Used internally for texture compression
)

View file

@ -1,37 +0,0 @@
cmake_minimum_required(VERSION 3.13)
project(spline)
# Create interface library for spline (header-only library)
add_library(spline INTERFACE)
# Set include directories for the interface library
target_include_directories(spline SYSTEM
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
# Add compile features
target_compile_features(spline INTERFACE cxx_std_11)
# Create an alias for consistent naming
add_library(spline::spline ALIAS spline)
# Install headers if needed
install(FILES
spline.h
DESTINATION include/spline
)
# Install the interface library
install(TARGETS spline
EXPORT splineTargets
INCLUDES DESTINATION include
)
# Export the targets
install(EXPORT splineTargets
FILE splineTargets.cmake
NAMESPACE spline::
DESTINATION lib/cmake/spline
)

View file

@ -1,944 +0,0 @@
/*
* spline.h
*
* simple cubic spline interpolation library without external
* dependencies
*
* ---------------------------------------------------------------------
* Copyright (C) 2011, 2014, 2016, 2021 Tino Kluge (ttk448 at gmail.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ---------------------------------------------------------------------
*
*/
#ifndef TK_SPLINE_H
#define TK_SPLINE_H
#include <cstdio>
#include <cassert>
#include <cmath>
#include <vector>
#include <algorithm>
#ifdef HAVE_SSTREAM
#include <sstream>
#include <string>
#endif // HAVE_SSTREAM
// not ideal but disable unused-function warnings
// (we get them because we have implementations in the header file,
// and this is because we want to be able to quickly separate them
// into a cpp file if necessary)
#if !defined(_MSC_VER)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
#endif
namespace tk
{
// spline interpolation
class spline
{
public:
// spline types
enum spline_type {
linear = 10, // linear interpolation
cspline = 30, // cubic splines (classical C^2)
cspline_hermite = 31 // cubic hermite splines (local, only C^1)
};
// boundary condition type for the spline end-points
enum bd_type {
first_deriv = 1,
second_deriv = 2,
not_a_knot = 3
};
protected:
std::vector<double> m_x,m_y; // x,y coordinates of points
// interpolation parameters
// f(x) = a_i + b_i*(x-x_i) + c_i*(x-x_i)^2 + d_i*(x-x_i)^3
// where a_i = y_i, or else it won't go through grid points
std::vector<double> m_b,m_c,m_d; // spline coefficients
double m_c0; // for left extrapolation
spline_type m_type;
bd_type m_left, m_right;
double m_left_value, m_right_value;
bool m_made_monotonic;
void set_coeffs_from_b(); // calculate c_i, d_i from b_i
size_t find_closest(double x) const; // closest idx so that m_x[idx]<=x
public:
// default constructor: set boundary condition to be zero curvature
// at both ends, i.e. natural splines
spline(): m_type(cspline),
m_left(second_deriv), m_right(second_deriv),
m_left_value(0.0), m_right_value(0.0), m_made_monotonic(false)
{
;
}
spline(const std::vector<double>& X, const std::vector<double>& Y,
spline_type type = cspline,
bool make_monotonic = false,
bd_type left = second_deriv, double left_value = 0.0,
bd_type right = second_deriv, double right_value = 0.0
):
m_type(type),
m_left(left), m_right(right),
m_left_value(left_value), m_right_value(right_value),
m_made_monotonic(false) // false correct here: make_monotonic() sets it
{
this->set_points(X,Y,m_type);
if(make_monotonic) {
this->make_monotonic();
}
}
// modify boundary conditions: if called it must be before set_points()
void set_boundary(bd_type left, double left_value,
bd_type right, double right_value);
// set all data points (cubic_spline=false means linear interpolation)
void set_points(const std::vector<double>& x,
const std::vector<double>& y,
spline_type type=cspline);
// adjust coefficients so that the spline becomes piecewise monotonic
// where possible
// this is done by adjusting slopes at grid points by a non-negative
// factor and this will break C^2
// this can also break boundary conditions if adjustments need to
// be made at the boundary points
// returns false if no adjustments have been made, true otherwise
bool make_monotonic();
// evaluates the spline at point x
double operator() (double x) const;
double deriv(int order, double x) const;
// solves for all x so that: spline(x) = y
std::vector<double> solve(double y, bool ignore_extrapolation=true) const;
// returns the input data points
std::vector<double> get_x() const { return m_x; }
std::vector<double> get_y() const { return m_y; }
double get_x_min() const { assert(!m_x.empty()); return m_x.front(); }
double get_x_max() const { assert(!m_x.empty()); return m_x.back(); }
#ifdef HAVE_SSTREAM
// spline info string, i.e. spline type, boundary conditions etc.
std::string info() const;
#endif // HAVE_SSTREAM
};
namespace internal
{
// band matrix solver
class band_matrix
{
private:
std::vector< std::vector<double> > m_upper; // upper band
std::vector< std::vector<double> > m_lower; // lower band
public:
band_matrix() {}; // constructor
band_matrix(int dim, int n_u, int n_l); // constructor
~band_matrix() {}; // destructor
void resize(int dim, int n_u, int n_l); // init with dim,n_u,n_l
int dim() const; // matrix dimension
int num_upper() const
{
return (int)m_upper.size()-1;
}
int num_lower() const
{
return (int)m_lower.size()-1;
}
// access operator
double & operator () (int i, int j); // write
double operator () (int i, int j) const; // read
// we can store an additional diagonal (in m_lower)
double& saved_diag(int i);
double saved_diag(int i) const;
void lu_decompose();
std::vector<double> r_solve(const std::vector<double>& b) const;
std::vector<double> l_solve(const std::vector<double>& b) const;
std::vector<double> lu_solve(const std::vector<double>& b,
bool is_lu_decomposed=false);
};
double get_eps();
std::vector<double> solve_cubic(double a, double b, double c, double d,
int newton_iter=0);
} // namespace internal
// ---------------------------------------------------------------------
// implementation part, which could be separated into a cpp file
// ---------------------------------------------------------------------
// spline implementation
// -----------------------
void spline::set_boundary(spline::bd_type left, double left_value,
spline::bd_type right, double right_value)
{
assert(m_x.size()==0); // set_points() must not have happened yet
m_left=left;
m_right=right;
m_left_value=left_value;
m_right_value=right_value;
}
void spline::set_coeffs_from_b()
{
assert(m_x.size()==m_y.size());
assert(m_x.size()==m_b.size());
assert(m_x.size()>2);
size_t n=m_b.size();
if(m_c.size()!=n)
m_c.resize(n);
if(m_d.size()!=n)
m_d.resize(n);
for(size_t i=0; i<n-1; i++) {
const double h = m_x[i+1]-m_x[i];
// from continuity and differentiability condition
m_c[i] = ( 3.0*(m_y[i+1]-m_y[i])/h - (2.0*m_b[i]+m_b[i+1]) ) / h;
// from differentiability condition
m_d[i] = ( (m_b[i+1]-m_b[i])/(3.0*h) - 2.0/3.0*m_c[i] ) / h;
}
// for left extrapolation coefficients
m_c0 = (m_left==first_deriv) ? 0.0 : m_c[0];
}
void spline::set_points(const std::vector<double>& x,
const std::vector<double>& y,
spline_type type)
{
assert(x.size()==y.size());
assert(x.size()>=3);
// not-a-knot with 3 points has many solutions
if(m_left==not_a_knot || m_right==not_a_knot)
assert(x.size()>=4);
m_type=type;
m_made_monotonic=false;
m_x=x;
m_y=y;
int n = (int) x.size();
// check strict monotonicity of input vector x
for(int i=0; i<n-1; i++) {
assert(m_x[i]<m_x[i+1]);
}
if(type==linear) {
// linear interpolation
m_d.resize(n);
m_c.resize(n);
m_b.resize(n);
for(int i=0; i<n-1; i++) {
m_d[i]=0.0;
m_c[i]=0.0;
m_b[i]=(m_y[i+1]-m_y[i])/(m_x[i+1]-m_x[i]);
}
// ignore boundary conditions, set slope equal to the last segment
m_b[n-1]=m_b[n-2];
m_c[n-1]=0.0;
m_d[n-1]=0.0;
} else if(type==cspline) {
// classical cubic splines which are C^2 (twice cont differentiable)
// this requires solving an equation system
// setting up the matrix and right hand side of the equation system
// for the parameters b[]
int n_upper = (m_left == spline::not_a_knot) ? 2 : 1;
int n_lower = (m_right == spline::not_a_knot) ? 2 : 1;
internal::band_matrix A(n,n_upper,n_lower);
std::vector<double> rhs(n);
for(int i=1; i<n-1; i++) {
A(i,i-1)=1.0/3.0*(x[i]-x[i-1]);
A(i,i)=2.0/3.0*(x[i+1]-x[i-1]);
A(i,i+1)=1.0/3.0*(x[i+1]-x[i]);
rhs[i]=(y[i+1]-y[i])/(x[i+1]-x[i]) - (y[i]-y[i-1])/(x[i]-x[i-1]);
}
// boundary conditions
if(m_left == spline::second_deriv) {
// 2*c[0] = f''
A(0,0)=2.0;
A(0,1)=0.0;
rhs[0]=m_left_value;
} else if(m_left == spline::first_deriv) {
// b[0] = f', needs to be re-expressed in terms of c:
// (2c[0]+c[1])(x[1]-x[0]) = 3 ((y[1]-y[0])/(x[1]-x[0]) - f')
A(0,0)=2.0*(x[1]-x[0]);
A(0,1)=1.0*(x[1]-x[0]);
rhs[0]=3.0*((y[1]-y[0])/(x[1]-x[0])-m_left_value);
} else if(m_left == spline::not_a_knot) {
// f'''(x[1]) exists, i.e. d[0]=d[1], or re-expressed in c:
// -h1*c[0] + (h0+h1)*c[1] - h0*c[2] = 0
A(0,0) = -(x[2]-x[1]);
A(0,1) = x[2]-x[0];
A(0,2) = -(x[1]-x[0]);
rhs[0] = 0.0;
} else {
assert(false);
}
if(m_right == spline::second_deriv) {
// 2*c[n-1] = f''
A(n-1,n-1)=2.0;
A(n-1,n-2)=0.0;
rhs[n-1]=m_right_value;
} else if(m_right == spline::first_deriv) {
// b[n-1] = f', needs to be re-expressed in terms of c:
// (c[n-2]+2c[n-1])(x[n-1]-x[n-2])
// = 3 (f' - (y[n-1]-y[n-2])/(x[n-1]-x[n-2]))
A(n-1,n-1)=2.0*(x[n-1]-x[n-2]);
A(n-1,n-2)=1.0*(x[n-1]-x[n-2]);
rhs[n-1]=3.0*(m_right_value-(y[n-1]-y[n-2])/(x[n-1]-x[n-2]));
} else if(m_right == spline::not_a_knot) {
// f'''(x[n-2]) exists, i.e. d[n-3]=d[n-2], or re-expressed in c:
// -h_{n-2}*c[n-3] + (h_{n-3}+h_{n-2})*c[n-2] - h_{n-3}*c[n-1] = 0
A(n-1,n-3) = -(x[n-1]-x[n-2]);
A(n-1,n-2) = x[n-1]-x[n-3];
A(n-1,n-1) = -(x[n-2]-x[n-3]);
rhs[0] = 0.0;
} else {
assert(false);
}
// solve the equation system to obtain the parameters c[]
m_c=A.lu_solve(rhs);
// calculate parameters b[] and d[] based on c[]
m_d.resize(n);
m_b.resize(n);
for(int i=0; i<n-1; i++) {
m_d[i]=1.0/3.0*(m_c[i+1]-m_c[i])/(x[i+1]-x[i]);
m_b[i]=(y[i+1]-y[i])/(x[i+1]-x[i])
- 1.0/3.0*(2.0*m_c[i]+m_c[i+1])*(x[i+1]-x[i]);
}
// for the right extrapolation coefficients (zero cubic term)
// f_{n-1}(x) = y_{n-1} + b*(x-x_{n-1}) + c*(x-x_{n-1})^2
double h=x[n-1]-x[n-2];
// m_c[n-1] is determined by the boundary condition
m_d[n-1]=0.0;
m_b[n-1]=3.0*m_d[n-2]*h*h+2.0*m_c[n-2]*h+m_b[n-2]; // = f'_{n-2}(x_{n-1})
if(m_right==first_deriv)
m_c[n-1]=0.0; // force linear extrapolation
} else if(type==cspline_hermite) {
// hermite cubic splines which are C^1 (cont. differentiable)
// and derivatives are specified on each grid point
// (here we use 3-point finite differences)
m_b.resize(n);
m_c.resize(n);
m_d.resize(n);
// set b to match 1st order derivative finite difference
for(int i=1; i<n-1; i++) {
const double h = m_x[i+1]-m_x[i];
const double hl = m_x[i]-m_x[i-1];
m_b[i] = -h/(hl*(hl+h))*m_y[i-1] + (h-hl)/(hl*h)*m_y[i]
+ hl/(h*(hl+h))*m_y[i+1];
}
// boundary conditions determine b[0] and b[n-1]
if(m_left==first_deriv) {
m_b[0]=m_left_value;
} else if(m_left==second_deriv) {
const double h = m_x[1]-m_x[0];
m_b[0]=0.5*(-m_b[1]-0.5*m_left_value*h+3.0*(m_y[1]-m_y[0])/h);
} else if(m_left == not_a_knot) {
// f''' continuous at x[1]
const double h0 = m_x[1]-m_x[0];
const double h1 = m_x[2]-m_x[1];
m_b[0]= -m_b[1] + 2.0*(m_y[1]-m_y[0])/h0
+ h0*h0/(h1*h1)*(m_b[1]+m_b[2]-2.0*(m_y[2]-m_y[1])/h1);
} else {
assert(false);
}
if(m_right==first_deriv) {
m_b[n-1]=m_right_value;
m_c[n-1]=0.0;
} else if(m_right==second_deriv) {
const double h = m_x[n-1]-m_x[n-2];
m_b[n-1]=0.5*(-m_b[n-2]+0.5*m_right_value*h+3.0*(m_y[n-1]-m_y[n-2])/h);
m_c[n-1]=0.5*m_right_value;
} else if(m_right == not_a_knot) {
// f''' continuous at x[n-2]
const double h0 = m_x[n-2]-m_x[n-3];
const double h1 = m_x[n-1]-m_x[n-2];
m_b[n-1]= -m_b[n-2] + 2.0*(m_y[n-1]-m_y[n-2])/h1 + h1*h1/(h0*h0)
*(m_b[n-3]+m_b[n-2]-2.0*(m_y[n-2]-m_y[n-3])/h0);
// f'' continuous at x[n-1]: c[n-1] = 3*d[n-2]*h[n-2] + c[n-1]
m_c[n-1]=(m_b[n-2]+2.0*m_b[n-1])/h1-3.0*(m_y[n-1]-m_y[n-2])/(h1*h1);
} else {
assert(false);
}
m_d[n-1]=0.0;
// parameters c and d are determined by continuity and differentiability
set_coeffs_from_b();
} else {
assert(false);
}
// for left extrapolation coefficients
m_c0 = (m_left==first_deriv) ? 0.0 : m_c[0];
}
bool spline::make_monotonic()
{
assert(m_x.size()==m_y.size());
assert(m_x.size()==m_b.size());
assert(m_x.size()>2);
bool modified = false;
const int n=(int)m_x.size();
// make sure: input data monotonic increasing --> b_i>=0
// input data monotonic decreasing --> b_i<=0
for(int i=0; i<n; i++) {
int im1 = std::max(i-1, 0);
int ip1 = std::min(i+1, n-1);
if( ((m_y[im1]<=m_y[i]) && (m_y[i]<=m_y[ip1]) && m_b[i]<0.0) ||
((m_y[im1]>=m_y[i]) && (m_y[i]>=m_y[ip1]) && m_b[i]>0.0) ) {
modified=true;
m_b[i]=0.0;
}
}
// if input data is monotonic (b[i], b[i+1], avg have all the same sign)
// ensure a sufficient criteria for monotonicity is satisfied:
// sqrt(b[i]^2+b[i+1]^2) <= 3 |avg|, with avg=(y[i+1]-y[i])/h,
for(int i=0; i<n-1; i++) {
double h = m_x[i+1]-m_x[i];
double avg = (m_y[i+1]-m_y[i])/h;
if( avg==0.0 && (m_b[i]!=0.0 || m_b[i+1]!=0.0) ) {
modified=true;
m_b[i]=0.0;
m_b[i+1]=0.0;
} else if( (m_b[i]>=0.0 && m_b[i+1]>=0.0 && avg>0.0) ||
(m_b[i]<=0.0 && m_b[i+1]<=0.0 && avg<0.0) ) {
// input data is monotonic
double r = sqrt(m_b[i]*m_b[i]+m_b[i+1]*m_b[i+1])/std::fabs(avg);
if(r>3.0) {
// sufficient criteria for monotonicity: r<=3
// adjust b[i] and b[i+1]
modified=true;
m_b[i] *= (3.0/r);
m_b[i+1] *= (3.0/r);
}
}
}
if(modified==true) {
set_coeffs_from_b();
m_made_monotonic=true;
}
return modified;
}
// return the closest idx so that m_x[idx] <= x (return 0 if x<m_x[0])
size_t spline::find_closest(double x) const
{
std::vector<double>::const_iterator it;
it=std::upper_bound(m_x.begin(),m_x.end(),x); // *it > x
size_t idx = std::max( int(it-m_x.begin())-1, 0); // m_x[idx] <= x
return idx;
}
double spline::operator() (double x) const
{
// polynomial evaluation using Horner's scheme
// TODO: consider more numerically accurate algorithms, e.g.:
// - Clenshaw
// - Even-Odd method by A.C.R. Newbery
// - Compensated Horner Scheme
size_t n=m_x.size();
size_t idx=find_closest(x);
double h=x-m_x[idx];
double interpol;
if(x<m_x[0]) {
// extrapolation to the left
interpol=(m_c0*h + m_b[0])*h + m_y[0];
} else if(x>m_x[n-1]) {
// extrapolation to the right
interpol=(m_c[n-1]*h + m_b[n-1])*h + m_y[n-1];
} else {
// interpolation
interpol=((m_d[idx]*h + m_c[idx])*h + m_b[idx])*h + m_y[idx];
}
return interpol;
}
double spline::deriv(int order, double x) const
{
assert(order>0);
size_t n=m_x.size();
size_t idx = find_closest(x);
double h=x-m_x[idx];
double interpol;
if(x<m_x[0]) {
// extrapolation to the left
switch(order) {
case 1:
interpol=2.0*m_c0*h + m_b[0];
break;
case 2:
interpol=2.0*m_c0;
break;
default:
interpol=0.0;
break;
}
} else if(x>m_x[n-1]) {
// extrapolation to the right
switch(order) {
case 1:
interpol=2.0*m_c[n-1]*h + m_b[n-1];
break;
case 2:
interpol=2.0*m_c[n-1];
break;
default:
interpol=0.0;
break;
}
} else {
// interpolation
switch(order) {
case 1:
interpol=(3.0*m_d[idx]*h + 2.0*m_c[idx])*h + m_b[idx];
break;
case 2:
interpol=6.0*m_d[idx]*h + 2.0*m_c[idx];
break;
case 3:
interpol=6.0*m_d[idx];
break;
default:
interpol=0.0;
break;
}
}
return interpol;
}
std::vector<double> spline::solve(double y, bool ignore_extrapolation) const
{
std::vector<double> x; // roots for the entire spline
std::vector<double> root; // roots for each piecewise cubic
const size_t n=m_x.size();
// left extrapolation
if(ignore_extrapolation==false) {
root = internal::solve_cubic(m_y[0]-y,m_b[0],m_c0,0.0,1);
for(size_t j=0; j<root.size(); j++) {
if(root[j]<0.0) {
x.push_back(m_x[0]+root[j]);
}
}
}
// brute force check if piecewise cubic has roots in their resp. segment
// TODO: make more efficient
for(size_t i=0; i<n-1; i++) {
root = internal::solve_cubic(m_y[i]-y,m_b[i],m_c[i],m_d[i],1);
for(size_t j=0; j<root.size(); j++) {
double h = (i>0) ? (m_x[i]-m_x[i-1]) : 0.0;
double eps = internal::get_eps()*512.0*std::min(h,1.0);
if( (-eps<=root[j]) && (root[j]<m_x[i+1]-m_x[i]) ) {
double new_root = m_x[i]+root[j];
if(x.size()>0 && x.back()+eps > new_root) {
x.back()=new_root; // avoid spurious duplicate roots
} else {
x.push_back(new_root);
}
}
}
}
// right extrapolation
if(ignore_extrapolation==false) {
root = internal::solve_cubic(m_y[n-1]-y,m_b[n-1],m_c[n-1],0.0,1);
for(size_t j=0; j<root.size(); j++) {
if(0.0<=root[j]) {
x.push_back(m_x[n-1]+root[j]);
}
}
}
return x;
};
#ifdef HAVE_SSTREAM
std::string spline::info() const
{
std::stringstream ss;
ss << "type " << m_type << ", left boundary deriv " << m_left << " = ";
ss << m_left_value << ", right boundary deriv " << m_right << " = ";
ss << m_right_value << std::endl;
if(m_made_monotonic) {
ss << "(spline has been adjusted for piece-wise monotonicity)";
}
return ss.str();
}
#endif // HAVE_SSTREAM
namespace internal
{
// band_matrix implementation
// -------------------------
band_matrix::band_matrix(int dim, int n_u, int n_l)
{
resize(dim, n_u, n_l);
}
void band_matrix::resize(int dim, int n_u, int n_l)
{
assert(dim>0);
assert(n_u>=0);
assert(n_l>=0);
m_upper.resize(n_u+1);
m_lower.resize(n_l+1);
for(size_t i=0; i<m_upper.size(); i++) {
m_upper[i].resize(dim);
}
for(size_t i=0; i<m_lower.size(); i++) {
m_lower[i].resize(dim);
}
}
int band_matrix::dim() const
{
if(m_upper.size()>0) {
return (int)m_upper[0].size();
} else {
return 0;
}
}
// defines the new operator (), so that we can access the elements
// by A(i,j), index going from i=0,...,dim()-1
double & band_matrix::operator () (int i, int j)
{
int k=j-i; // what band is the entry
assert( (i>=0) && (i<dim()) && (j>=0) && (j<dim()) );
assert( (-num_lower()<=k) && (k<=num_upper()) );
// k=0 -> diagonal, k<0 lower left part, k>0 upper right part
if(k>=0) return m_upper[k][i];
else return m_lower[-k][i];
}
double band_matrix::operator () (int i, int j) const
{
int k=j-i; // what band is the entry
assert( (i>=0) && (i<dim()) && (j>=0) && (j<dim()) );
assert( (-num_lower()<=k) && (k<=num_upper()) );
// k=0 -> diagonal, k<0 lower left part, k>0 upper right part
if(k>=0) return m_upper[k][i];
else return m_lower[-k][i];
}
// second diag (used in LU decomposition), saved in m_lower
double band_matrix::saved_diag(int i) const
{
assert( (i>=0) && (i<dim()) );
return m_lower[0][i];
}
double & band_matrix::saved_diag(int i)
{
assert( (i>=0) && (i<dim()) );
return m_lower[0][i];
}
// LR-Decomposition of a band matrix
void band_matrix::lu_decompose()
{
int i_max,j_max;
int j_min;
double x;
// preconditioning
// normalize column i so that a_ii=1
for(int i=0; i<this->dim(); i++) {
assert(this->operator()(i,i)!=0.0);
this->saved_diag(i)=1.0/this->operator()(i,i);
j_min=std::max(0,i-this->num_lower());
j_max=std::min(this->dim()-1,i+this->num_upper());
for(int j=j_min; j<=j_max; j++) {
this->operator()(i,j) *= this->saved_diag(i);
}
this->operator()(i,i)=1.0; // prevents rounding errors
}
// Gauss LR-Decomposition
for(int k=0; k<this->dim(); k++) {
i_max=std::min(this->dim()-1,k+this->num_lower()); // num_lower not a mistake!
for(int i=k+1; i<=i_max; i++) {
assert(this->operator()(k,k)!=0.0);
x=-this->operator()(i,k)/this->operator()(k,k);
this->operator()(i,k)=-x; // assembly part of L
j_max=std::min(this->dim()-1,k+this->num_upper());
for(int j=k+1; j<=j_max; j++) {
// assembly part of R
this->operator()(i,j)=this->operator()(i,j)+x*this->operator()(k,j);
}
}
}
}
// solves Ly=b
std::vector<double> band_matrix::l_solve(const std::vector<double>& b) const
{
assert( this->dim()==(int)b.size() );
std::vector<double> x(this->dim());
int j_start;
double sum;
for(int i=0; i<this->dim(); i++) {
sum=0;
j_start=std::max(0,i-this->num_lower());
for(int j=j_start; j<i; j++) sum += this->operator()(i,j)*x[j];
x[i]=(b[i]*this->saved_diag(i)) - sum;
}
return x;
}
// solves Rx=y
std::vector<double> band_matrix::r_solve(const std::vector<double>& b) const
{
assert( this->dim()==(int)b.size() );
std::vector<double> x(this->dim());
int j_stop;
double sum;
for(int i=this->dim()-1; i>=0; i--) {
sum=0;
j_stop=std::min(this->dim()-1,i+this->num_upper());
for(int j=i+1; j<=j_stop; j++) sum += this->operator()(i,j)*x[j];
x[i]=( b[i] - sum ) / this->operator()(i,i);
}
return x;
}
std::vector<double> band_matrix::lu_solve(const std::vector<double>& b,
bool is_lu_decomposed)
{
assert( this->dim()==(int)b.size() );
std::vector<double> x,y;
if(is_lu_decomposed==false) {
this->lu_decompose();
}
y=this->l_solve(b);
x=this->r_solve(y);
return x;
}
// machine precision of a double, i.e. the successor of 1 is 1+eps
double get_eps()
{
//return std::numeric_limits<double>::epsilon(); // __DBL_EPSILON__
return 2.2204460492503131e-16; // 2^-52
}
// solutions for a + b*x = 0
std::vector<double> solve_linear(double a, double b)
{
std::vector<double> x; // roots
if(b==0.0) {
if(a==0.0) {
// 0*x = 0
x.resize(1);
x[0] = 0.0; // any x solves it but we need to pick one
return x;
} else {
// 0*x + ... = 0, no solution
return x;
}
} else {
x.resize(1);
x[0] = -a/b;
return x;
}
}
// solutions for a + b*x + c*x^2 = 0
std::vector<double> solve_quadratic(double a, double b, double c,
int newton_iter=0)
{
if(c==0.0) {
return solve_linear(a,b);
}
// rescale so that we solve x^2 + 2p x + q = (x+p)^2 + q - p^2 = 0
double p=0.5*b/c;
double q=a/c;
double discr = p*p-q;
const double eps=0.5*internal::get_eps();
double discr_err = (6.0*(p*p)+3.0*fabs(q)+fabs(discr))*eps;
std::vector<double> x; // roots
if(fabs(discr)<=discr_err) {
// discriminant is zero --> one root
x.resize(1);
x[0] = -p;
} else if(discr<0) {
// no root
} else {
// two roots
x.resize(2);
x[0] = -p - sqrt(discr);
x[1] = -p + sqrt(discr);
}
// improve solution via newton steps
for(size_t i=0; i<x.size(); i++) {
for(int k=0; k<newton_iter; k++) {
double f = (c*x[i] + b)*x[i] + a;
double f1 = 2.0*c*x[i] + b;
// only adjust if slope is large enough
if(fabs(f1)>1e-8) {
x[i] -= f/f1;
}
}
}
return x;
}
// solutions for the cubic equation: a + b*x +c*x^2 + d*x^3 = 0
// this is a naive implementation of the analytic solution without
// optimisation for speed or numerical accuracy
// newton_iter: number of newton iterations to improve analytical solution
// see also
// gsl: gsl_poly_solve_cubic() in solve_cubic.c
// octave: roots.m - via eigenvalues of the Frobenius companion matrix
std::vector<double> solve_cubic(double a, double b, double c, double d,
int newton_iter)
{
if(d==0.0) {
return solve_quadratic(a,b,c,newton_iter);
}
// convert to normalised form: a + bx + cx^2 + x^3 = 0
if(d!=1.0) {
a/=d;
b/=d;
c/=d;
}
// convert to depressed cubic: z^3 - 3pz - 2q = 0
// via substitution: z = x + c/3
std::vector<double> z; // roots of the depressed cubic
double p = -(1.0/3.0)*b + (1.0/9.0)*(c*c);
double r = 2.0*(c*c)-9.0*b;
double q = -0.5*a - (1.0/54.0)*(c*r);
double discr=p*p*p-q*q; // discriminant
// calculating numerical round-off errors with assumptions:
// - each operation is precise but each intermediate result x
// when stored has max error of x*eps
// - only multiplication with a power of 2 introduces no new error
// - a,b,c,d and some fractions (e.g. 1/3) have rounding errors eps
// - p_err << |p|, q_err << |q|, ... (this is violated in rare cases)
// would be more elegant to use boost::numeric::interval<double>
const double eps = internal::get_eps();
double p_err = eps*((3.0/3.0)*fabs(b)+(4.0/9.0)*(c*c)+fabs(p));
double r_err = eps*(6.0*(c*c)+18.0*fabs(b)+fabs(r));
double q_err = 0.5*fabs(a)*eps + (1.0/54.0)*fabs(c)*(r_err+fabs(r)*3.0*eps)
+ fabs(q)*eps;
double discr_err = (p*p) * (3.0*p_err + fabs(p)*2.0*eps)
+ fabs(q) * (2.0*q_err + fabs(q)*eps) + fabs(discr)*eps;
// depending on the discriminant we get different solutions
if(fabs(discr)<=discr_err) {
// discriminant zero: one or two real roots
if(fabs(p)<=p_err) {
// p and q are zero: single root
z.resize(1);
z[0] = 0.0; // triple root
} else {
z.resize(2);
z[0] = 2.0*q/p; // single root
z[1] = -0.5*z[0]; // double root
}
} else if(discr>0) {
// three real roots: via trigonometric solution
z.resize(3);
double ac = (1.0/3.0) * acos( q/(p*sqrt(p)) );
double sq = 2.0*sqrt(p);
z[0] = sq * cos(ac);
z[1] = sq * cos(ac-2.0*M_PI/3.0);
z[2] = sq * cos(ac-4.0*M_PI/3.0);
} else if (discr<0.0) {
// single real root: via Cardano's fromula
z.resize(1);
double sgnq = (q >= 0 ? 1 : -1);
double basis = fabs(q) + sqrt(-discr);
double C = sgnq * pow(basis, 1.0/3.0); // c++11 has std::cbrt()
z[0] = C + p/C;
}
for(size_t i=0; i<z.size(); i++) {
// convert depressed cubic roots to original cubic: x = z - c/3
z[i] -= (1.0/3.0)*c;
// improve solution via newton steps
for(int k=0; k<newton_iter; k++) {
double f = ((z[i] + c)*z[i] + b)*z[i] + a;
double f1 = (3.0*z[i] + 2.0*c)*z[i] + b;
// only adjust if slope is large enough
if(fabs(f1)>1e-8) {
z[i] -= f/f1;
}
}
}
// ensure if a=0 we get exactly x=0 as root
// TODO: remove this fudge
if(a==0.0) {
assert(z.size()>0); // cubic should always have at least one root
double xmin=fabs(z[0]);
size_t imin=0;
for(size_t i=1; i<z.size(); i++) {
if(xmin>fabs(z[i])) {
xmin=fabs(z[i]);
imin=i;
}
}
z[imin]=0.0; // replace the smallest absolute value with 0
}
std::sort(z.begin(), z.end());
return z;
}
} // namespace internal
} // namespace tk
#if !defined(_MSC_VER)
#pragma GCC diagnostic pop
#endif
#endif /* TK_SPLINE_H */

View file

@ -11108,6 +11108,19 @@ msgid ""
"easily."
msgstr ""
msgid "Brim follows compensated outline"
msgstr ""
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
msgid "Brim ears"
msgstr ""

View file

@ -12177,6 +12177,26 @@ msgstr ""
"Un espai entre la línia de la Vora d'Adherència més interna i l'objecte pot "
"fer que la Vora d'Adherència s'elimini més fàcilment"
msgid "Brim follows compensated outline"
msgstr "Vora d'Adherència segueix un esquema compensat"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Quan està activat, vora d'adherència s'alinea amb la geometria del perímetre de la primera capa "
"després d'aplicar la compensació del peu d'elefant.\n"
"Aquesta opció està pensada per als casos en què la compensació del peu d'elefant "
"altera significativament la petjada de la primera capa.\n"
"\n"
"Si la vostra configuració actual ja funciona bé, activar-la pot ser innecessari i "
"pot fer que el vora d'adherència es fusioni amb les capes superiors."
msgid "Brim ears"
msgstr "Orelles de la Vora d'Adherència"

View file

@ -11730,6 +11730,26 @@ msgid ""
msgstr ""
"Mezera mezi nejvnitřnějším límcem a předmětem může usnadnit odstranění límce"
msgid "Brim follows compensated outline"
msgstr "Límec sleduje kompenzovaný obrys"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Když je povoleno, límec je zarovnán s obvodovou geometrií první vrstvy "
"po použití kompenzace sloní nohy.\n"
"Tato možnost je určena pro případy, kdy je kompenzace sloní nohy "
"výrazně mění stopu první vrstvy.\n"
"\n"
"Pokud vaše aktuální nastavení již funguje dobře, jeho povolení může být zbytečné a "
"může způsobit spojení límec s horními vrstvami."
msgid "Brim ears"
msgstr "Uši límce"

View file

@ -12766,6 +12766,26 @@ msgstr ""
"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das Abnehmen "
"des Randes erleichtern"
msgid "Brim follows compensated outline"
msgstr "Umrandung folgt einem kompensierten Umriss"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Wenn diese Option aktiviert ist, wird umrandung an der Umfangsgeometrie der ersten Ebene ausgerichtet "
"nach Anwendung der Elefantenfußkompensation.\n"
"Diese Option ist für Fälle gedacht, in denen eine Elefantenfuß-Entschädigung vorliegt "
"verändert den Footprint der ersten Schicht erheblich.\n"
"\n"
"Wenn Ihr aktuelles Setup bereits gut funktioniert, kann es unnötig sein, es zu aktivieren "
"kann dazu führen, dass der umrandung mit den oberen Schichten verschmilzt."
msgid "Brim ears"
msgstr "Brim Ohren"

View file

@ -11327,6 +11327,26 @@ msgstr ""
"This creates a gap between the innermost brim line and the object and can "
"make the brim easier to remove."
msgid "Brim follows compensated outline"
msgstr "Brim follows compensated outline"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgid "Brim ears"
msgstr ""

View file

@ -12147,6 +12147,26 @@ msgstr ""
"Un hueco entre la línea más interna del borde de adherencia y el objeto "
"puede hacer que el borde de adherencia se retire más fácilmente"
msgid "Brim follows compensated outline"
msgstr "Borde de adherencia sigue el esquema compensado"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Cuando está habilitado, el borde de adherencia está alineado con la geometría del perímetro de la primera capa "
"después de aplicar la compensación de pata de elefante.\n"
"Esta opción está destinada a casos en los que la Compensación por pata de elefante "
"altera significativamente la huella de la primera capa.\n"
"\n"
"Si su configuración actual ya funciona bien, habilitarla puede ser innecesario y "
"puede hacer que el borde de adherencia se fusione con las capas superiores."
msgid "Brim ears"
msgstr "Orejas de borde"

View file

@ -12298,6 +12298,26 @@ msgstr ""
"Un espace entre la ligne de bord la plus interne et l'objet peut faciliter "
"le retrait du bord"
msgid "Brim follows compensated outline"
msgstr "Bordure suit le contour compensé"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Lorsqu'il est activé, le bordure est aligné avec la géométrie du périmètre de la première couche "
"après l'application de la compensation du pied d'éléphant.\n"
"Cette option est destinée aux cas où la compensation du pied d'éléphant "
"modifie considérablement lempreinte de la première couche.\n"
"\n"
"Si votre configuration actuelle fonctionne déjà bien, son activation peut être inutile et "
"peut provoquer la fusion du bordure avec les couches supérieures."
msgid "Brim ears"
msgstr "Bordures à oreilles"

View file

@ -11603,6 +11603,26 @@ msgstr ""
"A legbelső peremvonal és a tárgy közötti rés, ami megkönnyítheti a perem "
"eltávolítását"
msgid "Brim follows compensated outline"
msgstr "A Perem a kompenzált körvonalat követi"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Ha engedélyezve van, a perem igazodik az első réteg kerületi geometriájához "
"az elefánttalp-kompenzáció alkalmazása után.\n"
"Ez az opció arra az esetre szolgál, amikor az elefánttalp-kompenzáció "
"jelentősen megváltoztatja az első réteg alapterületét.\n"
"\n"
"Ha a jelenlegi beállítás már jól működik, előfordulhat, hogy az engedélyezése felesleges és "
"a perem összeolvadását okozhatja a felső rétegekkel."
msgid "Brim ears"
msgstr "Karimás fülek"

View file

@ -12234,6 +12234,26 @@ msgstr ""
"Crea uno spazio tra la linea più interna della tesa e l'oggetto per rendere "
"più facile la rimozione della tesa."
msgid "Brim follows compensated outline"
msgstr "Tesa segue il contorno compensato"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Quando abilitato, tesa è allineato con la geometria perimetrale del primo strato "
"dopo l'applicazione della compensazione del piede di elefante.\n"
"Questa opzione è prevista per i casi in cui è prevista la compensazione del piede di elefante "
"altera significativamente l'impronta del primo strato.\n"
"\n"
"Se la tua configurazione attuale funziona già bene, abilitarla potrebbe non essere necessaria e "
"può causare la fusione del tesa con gli strati superiori."
msgid "Brim ears"
msgstr "Tesa ad orecchio"

View file

@ -11394,6 +11394,26 @@ msgstr ""
"ブリムを取り外しやすくする為、一番内側のブリムラインをモデルと少し距離を設け"
"ます。"
msgid "Brim follows compensated outline"
msgstr "ブリム は補正されたアウトラインに従います"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"有効にすると、ブリム は最初の層の周囲ジオメトリと位置合わせされます。 "
"エレファント・フット・コンペンセーション適用後。\n"
"このオプションは、象の足の補正が必要な場合を対象としています。 "
"最初の層のフットプリントを大幅に変更します。\n"
"\n"
"現在の設定がすでにうまく機能している場合は、それを有効にする必要はないかもしれません。 "
"ブリム が上位層と融合する可能性があります。"
msgid "Brim ears"
msgstr ""

View file

@ -11817,6 +11817,26 @@ msgstr ""
"가장 안쪽 브림 라인과 객체 사이에 간격을 주어 쉽게 브림을 제거 할 수 있게 합"
"니다"
msgid "Brim follows compensated outline"
msgstr "브림는 보상된 아웃라인을 따릅니다."
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"활성화되면 브림은 첫 번째 레이어 주변 형상과 정렬됩니다 "
"코끼리 발 보정이 적용된 후.\n"
"이 옵션은 코끼리 발 보상이 적용되는 경우를 위한 것입니다 "
"첫 번째 레이어 공간을 크게 변경합니다.\n"
"\n"
"현재 설정이 이미 잘 작동하는 경우 활성화할 필요가 없으며 "
"브림이 상위 레이어와 융합될 수 있습니다."
msgid "Brim ears"
msgstr "브림 귀"

View file

@ -12183,6 +12183,26 @@ msgstr ""
"Sukuriamas tarpas tarp vidinės krašto linijos ir objekto, todėl galima "
"lengviau jį atskirti."
msgid "Brim follows compensated outline"
msgstr "Kraštas atitinka kompensuotą kontūrą"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Kai įjungta, kraštas yra sulygiuotas su pirmojo sluoksnio perimetro geometrija "
"pritaikius dramblio pėdos kompensaciją.\n"
"Ši parinktis skirta tais atvejais, kai kompensuojama dramblio pėda "
"žymiai pakeičia pirmojo sluoksnio pėdsaką.\n"
"\n"
"Jei dabartinė sąranka jau veikia gerai, jos įjungti gali nebūti ir "
"gali sukelti kraštas susiliejimą su viršutiniais sluoksniais."
msgid "Brim ears"
msgstr "Krašto \"ausys\""

View file

@ -11751,6 +11751,26 @@ msgstr ""
"Dit creëert ruimte tussen de binnenste brimlijn en het object en zorgt "
"ervoor dat het object eenvoudiger van het printbed kan worden verwijderd."
msgid "Brim follows compensated outline"
msgstr "Rand volgt de gecompenseerde omtrek"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Indien ingeschakeld, wordt de rand uitgelijnd met de omtrekgeometrie van de eerste laag "
"nadat olifantenvoetcompensatie is toegepast.\n"
"Deze optie is bedoeld voor gevallen waarin sprake is van olifantenvoetcompensatie "
"verandert de voetafdruk van de eerste laag aanzienlijk.\n"
"\n"
"Als uw huidige configuratie al goed werkt, kan het inschakelen hiervan niet nodig zijn "
"kan ervoor zorgen dat de rand samensmelt met de bovenste lagen."
msgid "Brim ears"
msgstr "Rand oren"

View file

@ -12130,6 +12130,26 @@ msgstr ""
"Szczelina między najbardziej wewnętrzną linią brimu a obiektem może ułatwić "
"usunięcie brimu"
msgid "Brim follows compensated outline"
msgstr "Brim podąża za skompensowanym konturem"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Po włączeniu brim jest wyrównany z geometrią obwodu pierwszej warstwy "
"po zastosowaniu Kompensacji Stopy Słonia.\n"
"Ta opcja jest przeznaczona dla przypadków, w których występuje kompensacja stopy słonia "
"znacząco zmienia ślad pierwszej warstwy.\n"
"\n"
"Jeśli Twoja bieżąca konfiguracja już działa dobrze, włączenie jej może być niepotrzebne i "
"może spowodować stopienie brim z górnymi warstwami."
msgid "Brim ears"
msgstr "Uszy brim"

View file

@ -12555,6 +12555,26 @@ msgstr ""
"Um espaço entre a linha mais interna da borda e o objeto pode facilitar a "
"remoção da borda."
msgid "Brim follows compensated outline"
msgstr "Borda segue contorno compensado"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Quando ativado, o borda fica alinhado com a geometria do perímetro da primeira camada "
"após a aplicação da Compensação da Pé de Elefante.\n"
"Esta opção destina-se aos casos em que a Compensação da Pé de Elefante "
"altera significativamente a pegada da primeira camada.\n"
"\n"
"Se a sua configuração atual já funciona bem, ativá-la pode ser desnecessário e "
"pode fazer com que o borda se funda com as camadas superiores."
msgid "Brim ears"
msgstr "Orelhas da borda"

View file

@ -12291,6 +12291,26 @@ msgid ""
"easily."
msgstr "Смещение каймы от печатаемой модели, может облегчить её удаление."
msgid "Brim follows compensated outline"
msgstr "Кайма соответствует компенсированному контуру"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Если этот параметр включен, кайма выравнивается по геометрии периметра первого слоя "
"после применения компенсации «слоновьей стопы».\n"
"Эта опция предназначена для случаев, когда «Компенсация слоновой стопы» "
"существенно изменяет след первого слоя.\n"
"\n"
"Если ваша текущая настройка уже работает хорошо, ее включение может быть ненужным и "
"может привести к слиянию кайма с верхними слоями."
msgid "Brim ears"
msgstr "Ушки каймы"

View file

@ -11574,6 +11574,26 @@ msgstr ""
"Mellanrum mellan innersta brim linjen och objektet kan underlätta vid "
"borttagande av brim"
msgid "Brim follows compensated outline"
msgstr "Brim följer kompenserad disposition"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"När den är aktiverad, är brim justerad med det första lagrets omkretsgeometri "
"efter att elefantfotskompensation tillämpas.\n"
"Detta alternativ är avsett för fall där elefantfotskompensation "
"förändrar det första skiktets fotavtryck avsevärt.\n"
"\n"
"Om din nuvarande inställning redan fungerar bra kan det vara onödigt att aktivera det och "
"kan få brim att smälta samman med de övre lagren."
msgid "Brim ears"
msgstr "Brätte öron"

View file

@ -12097,6 +12097,26 @@ msgstr ""
"En içteki kenar çizgisi ile nesne arasındaki boşluk, kenarlığın daha kolay "
ıkarılmasını sağlayabilir."
msgid "Brim follows compensated outline"
msgstr "Kenar telafi edilen taslağı takip ediyor"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Etkinleştirildiğinde, kenar birinci katmanın çevre geometrisiyle hizalanır "
"Fil Ayağı Telafisi uygulandıktan sonra.\n"
"Bu seçenek Fil Ayağı Telafisinin geçerli olmadığı durumlar için tasarlanmıştır "
"ilk katmanın ayak izini önemli ölçüde değiştirir.\n"
"\n"
"Mevcut kurulumunuz zaten iyi çalışıyorsa, bunu etkinleştirmek gereksiz olabilir ve "
"kenar'in üst katmanlarla kaynaşmasına neden olabilir."
msgid "Brim ears"
msgstr "Kenar kulakları"

View file

@ -12138,6 +12138,26 @@ msgstr ""
"Зазор між першою внутрішньою лінією кайми та об'єктом може сприяти легшому "
"відокремленню кайми"
msgid "Brim follows compensated outline"
msgstr "Кайма має компенсований контур"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Якщо ввімкнено, кайма вирівнюється з геометрією периметра першого рівня "
"після застосування Elephant Foot Compensation.\n"
"Ця опція призначена для випадків компенсації слонячої стопи "
"значно змінює поверхню першого шару.\n"
"\n"
"Якщо ваші поточні налаштування вже працюють добре, увімкнення їх може бути непотрібним "
"може призвести до злиття кайма з верхніми шарами."
msgid "Brim ears"
msgstr "Вушка кайми"

View file

@ -11926,6 +11926,26 @@ msgstr ""
"Khoảng cách giữa đường brim trong cùng và đối tượng có thể làm cho brim dễ "
"dàng tháo hơn."
msgid "Brim follows compensated outline"
msgstr "Brim tuân theo phác thảo được bù đắp"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"Khi được bật, brim sẽ được căn chỉnh theo hình học chu vi lớp đầu tiên "
"sau khi áp dụng Bồi thường bàn chân voi.\n"
"Tùy chọn này dành cho các trường hợp Bồi thường chân voi "
"làm thay đổi đáng kể dấu chân lớp đầu tiên.\n"
"\n"
"Nếu thiết lập hiện tại của bạn đã hoạt động tốt, việc bật nó có thể không cần thiết và "
"có thể khiến brim kết hợp với các lớp trên."
msgid "Brim ears"
msgstr "Tai brim"

View file

@ -2490,7 +2490,7 @@ msgid "Plate"
msgstr "盘"
msgid "Brim"
msgstr "Brim"
msgstr "边缘"
msgid "Object/Part Setting"
msgstr "对象/零件设置"
@ -11493,6 +11493,26 @@ msgid ""
"easily."
msgstr "在brim和模型之间设置间隙能够让brim更容易剥离"
msgid "Brim follows compensated outline"
msgstr "边缘 遵循补偿轮廓"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"启用后,边缘 与第一层周边几何体对齐 "
"应用象脚补偿后。\n"
"此选项适用于象脚补偿的情况 "
"显着改变第一层足迹。\n"
"\n"
"如果您当前的设置已经运行良好,则可能没有必要启用它,并且 "
"可以导致 边缘 与上层融合。"
msgid "Brim ears"
msgstr "圆盘"

View file

@ -2493,7 +2493,7 @@ msgid "Plate"
msgstr "列印板"
msgid "Brim"
msgstr "Brim"
msgstr "邊緣"
msgid "Object/Part Setting"
msgstr "物件/零件 設定"
@ -11560,6 +11560,26 @@ msgid ""
"easily."
msgstr "在 Brim 和模型之間設定間隙,能夠讓 Brim 更容易拆除"
msgid "Brim follows compensated outline"
msgstr "邊緣 遵循補償輪廓"
msgid ""
"When enabled, the brim is aligned with the first-layer perimeter geometry "
"after Elephant Foot Compensation is applied.\n"
"This option is intended for cases where Elephant Foot Compensation "
"significantly alters the first-layer footprint.\n"
"\n"
"If your current setup already works well, enabling it may be unnecessary and "
"can cause the brim to fuse with upper layers."
msgstr ""
"啟用後,邊緣 與第一層周邊幾何體對齊 "
"應用像腳補償後。\n"
"此選項適用於像腳補償的情況 "
"顯著改變第一層足跡。\n"
"\n"
"如果您當前的設置已經運行良好,則可能沒有必要啟用它,並且 "
"可以導致 邊緣 與上層融合。"
msgid "Brim ears"
msgstr "耳狀 Brim"

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 18 18"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg4"
sodipodi:docname="axis_toggle.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="true"
inkscape:zoom="64.833333"
inkscape:cx="9"
inkscape:cy="8.6915168"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g15"><inkscape:grid
id="grid4"
units="px"
originx="0"
originy="0"
spacingx="1"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="false" /><inkscape:grid
type="axonomgrid"
id="grid8"
units="pt"
originx="9"
originy="9"
spacingx="3.7795276"
spacingy="1.3333333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="4"
dotted="false"
gridanglex="36"
gridanglez="36"
enabled="true"
visible="true" /><inkscape:grid
type="modular"
id="grid9"
units="px"
originx="0"
originy="0"
spacingx="151.1811"
spacingy="151.1811"
empcolor="#0047cb"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="0"
marginx="0"
marginy="0"
gapx="37.795276"
gapy="37.795276"
enabled="true"
visible="true" /><inkscape:grid
type="axonomgrid"
id="grid10"
units="px"
originx="0"
originy="0"
spacingx="3.7795276"
spacingy="3.7795276"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
enabled="false"
visible="true" /></sodipodi:namedview><defs
id="defs4" />
<g
id="g15"
transform="matrix(0.129199,0,0,0.129199,22.9215,0.522556)">
<g
transform="matrix(8.25599,0,0,8.25599,-182.056,-21.0726)"
id="g1"
style="display:inline">
<circle
cx="9"
cy="10.5"
r="7.5"
style="display:inline;fill:#c4c4c4"
id="circle1" />
</g>
<g
id="g19"
inkscape:label="grid"
style="display:inline;stroke:#8d8d8d;stroke-opacity:1;stroke-linecap:square"><path
id="path3"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -157.72198 101.92044 L -57.660489 29.22151 " /><path
id="path8"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16207 123.17697 L -45.951829 61.994656 " /><path
id="path10"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 62.090704 L -85.342701 123.17697 " /><path
id="path21"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 69.140098 L -85.210515 7.9577807 " /><path
id="path23"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16206 8.0538225 L -46.084024 69.140097 " /><path
id="path25"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -57.782786 101.92044 L -157.72198 29.310363 " /><circle
cx="9"
cy="10.5"
r="7.5"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;fill:none;stroke:#000000;stroke-opacity:1;stroke-width:0.28125025;stroke-dasharray:none;stroke-dashoffset:0"
id="circle2"
transform="matrix(8.2559904,0,0,8.2559904,-182.056,-21.0726)" /></g><path
style="display:inline;fill:#ff3c5b;fill-opacity:1;stroke:#ff3c5b;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -114.85451,70.775398 -31.59786,22.95719"
id="path6"
sodipodi:nodetypes="cc" /><path
style="display:inline;fill:#64c818;fill-opacity:1;stroke:#64c818;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -100.65025,70.775398 31.597858,22.95719"
id="path5"
sodipodi:nodetypes="cc" /><path
style="clip-rule:evenodd;display:inline;fill:#2f88e9;fill-opacity:1;fill-rule:evenodd;stroke:#2f88e9;stroke-width:1.33333;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;paint-order:fill markers stroke"
d="M 8.9999995,8 V 3"
id="path4"
sodipodi:nodetypes="cc"
transform="matrix(7.739998,0,0,7.739998,-177.41236,-4.0445824)" /><path
style="display:none;fill:#e6e6e6;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -86.44599,50.135404 -21.30639,-15.479996 -21.30638,15.479996 21.30638,15.479996 z"
id="path11" /><path
style="display:none;fill:#b3b3b3;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -129.05876,50.135404 v 30.959992 l 21.30638,15.479996 V 65.6154 Z"
id="path12" /><path
style="display:none;fill:#999999;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="M -107.75238,96.575392 -86.44599,81.095396 V 50.135404 L -107.75238,65.6154 Z"
id="path13" /></g>
</svg>

Before

Width:  |  Height:  |  Size: 7 KiB

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 18 18"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg4"
sodipodi:docname="axis_toggle_dark_test.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="true"
inkscape:zoom="64.833333"
inkscape:cx="9"
inkscape:cy="8.6915168"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g19"><inkscape:grid
id="grid4"
units="px"
originx="0"
originy="0"
spacingx="1"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="false" /><inkscape:grid
type="axonomgrid"
id="grid8"
units="pt"
originx="9"
originy="9"
spacingx="3.7795276"
spacingy="1.3333333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="4"
dotted="false"
gridanglex="36"
gridanglez="36"
enabled="true"
visible="true" /><inkscape:grid
type="modular"
id="grid9"
units="px"
originx="0"
originy="0"
spacingx="151.1811"
spacingy="151.1811"
empcolor="#0047cb"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="0"
marginx="0"
marginy="0"
gapx="37.795276"
gapy="37.795276"
enabled="true"
visible="true" /><inkscape:grid
type="axonomgrid"
id="grid10"
units="px"
originx="0"
originy="0"
spacingx="3.7795276"
spacingy="3.7795276"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
enabled="false"
visible="true" /></sodipodi:namedview><defs
id="defs4" />
<g
id="g15"
transform="matrix(0.129199,0,0,0.129199,22.9215,0.522556)">
<g
transform="matrix(8.25599,0,0,8.25599,-182.056,-21.0726)"
id="g1"
style="display:inline">
<circle
cx="9"
cy="10.5"
r="7.5"
style="display:inline;fill:#3b3b3b"
id="circle1" />
</g>
<g
id="g19"
inkscape:label="grid"
style="display:inline;stroke:#8d8d8d;stroke-opacity:1;stroke-linecap:square"><path
id="path3"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -157.72198 101.92044 L -57.660489 29.22151 " /><path
id="path8"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16207 123.17697 L -45.951829 61.994656 " /><path
id="path10"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 62.090704 L -85.342701 123.17697 " /><path
id="path21"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 69.140098 L -85.210515 7.9577807 " /><path
id="path23"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16206 8.0538225 L -46.084024 69.140097 " /><path
id="path25"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -57.782786 101.92044 L -157.72198 29.310363 " /><circle
cx="9"
cy="10.5"
r="7.5"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;fill:none;stroke:#000000;stroke-opacity:1;stroke-width:0.28125025;stroke-dasharray:none;stroke-dashoffset:0"
id="circle2"
transform="matrix(8.2559904,0,0,8.2559904,-182.056,-21.0726)" /></g><path
style="display:inline;fill:#ff3c5b;fill-opacity:1;stroke:#ff3c5b;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -114.85451,70.775398 -31.59786,22.95719"
id="path6"
sodipodi:nodetypes="cc" /><path
style="display:inline;fill:#64c818;fill-opacity:1;stroke:#64c818;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -100.65025,70.775398 31.597858,22.95719"
id="path5"
sodipodi:nodetypes="cc" /><path
style="clip-rule:evenodd;display:inline;fill:#2f88e9;fill-opacity:1;fill-rule:evenodd;stroke:#2f88e9;stroke-width:1.33333;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;paint-order:fill markers stroke"
d="m 8.9999995,8 0,-5"
id="path4"
sodipodi:nodetypes="cc"
transform="matrix(7.739998,0,0,7.739998,-177.41236,-4.0445824)" /><path
style="display:none;fill:#e6e6e6;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -86.44599,50.135404 -21.30639,-15.479996 -21.30638,15.479996 21.30638,15.479996 z"
id="path11" /><path
style="display:none;fill:#b3b3b3;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -129.05876,50.135404 v 30.959992 l 21.30638,15.479996 V 65.6154 Z"
id="path12" /><path
style="display:none;fill:#999999;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="M -107.75238,96.575392 -86.44599,81.095396 V 50.135404 L -107.75238,65.6154 Z"
id="path13" /></g>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 18 18"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg4"
sodipodi:docname="axis_toggle_hover.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="true"
inkscape:zoom="64.833333"
inkscape:cx="9"
inkscape:cy="8.6915168"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g15"><inkscape:grid
id="grid4"
units="px"
originx="0"
originy="0"
spacingx="1"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="false" /><inkscape:grid
type="axonomgrid"
id="grid8"
units="pt"
originx="9"
originy="9"
spacingx="3.7795276"
spacingy="1.3333333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="4"
dotted="false"
gridanglex="36"
gridanglez="36"
enabled="true"
visible="true" /><inkscape:grid
type="modular"
id="grid9"
units="px"
originx="0"
originy="0"
spacingx="151.1811"
spacingy="151.1811"
empcolor="#0047cb"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="0"
marginx="0"
marginy="0"
gapx="37.795276"
gapy="37.795276"
enabled="true"
visible="true" /><inkscape:grid
type="axonomgrid"
id="grid10"
units="px"
originx="0"
originy="0"
spacingx="3.7795276"
spacingy="3.7795276"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
enabled="false"
visible="true" /></sodipodi:namedview><defs
id="defs4" />
<g
id="g15"
transform="matrix(0.129199,0,0,0.129199,22.9215,0.522556)">
<g
transform="matrix(8.25599,0,0,8.25599,-182.056,-21.0726)"
id="g1"
style="display:inline">
<circle
cx="9"
cy="10.5"
r="7.5"
style="display:inline;fill:#c4c4c4"
id="circle1" />
</g>
<g
id="g19"
inkscape:label="grid"
style="display:inline;stroke:#8d8d8d;stroke-opacity:1;stroke-linecap:square"><path
id="path3"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -157.72198 101.92044 L -57.660489 29.22151 " /><path
id="path8"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16207 123.17697 L -45.951829 61.994656 " /><path
id="path10"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 62.090704 L -85.342701 123.17697 " /><path
id="path21"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 69.140098 L -85.210515 7.9577807 " /><path
id="path23"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16206 8.0538225 L -46.084024 69.140097 " /><path
id="path25"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -57.782786 101.92044 L -157.72198 29.310363 " /><circle
cx="9"
cy="10.5"
r="7.5"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;fill:none;stroke:#000000;stroke-opacity:1;stroke-width:0.28125025;stroke-dasharray:none;stroke-dashoffset:0"
id="circle2"
transform="matrix(8.2559904,0,0,8.2559904,-182.056,-21.0726)" /></g><path
style="display:none;fill:#ff3c5b;fill-opacity:1;stroke:#ff3c5b;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -114.85451,70.775398 -31.59786,22.95719"
id="path6"
sodipodi:nodetypes="cc" /><path
style="display:none;fill:#64c818;fill-opacity:1;stroke:#64c818;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -100.65025,70.775398 31.597858,22.95719"
id="path5"
sodipodi:nodetypes="cc" /><path
style="clip-rule:evenodd;display:none;fill:#2f88e9;fill-opacity:1;fill-rule:evenodd;stroke:#2f88e9;stroke-width:1.33333;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;paint-order:fill markers stroke"
d="M 8.9999995,8 V 3"
id="path4"
sodipodi:nodetypes="cc"
transform="matrix(7.739998,0,0,7.739998,-177.41236,-4.0445824)" /><path
style="display:none;fill:#e6e6e6;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -86.44599,50.135404 -21.30639,-15.479996 -21.30638,15.479996 21.30638,15.479996 z"
id="path11" /><path
style="display:none;fill:#b3b3b3;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -129.05876,50.135404 v 30.959992 l 21.30638,15.479996 V 65.6154 Z"
id="path12" /><path
style="display:none;fill:#999999;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="M -107.75238,96.575392 -86.44599,81.095396 V 50.135404 L -107.75238,65.6154 Z"
id="path13" /></g>
</svg>

Before

Width:  |  Height:  |  Size: 7 KiB

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 18 18"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"
id="svg4"
sodipodi:docname="axis_toggle_hover_dark.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="true"
inkscape:zoom="64.833333"
inkscape:cx="9"
inkscape:cy="8.6915168"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g19"><inkscape:grid
id="grid4"
units="px"
originx="0"
originy="0"
spacingx="1"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="false" /><inkscape:grid
type="axonomgrid"
id="grid8"
units="pt"
originx="9"
originy="9"
spacingx="3.7795276"
spacingy="1.3333333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="4"
dotted="false"
gridanglex="36"
gridanglez="36"
enabled="true"
visible="true" /><inkscape:grid
type="modular"
id="grid9"
units="px"
originx="0"
originy="0"
spacingx="151.1811"
spacingy="151.1811"
empcolor="#0047cb"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="0"
marginx="0"
marginy="0"
gapx="37.795276"
gapy="37.795276"
enabled="true"
visible="true" /><inkscape:grid
type="axonomgrid"
id="grid10"
units="px"
originx="0"
originy="0"
spacingx="3.7795276"
spacingy="3.7795276"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
enabled="false"
visible="true" /></sodipodi:namedview><defs
id="defs4" />
<g
id="g15"
transform="matrix(0.129199,0,0,0.129199,22.9215,0.522556)">
<g
transform="matrix(8.25599,0,0,8.25599,-182.056,-21.0726)"
id="g1"
style="display:inline">
<circle
cx="9"
cy="10.5"
r="7.5"
style="display:inline;fill:#3b3b3b"
id="circle1" />
</g>
<g
id="g19"
inkscape:label="grid"
style="display:inline;stroke:#8d8d8d;stroke-opacity:1;stroke-linecap:square"><path
id="path3"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -157.72198 101.92044 L -57.660489 29.22151 " /><path
id="path8"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16207 123.17697 L -45.951829 61.994656 " /><path
id="path10"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 62.090704 L -85.342701 123.17697 " /><path
id="path21"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -169.42074 69.140098 L -85.210515 7.9577807 " /><path
id="path23"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -130.16206 8.0538225 L -46.084024 69.140097 " /><path
id="path25"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;stroke:#8d8d8d;stroke-opacity:1;fill:none;fill-opacity:0.7;stroke-width:1.032;stroke-dasharray:none;paint-order:fill markers stroke"
d="M -57.782786 101.92044 L -157.72198 29.310363 " /><circle
cx="9"
cy="10.5"
r="7.5"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;display:inline;fill:none;stroke:#000000;stroke-opacity:1;stroke-width:0.28125025;stroke-dasharray:none;stroke-dashoffset:0"
id="circle2"
transform="matrix(8.2559904,0,0,8.2559904,-182.056,-21.0726)" /></g><path
style="display:none;fill:#ff3c5b;fill-opacity:1;stroke:#ff3c5b;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -114.85451,70.775398 -31.59786,22.95719"
id="path6"
sodipodi:nodetypes="cc" /><path
style="display:none;fill:#64c818;fill-opacity:1;stroke:#64c818;stroke-width:10.32;stroke-dasharray:none;paint-order:fill markers stroke"
d="m -100.65025,70.775398 31.597858,22.95719"
id="path5"
sodipodi:nodetypes="cc" /><path
style="clip-rule:evenodd;display:none;fill:#2f88e9;fill-opacity:1;fill-rule:evenodd;stroke:#2f88e9;stroke-width:1.33333;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;stroke-dasharray:none;paint-order:fill markers stroke"
d="M 8.9999995,8 V 3"
id="path4"
sodipodi:nodetypes="cc"
transform="matrix(7.739998,0,0,7.739998,-177.41236,-4.0445824)" /><path
style="display:none;fill:#e6e6e6;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -86.44599,50.135404 -21.30639,-15.479996 -21.30638,15.479996 21.30638,15.479996 z"
id="path11" /><path
style="display:none;fill:#b3b3b3;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="m -129.05876,50.135404 v 30.959992 l 21.30638,15.479996 V 65.6154 Z"
id="path12" /><path
style="display:none;fill:#999999;fill-opacity:0.7;stroke:#1a1a1a;stroke-width:1.032;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
d="M -107.75238,96.575392 -86.44599,81.095396 V 50.135404 L -107.75238,65.6154 Z"
id="path13" /></g>
</svg>

Before

Width:  |  Height:  |  Size: 7 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#fafafa;"/><line x1="10.5" y1="11.5" x2="24.5" y2="11.5" style="fill:none; stroke:#2b3436; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="17.5" x2="24.5" y2="17.5" style="fill:none; stroke:#2b3436; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="23.5" x2="24.5" y2="23.5" style="fill:none; stroke:#2b3436; stroke-linecap:round; stroke-linejoin:round;"/></svg>

After

Width:  |  Height:  |  Size: 575 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#393c42;"/><line x1="10.5" y1="11.5" x2="24.5" y2="11.5" style="fill:none; stroke:#b6b6b6; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="17.5" x2="24.5" y2="17.5" style="fill:none; stroke:#b6b6b6; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="23.5" x2="24.5" y2="23.5" style="fill:none; stroke:#b6b6b6; stroke-linecap:round; stroke-linejoin:round;"/></svg>

After

Width:  |  Height:  |  Size: 575 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#283232;"/><line x1="10.5" y1="11.5" x2="24.5" y2="11.5" style="fill:none; stroke:#b6b6b6; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="17.5" x2="24.5" y2="17.5" style="fill:none; stroke:#b6b6b6; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="23.5" x2="24.5" y2="23.5" style="fill:none; stroke:#b6b6b6; stroke-linecap:round; stroke-linejoin:round;"/></svg>

After

Width:  |  Height:  |  Size: 575 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#e5f0ee;"/><line x1="10.5" y1="11.5" x2="24.5" y2="11.5" style="fill:none; stroke:#2b3436; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="17.5" x2="24.5" y2="17.5" style="fill:none; stroke:#2b3436; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="23.5" x2="24.5" y2="23.5" style="fill:none; stroke:#2b3436; stroke-linecap:round; stroke-linejoin:round;"/></svg>

After

Width:  |  Height:  |  Size: 575 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17" cy="17" r="17" style="fill:#fafafa;"/><circle cx="16.03" cy="15.97" r="6.47" style="fill:none; stroke:#2b3436; stroke-miterlimit:10;"/><path d="M11.56,15.97c0-2.47,2-4.47,4.47-4.47" style="fill:none; stroke:#2b3436; stroke-miterlimit:10;"/><line x1="20.53" y1="20.47" x2="24.5" y2="24.5" style="fill:none; stroke:#2b3436; stroke-miterlimit:10;"/></svg>

After

Width:  |  Height:  |  Size: 496 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#393c42;"/><circle cx="16.03" cy="15.97" r="6.47" style="fill:none; stroke:#b6b6b6; stroke-miterlimit:10; stroke-width:1.08px;"/><path d="M11.56,15.97c0-2.47,2-4.47,4.47-4.47" style="fill:none; stroke:#b6b6b6; stroke-miterlimit:10; stroke-width:.75px;"/><line x1="20.53" y1="20.47" x2="24.5" y2="24.5" style="fill:none; stroke:#b6b6b6; stroke-miterlimit:10;"/></svg>

After

Width:  |  Height:  |  Size: 543 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#283232;"/><circle cx="16.03" cy="15.97" r="6.47" style="fill:none; stroke:#b6b6b6; stroke-miterlimit:10; stroke-width:1.08px;"/><path d="M11.56,15.97c0-2.47,2-4.47,4.47-4.47" style="fill:none; stroke:#b6b6b6; stroke-miterlimit:10; stroke-width:.75px;"/><line x1="20.53" y1="20.47" x2="24.5" y2="24.5" style="fill:none; stroke:#b6b6b6; stroke-miterlimit:10;"/></svg>

After

Width:  |  Height:  |  Size: 543 B

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><circle cx="17.5" cy="17.5" r="17.5" style="fill:#e5f0ee;"/><circle cx="16.03" cy="15.97" r="6.47" style="fill:none; stroke:#2b3436; stroke-miterlimit:10;"/><path d="M11.56,15.97c0-2.47,2-4.47,4.47-4.47" style="fill:none; stroke:#2b3436; stroke-miterlimit:10;"/><line x1="20.53" y1="20.47" x2="24.5" y2="24.5" style="fill:none; stroke:#2b3436; stroke-miterlimit:10;"/></svg>

After

Width:  |  Height:  |  Size: 502 B

View file

@ -1405,6 +1405,10 @@
"name": "Generic PLA-CF @base",
"sub_path": "filament/Generic PLA-CF @base.json"
},
{
"name": "Numakers PLA+ @base",
"sub_path": "filament/Numakers/Numakers PLA+ @base.json"
},
{
"name": "Overture Matte PLA @base",
"sub_path": "filament/Overture/Overture Matte PLA @base.json"
@ -1458,12 +1462,12 @@
"sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json"
},
{
"name": "Panchroma PLA Silk @base",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
"name": "Panchroma PLA Satin @base",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @base.json"
},
{
"name": "Panchroma PLA Stain @base",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json"
"name": "Panchroma PLA Silk @base",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
},
{
"name": "Panchroma PLA Starlight @base",
@ -5101,6 +5105,42 @@
"name": "Generic PLA-CF @BBL P2S",
"sub_path": "filament/Generic PLA-CF @BBL P2S.json"
},
{
"name": "Numakers PLA+ @BBL A1",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1.json"
},
{
"name": "Numakers PLA+ @BBL A1 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @BBL A1M",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M.json"
},
{
"name": "Numakers PLA+ @BBL A1M 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @BBL P1P",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P.json"
},
{
"name": "Numakers PLA+ @BBL P1P 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @BBL X1",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL X1.json"
},
{
"name": "Numakers PLA+ @BBL X1C",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C.json"
},
{
"name": "Numakers PLA+ @BBL X1C 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C 0.2 nozzle.json"
},
{
"name": "Overture Matte PLA @BBL A1",
"sub_path": "filament/Overture/Overture Matte PLA @BBL A1.json"
@ -5641,6 +5681,46 @@
"name": "Panchroma PLA Neon @BBL X1C 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Satin @BBL A1",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1.json"
},
{
"name": "Panchroma PLA Satin @BBL A1 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Satin @BBL A1M",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1M.json"
},
{
"name": "Panchroma PLA Satin @BBL A1M 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1M 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Satin @BBL P1P",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL P1P.json"
},
{
"name": "Panchroma PLA Satin @BBL P1P 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL P1P 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Satin @BBL X1",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1.json"
},
{
"name": "Panchroma PLA Satin @BBL X1 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Satin @BBL X1C",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1C.json"
},
{
"name": "Panchroma PLA Satin @BBL X1C 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1C 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Silk @BBL A1",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1.json"
@ -5677,46 +5757,6 @@
"name": "Panchroma PLA Silk @BBL X1C",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1C.json"
},
{
"name": "Panchroma PLA Stain @BBL A1",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1.json"
},
{
"name": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Stain @BBL A1M",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1M.json"
},
{
"name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Stain @BBL P1P",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL P1P.json"
},
{
"name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Stain @BBL X1",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1.json"
},
{
"name": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Stain @BBL X1C",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1C.json"
},
{
"name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json"
},
{
"name": "Panchroma PLA Starlight @BBL A1",
"sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1.json"
@ -7661,46 +7701,6 @@
"name": "Overture TPU @BBL X1C 0.2 nozzle",
"sub_path": "filament/Overture/Overture TPU @BBL X1C 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @base",
"sub_path": "filament/Numakers/Numakers PLA+ @base.json"
},
{
"name": "Numakers PLA+ @BBL A1",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1.json"
},
{
"name": "Numakers PLA+ @BBL A1 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @BBL A1M",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M.json"
},
{
"name": "Numakers PLA+ @BBL A1M 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @BBL P1P",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P.json"
},
{
"name": "Numakers PLA+ @BBL P1P 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P 0.2 nozzle.json"
},
{
"name": "Numakers PLA+ @BBL X1",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL X1.json"
},
{
"name": "Numakers PLA+ @BBL X1C",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C.json"
},
{
"name": "Numakers PLA+ @BBL X1C 0.2 nozzle",
"sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C 0.2 nozzle.json"
},
{
"name": "fdm_filament_dual_common",
"sub_path": "filament/fdm_filament_dual_common.json"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Before After
Before After

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL A1 0.2 nozzle",
"renamed_from": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_01",
"instantiation": "true",
@ -26,4 +27,4 @@
"slow_down_layer_time": [
"5"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL A1",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL A1",
"renamed_from": "Panchroma PLA Stain @BBL A1",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_00",
"instantiation": "true",
@ -28,4 +29,4 @@
"slow_down_layer_time": [
"5"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL A1M 0.2 nozzle",
"renamed_from": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_03",
"instantiation": "true",
@ -26,4 +27,4 @@
"slow_down_layer_time": [
"5"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL A1M",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL A1M",
"renamed_from": "Panchroma PLA Stain @BBL A1M",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_02",
"instantiation": "true",
@ -28,4 +29,4 @@
"slow_down_layer_time": [
"5"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL P1P 0.2 nozzle",
"renamed_from": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_05",
"instantiation": "true",
@ -26,4 +27,4 @@
"slow_down_layer_time": [
"15"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL P1P",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL P1P",
"renamed_from": "Panchroma PLA Stain @BBL P1P",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_04",
"instantiation": "true",
@ -28,4 +29,4 @@
"slow_down_layer_time": [
"15"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL X1 0.2 nozzle",
"renamed_from": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_07",
"instantiation": "true",
@ -26,4 +27,4 @@
"slow_down_layer_time": [
"15"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL X1",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL X1",
"renamed_from": "Panchroma PLA Stain @BBL X1",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_06",
"instantiation": "true",
@ -28,4 +29,4 @@
"slow_down_layer_time": [
"15"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL X1C 0.2 nozzle",
"renamed_from": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_09",
"instantiation": "true",
@ -28,4 +29,4 @@
"slow_down_layer_time": [
"15"
]
}
}

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @BBL X1C",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @BBL X1C",
"renamed_from": "Panchroma PLA Stain @BBL X1C",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_08",
"instantiation": "true",
@ -34,4 +35,4 @@
"slow_down_layer_time": [
"15"
]
}
}

View file

@ -1,6 +1,7 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @base",
"renamed_from": "Panchroma PLA Stain @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "GFPM005",
@ -38,4 +39,4 @@
"temperature_vitrification": [
"59"
]
}
}

View file

@ -136,7 +136,7 @@
"60"
],
"scan_first_layer": "0",
"enable_power_loss_recovery": "1",
"enable_power_loss_recovery": "printer_configuration",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"support_air_filtration": "0",

View file

@ -11,6 +11,9 @@
"nozzle_diameter": [
"0.4"
],
"nozzle_volume": [
"156"
],
"retract_before_wipe": [
"0%"
],
@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
"25"
"0"
],
"retract_when_changing_layer": [
"0"
@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
"1"
"0"
],
"enable_filament_ramming": [
"0"
],
"z_hop_types": "Spiral Lift"
}
}

View file

@ -11,6 +11,9 @@
"nozzle_diameter": [
"0.4"
],
"nozzle_volume": [
"156"
],
"retract_before_wipe": [
"0%"
],
@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
"25"
"0"
],
"retract_when_changing_layer": [
"0"
@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
"1"
"0"
],
"enable_filament_ramming": [
"0"
],
"z_hop_types": "Spiral Lift"
}
}

View file

@ -11,6 +11,9 @@
"nozzle_diameter": [
"0.4"
],
"nozzle_volume": [
"156"
],
"retract_before_wipe": [
"0%"
],
@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
"25"
"0"
],
"retract_when_changing_layer": [
"0"
@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
"1"
"0"
],
"enable_filament_ramming": [
"0"
],
"z_hop_types": "Spiral Lift"
}
}

View file

@ -10,6 +10,9 @@
"printer_variant": "0.4",
"nozzle_diameter": [
"0.4"
],
"nozzle_volume": [
"156"
],
"retract_before_wipe": [
"0%"
@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
"25"
"0"
],
"retract_when_changing_layer": [
"0"
@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
"1"
"0"
],
"enable_filament_ramming": [
"0"
],
"z_hop_types": "Spiral Lift"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

@ -4,6 +4,9 @@
"from": "system",
"inherits": "fdm_openeye_common",
"instantiation": "true",
"adaptive_bed_mesh_margin": "10",
"bed_mesh_max": "211,211",
"bed_mesh_min": "1.5,7",
"layer_change_gcode": "SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}\n_MMU_UPDATE_HEIGHT",
"machine_end_gcode": "MMU_END\nEND_PRINT",
"machine_load_filament_time": "30",
@ -24,8 +27,8 @@
"30"
],
"machine_pause_gcode": "PAUSE",
"machine_start_gcode": "SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nMMU_START_SETUP INITIAL_TOOL={initial_tool} TOTAL_TOOLCHANGES=!total_toolchanges! REFERENCED_TOOLS=!referenced_tools! TOOL_COLORS=!colors! TOOL_TEMPS=!temperatures! TOOL_MATERIALS=!materials! FILAMENT_NAMES=!filament_names! PURGE_VOLUMES=!purge_volumes!\nMMU_START_CHECK\nSTART_PRINT BED_TEMP=[bed_temperature_initial_layer] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TYPE=\"{curr_bed_type}\"\n; Enter YOUR exist start_print macro call here (minus purging logic because tool may not be loaded yet)\nMMU_START_LOAD_INITIAL_TOOL\n; Optionally add YOUR additional start logic (like purging) here to run just prior to start\nSTART_PRINT_SECONDARY\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} ; For pause at layer functionality and better print stats",
"machine_unload_filament_time": "30",
"machine_start_gcode": "SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nMMU_START_SETUP INITIAL_TOOL={initial_tool} TOTAL_TOOLCHANGES=!total_toolchanges! REFERENCED_TOOLS=!referenced_tools! TOOL_COLORS=!colors! TOOL_TEMPS=!temperatures! TOOL_MATERIALS=!materials! FILAMENT_NAMES=!filament_names! PURGE_VOLUMES=!purge_volumes!\nMMU_START_CHECK\nSTART_PRINT BED_TEMP=[bed_temperature_initial_layer] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TYPE=\"{curr_bed_type}\" MESH_MIN={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} MESH_MAX={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE_MARGIN={adaptive_bed_mesh_margin}\n; Enter YOUR exist start_print macro call here (minus purging logic because tool may not be loaded yet)\nMMU_START_LOAD_INITIAL_TOOL\n; Optionally add YOUR additional start logic (like purging) here to run just prior to start\nSTART_PRINT_SECONDARY\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} ; For pause at layer functionality and better print stats",
"machine_unload_filament_time": "30",
"name": "OpenEYE Peacock V2 0.4 nozzle",
"nozzle_diameter": [
"0.4"
@ -45,4 +48,4 @@
],
"setting_id": "GM001",
"type": "machine"
}
}

View file

@ -124,8 +124,8 @@
"0"
],
"machine_pause_gcode": "PAUSE",
"machine_start_gcode": "SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nMMU_START_SETUP INITIAL_TOOL={initial_tool} TOTAL_TOOLCHANGES=!total_toolchanges! REFERENCED_TOOLS=!referenced_tools! TOOL_COLORS=!colors! TOOL_TEMPS=!temperatures! TOOL_MATERIALS=!materials! FILAMENT_NAMES=!filament_names! PURGE_VOLUMES=!purge_volumes!\nMMU_START_CHECK\nSTART_PRINT BED_TEMP=[bed_temperature_initial_layer] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TYPE=\"{curr_bed_type}\"\n; Enter YOUR exist start_print macro call here (minus purging logic because tool may not be loaded yet)\nMMU_START_LOAD_INITIAL_TOOL\n; Optionally add YOUR additional start logic (like purging) here to run just prior to start\nSTART_PRINT_SECONDARY\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} ; For pause at layer functionality and better print stats",
"machine_tool_change_time": "0",
"machine_start_gcode": "SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nMMU_START_SETUP INITIAL_TOOL={initial_tool} TOTAL_TOOLCHANGES=!total_toolchanges! REFERENCED_TOOLS=!referenced_tools! TOOL_COLORS=!colors! TOOL_TEMPS=!temperatures! TOOL_MATERIALS=!materials! FILAMENT_NAMES=!filament_names! PURGE_VOLUMES=!purge_volumes!\nMMU_START_CHECK\nSTART_PRINT BED_TEMP=[bed_temperature_initial_layer] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TYPE=\"{curr_bed_type}\" MESH_MIN={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} MESH_MAX={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE_MARGIN={adaptive_bed_mesh_margin}\n; Enter YOUR exist start_print macro call here (minus purging logic because tool may not be loaded yet)\nMMU_START_LOAD_INITIAL_TOOL\n; Optionally add YOUR additional start logic (like purging) here to run just prior to start\nSTART_PRINT_SECONDARY\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} ; For pause at layer functionality and better print stats",
"machine_tool_change_time": "0",
"machine_unload_filament_time": "0",
"manual_filament_change": "0",
"max_layer_height": [

View file

@ -108,6 +108,10 @@
"name": "COEX ABS PRIME @base",
"sub_path": "filament/COEX/COEX ABS PRIME @base.json"
},
{
"name": "Eolas Prints ABS @System",
"sub_path": "filament/Eolas Prints/Eolas Prints ABS @System.json"
},
{
"name": "FDplast ABS @base",
"sub_path": "filament/FDplast/FDplast ABS @base.json"
@ -144,6 +148,10 @@
"name": "COEX ASA PRIME @base",
"sub_path": "filament/COEX/COEX ASA PRIME @base.json"
},
{
"name": "Eolas Prints ASA @System",
"sub_path": "filament/Eolas Prints/Eolas Prints ASA @System.json"
},
{
"name": "Generic ASA @System",
"sub_path": "filament/Generic ASA @System.json"
@ -288,6 +296,18 @@
"name": "COEX PETG @base",
"sub_path": "filament/COEX/COEX PETG @base.json"
},
{
"name": "Eolas Prints PETG @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PETG @System.json"
},
{
"name": "Eolas Prints PETG Transition @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PETG Transition @System.json"
},
{
"name": "Eolas Prints PETG UV Resistant @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json"
},
{
"name": "FDplast PETG @base",
"sub_path": "filament/FDplast/FDplast PETG @base.json"
@ -420,6 +440,42 @@
"name": "COEX PLA PRIME @base",
"sub_path": "filament/COEX/COEX PLA PRIME @base.json"
},
{
"name": "Eolas Prints PLA Antibacterial @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json"
},
{
"name": "Eolas Prints PLA High Speed @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA High Speed @System.json"
},
{
"name": "Eolas Prints PLA INGEO 850 @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json"
},
{
"name": "Eolas Prints PLA INGEO 870 @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json"
},
{
"name": "Eolas Prints PLA Matte @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Matte @System.json"
},
{
"name": "Eolas Prints PLA Neon @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Neon @System.json"
},
{
"name": "Eolas Prints PLA Premium @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Premium @System.json"
},
{
"name": "Eolas Prints PLA Silk @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Silk @System.json"
},
{
"name": "Eolas Prints PLA Transition @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Transition @System.json"
},
{
"name": "FDplast PLA @base",
"sub_path": "filament/FDplast/FDplast PLA @base.json"
@ -444,6 +500,10 @@
"name": "NIT PLA @base",
"sub_path": "filament/NIT/NIT PLA @base.json"
},
{
"name": "Numakers PLA+ @base",
"sub_path": "filament/Numakers/Numakers PLA+ @base.json"
},
{
"name": "Overture Air PLA @base",
"sub_path": "filament/Overture/Overture Air PLA @base.json"
@ -517,12 +577,12 @@
"sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json"
},
{
"name": "Panchroma PLA Silk @base",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
"name": "Panchroma PLA Satin @base",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @base.json"
},
{
"name": "Panchroma PLA Stain @base",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json"
"name": "Panchroma PLA Silk @base",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
},
{
"name": "Panchroma PLA Starlight @base",
@ -680,6 +740,22 @@
"name": "COEX TPU 60A @base",
"sub_path": "filament/COEX/COEX TPU 60A @base.json"
},
{
"name": "Eolas Prints TPU D60 UV Resistant @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json"
},
{
"name": "Eolas Prints TPU Flex 93A @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json"
},
{
"name": "Eolas Prints TPU Flex D53 @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json"
},
{
"name": "Eolas Prints TPU Transition @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Transition @System.json"
},
{
"name": "FDplast TPU @base",
"sub_path": "filament/FDplast/FDplast TPU @base.json"
@ -692,10 +768,6 @@
"name": "Overture TPU @base",
"sub_path": "filament/Overture/Overture TPU @base.json"
},
{
"name": "Numakers PLA+ @base",
"sub_path": "filament/Numakers/Numakers PLA+ @base.json"
},
{
"name": "Bambu ABS @System",
"sub_path": "filament/Bambu/Bambu ABS @System.json"
@ -980,6 +1052,10 @@
"name": "NIT PLA @System",
"sub_path": "filament/NIT/NIT PLA @System.json"
},
{
"name": "Numakers PLA+ @System",
"sub_path": "filament/Numakers/Numakers PLA+ @System.json"
},
{
"name": "Overture Air PLA @System",
"sub_path": "filament/Overture/Overture Air PLA @System.json"
@ -1053,12 +1129,12 @@
"sub_path": "filament/Polymaker/Panchroma PLA Neon @System.json"
},
{
"name": "Panchroma PLA Silk @System",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @System.json"
"name": "Panchroma PLA Satin @System",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @System.json"
},
{
"name": "Panchroma PLA Stain @System",
"sub_path": "filament/Polymaker/Panchroma PLA Stain @System.json"
"name": "Panchroma PLA Silk @System",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @System.json"
},
{
"name": "Panchroma PLA Starlight @System",
@ -1211,81 +1287,6 @@
{
"name": "COEX PLA+Silk @System",
"sub_path": "filament/COEX/COEX PLA+Silk @System.json"
},
{ "name": "Numakers PLA+ @System",
"sub_path": "filament/Numakers/Numakers PLA+ @System.json"
},
{
"name": "Eolas Prints PLA Premium @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Premium @System.json"
},
{
"name": "Eolas Prints PLA Matte @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Matte @System.json"
},
{
"name": "Eolas Prints PLA Silk @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Silk @System.json"
},
{
"name": "Eolas Prints PLA Neon @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Neon @System.json"
},
{
"name": "Eolas Prints PLA High Speed @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA High Speed @System.json"
},
{
"name": "Eolas Prints PLA INGEO 850 @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json"
},
{
"name": "Eolas Prints PLA INGEO 870 @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json"
},
{
"name": "Eolas Prints PLA Antibacterial @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json"
},
{
"name": "Eolas Prints PLA Transition @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PLA Transition @System.json"
},
{
"name": "Eolas Prints PETG @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PETG @System.json"
},
{
"name": "Eolas Prints PETG UV Resistant @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json"
},
{
"name": "Eolas Prints PETG Transition @System",
"sub_path": "filament/Eolas Prints/Eolas Prints PETG Transition @System.json"
},
{
"name": "Eolas Prints TPU Flex 93A @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json"
},
{
"name": "Eolas Prints TPU Flex D53 @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json"
},
{
"name": "Eolas Prints TPU Flex D60 UV Resistant @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json"
},
{
"name": "Eolas Prints TPU Transition @System",
"sub_path": "filament/Eolas Prints/Eolas Prints TPU Transition @System.json"
},
{
"name": "Eolas Prints ABS @System",
"sub_path": "filament/Eolas Prints/Eolas Prints ABS @System.json"
},
{
"name": "Eolas Prints ASA @System",
"sub_path": "filament/Eolas Prints/Eolas Prints ASA @System.json"
}
],
"process_list": [],

View file

@ -1,7 +1,8 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @System",
"inherits": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @System",
"renamed_from": "Panchroma PLA Stain @System",
"inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "OGFSPM005",
"instantiation": "true",
@ -11,4 +12,4 @@
"filament_max_volumetric_speed": [
"16"
]
}
}

View file

@ -1,6 +1,7 @@
{
"type": "filament",
"name": "Panchroma PLA Stain @base",
"name": "Panchroma PLA Satin @base",
"renamed_from": "Panchroma PLA Stain @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OGFPM005",
@ -32,4 +33,4 @@
"temperature_vitrification": [
"59"
]
}
}

View file

@ -462,7 +462,7 @@
"filament_list": [
{
"name": "PolyTerra PLA @0.2 nozzle",
"sub_path": "filament/PolyTerra PLA @0.2 nozzle.json"
"sub_path": "filament/Polymaker/PolyTerra PLA @0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Lite @U1 base",
@ -482,11 +482,11 @@
},
{
"name": "PolyTerra Dual PLA @0.2 nozzle",
"sub_path": "filament/PolyTerra Dual PLA @0.2 nozzle.json"
"sub_path": "filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json"
},
{
"name": "PolyTerra J1 PLA @0.2 nozzle",
"sub_path": "filament/PolyTerra J1 PLA @0.2 nozzle.json"
"sub_path": "filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Lite @U1",
@ -608,6 +608,14 @@
"name": "Snapmaker PET @base",
"sub_path": "filament/Snapmaker PET @base.json"
},
{
"name": "PolyLite PETG @Base",
"sub_path": "filament/Polymaker/PolyLite PETG @Base.json"
},
{
"name": "Polymaker PETG @Base",
"sub_path": "filament/Polymaker/Polymaker PETG @Base.json"
},
{
"name": "Snapmaker Dual PETG @base",
"sub_path": "filament/Snapmaker Dual PETG @base.json"
@ -640,17 +648,105 @@
"name": "Snapmaker PETG-CF @base",
"sub_path": "filament/Snapmaker PETG-CF @base.json"
},
{
"name": "Panchroma CoPE @U1 base",
"sub_path": "filament/Polymaker/Panchroma CoPE @U1 base.json"
},
{
"name": "Panchroma PLA @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA @U1 base.json"
},
{
"name": "Panchroma PLA Celestial @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Celestial @U1 base.json"
},
{
"name": "Panchroma PLA Galaxy @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Galaxy @U1 base.json"
},
{
"name": "Panchroma PLA Glow @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Glow @U1 base.json"
},
{
"name": "Panchroma PLA Luminous @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Luminous @U1 base.json"
},
{
"name": "Panchroma PLA Marble @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Marble @U1 base.json"
},
{
"name": "Panchroma PLA Matte @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Matte @U1 base.json"
},
{
"name": "Panchroma PLA Metallic @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Metallic @U1 base.json"
},
{
"name": "Panchroma PLA Neon @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Neon @U1 base.json"
},
{
"name": "Panchroma PLA Satin @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @U1 base.json"
},
{
"name": "Panchroma PLA Silk @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @U1 base.json"
},
{
"name": "Panchroma PLA Starlight @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Starlight @U1 base.json"
},
{
"name": "Panchroma PLA Temp Shift @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @U1 base.json"
},
{
"name": "Panchroma PLA Translucent @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA Translucent @U1 base.json"
},
{
"name": "Panchroma PLA UV Shift @U1 base",
"sub_path": "filament/Polymaker/Panchroma PLA UV Shift @U1 base.json"
},
{
"name": "PolyLite PLA @U1 base",
"sub_path": "filament/PolyLite PLA @U1 base.json"
"sub_path": "filament/Polymaker/PolyLite PLA @U1 base.json"
},
{
"name": "PolyLite PLA @base",
"sub_path": "filament/PolyLite PLA @base.json"
"sub_path": "filament/Polymaker/PolyLite PLA @base.json"
},
{
"name": "PolyLite PLA Pro @U1 base",
"sub_path": "filament/Polymaker/PolyLite PLA Pro @U1 base.json"
},
{
"name": "PolyTerra PLA @U1 base",
"sub_path": "filament/PolyTerra PLA @U1 base.json"
"sub_path": "filament/Polymaker/PolyTerra PLA @U1 base.json"
},
{
"name": "Polymaker HT-PLA @Base",
"sub_path": "filament/Polymaker/Polymaker HT-PLA @Base.json"
},
{
"name": "Polymaker HT-PLA @U1 base",
"sub_path": "filament/Polymaker/Polymaker HT-PLA @U1 base.json"
},
{
"name": "Polymaker HT-PLA-GF @Base",
"sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @Base.json"
},
{
"name": "Polymaker HT-PLA-GF @U1 base",
"sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @U1 base.json"
},
{
"name": "Polymaker PLA Pro @Base",
"sub_path": "filament/Polymaker/Polymaker PLA Pro @Base.json"
},
{
"name": "Snapmaker Dual PLA @base",
@ -884,6 +980,14 @@
"name": "Snapmaker PET",
"sub_path": "filament/Snapmaker PET.json"
},
{
"name": "PolyLite PETG @Snapmaker U1",
"sub_path": "filament/Polymaker/PolyLite PETG @Snapmaker U1.json"
},
{
"name": "Polymaker PETG @Snapmaker U1",
"sub_path": "filament/Polymaker/Polymaker PETG @Snapmaker U1.json"
},
{
"name": "Snapmaker Dual PETG",
"sub_path": "filament/Snapmaker Dual PETG.json"
@ -936,21 +1040,109 @@
"name": "Snapmaker PETG-CF",
"sub_path": "filament/Snapmaker PETG-CF.json"
},
{
"name": "Panchroma CoPE @U1",
"sub_path": "filament/Polymaker/Panchroma CoPE @U1.json"
},
{
"name": "Panchroma PLA @U1",
"sub_path": "filament/Polymaker/Panchroma PLA @U1.json"
},
{
"name": "Panchroma PLA Celestial @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Celestial @U1.json"
},
{
"name": "Panchroma PLA Galaxy @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Galaxy @U1.json"
},
{
"name": "Panchroma PLA Glow @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Glow @U1.json"
},
{
"name": "Panchroma PLA Luminous @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Luminous @U1.json"
},
{
"name": "Panchroma PLA Marble @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Marble @U1.json"
},
{
"name": "Panchroma PLA Matte @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Matte @U1.json"
},
{
"name": "Panchroma PLA Metallic @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Metallic @U1.json"
},
{
"name": "Panchroma PLA Neon @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Neon @U1.json"
},
{
"name": "Panchroma PLA Satin @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Satin @U1.json"
},
{
"name": "Panchroma PLA Silk @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @U1.json"
},
{
"name": "Panchroma PLA Starlight @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Starlight @U1.json"
},
{
"name": "Panchroma PLA Temp Shift @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @U1.json"
},
{
"name": "Panchroma PLA Translucent @U1",
"sub_path": "filament/Polymaker/Panchroma PLA Translucent @U1.json"
},
{
"name": "Panchroma PLA UV Shift @U1",
"sub_path": "filament/Polymaker/Panchroma PLA UV Shift @U1.json"
},
{
"name": "PolyLite PLA @U1",
"sub_path": "filament/PolyLite PLA @U1.json"
"sub_path": "filament/Polymaker/PolyLite PLA @U1.json"
},
{
"name": "PolyLite J1 PLA",
"sub_path": "filament/PolyLite J1 PLA.json"
"sub_path": "filament/Polymaker/PolyLite J1 PLA.json"
},
{
"name": "PolyLite PLA @0.2 nozzle",
"sub_path": "filament/PolyLite PLA @0.2 nozzle.json"
"sub_path": "filament/Polymaker/PolyLite PLA @0.2 nozzle.json"
},
{
"name": "PolyLite PLA Pro @U1",
"sub_path": "filament/Polymaker/PolyLite PLA Pro @U1.json"
},
{
"name": "PolyTerra PLA @U1",
"sub_path": "filament/PolyTerra PLA @U1.json"
"sub_path": "filament/Polymaker/PolyTerra PLA @U1.json"
},
{
"name": "Polymaker HT-PLA @Snapmaker U1",
"sub_path": "filament/Polymaker/Polymaker HT-PLA @Snapmaker U1.json"
},
{
"name": "Polymaker HT-PLA @U1",
"sub_path": "filament/Polymaker/Polymaker HT-PLA @U1.json"
},
{
"name": "Polymaker HT-PLA-GF @Snapmaker U1",
"sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1.json"
},
{
"name": "Polymaker HT-PLA-GF @U1",
"sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @U1.json"
},
{
"name": "Polymaker PLA Pro @Snapmaker U1",
"sub_path": "filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json"
},
{
"name": "Snapmaker Dual PLA",
@ -1158,11 +1350,11 @@
},
{
"name": "PolyLite Dual PLA @0.2 nozzle",
"sub_path": "filament/PolyLite Dual PLA @0.2 nozzle.json"
"sub_path": "filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json"
},
{
"name": "PolyLite J1 PLA @0.2 nozzle",
"sub_path": "filament/PolyLite J1 PLA @0.2 nozzle.json"
"sub_path": "filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json"
},
{
"name": "Snapmaker Dual PLA Eco",
@ -1206,7 +1398,7 @@
},
{
"name": "PolyTerra J1 PLA",
"sub_path": "filament/PolyTerra J1 PLA.json"
"sub_path": "filament/Polymaker/PolyTerra J1 PLA.json"
},
{
"name": "Snapmaker PLA Matte @U1 base",

View file

@ -1,19 +0,0 @@
{
"type": "filament",
"name": "PolyLite Dual PLA @0.2 nozzle",
"inherits": "PolyLite PLA @0.2 nozzle",
"from": "system",
"setting_id": "490991920",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 Dual (0.2 nozzle)",
"Snapmaker A250 Dual BKit (0.2 nozzle)",
"Snapmaker A250 Dual QS+B Kit (0.2 nozzle)",
"Snapmaker A250 Dual QSKit (0.2 nozzle)",
"Snapmaker A350 Dual (0.2 nozzle)",
"Snapmaker A350 Dual BKit (0.2 nozzle)",
"Snapmaker A350 Dual QS+B Kit (0.2 nozzle)",
"Snapmaker A350 Dual QSKit (0.2 nozzle)",
"Snapmaker Artisan (0.2 nozzle)"
]
}

View file

@ -1,11 +0,0 @@
{
"type": "filament",
"name": "PolyLite J1 PLA @0.2 nozzle",
"inherits": "PolyLite PLA @0.2 nozzle",
"from": "system",
"setting_id": "431382384",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.2 nozzle)"
]
}

View file

@ -1,13 +0,0 @@
{
"type": "filament",
"name": "PolyLite J1 PLA",
"inherits": "PolyLite PLA @base",
"from": "system",
"setting_id": "116125055",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.4 nozzle)",
"Snapmaker J1 (0.6 nozzle)",
"Snapmaker J1 (0.8 nozzle)"
]
}

View file

@ -1,21 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA @0.2 nozzle",
"inherits": "PolyLite PLA @base",
"from": "system",
"setting_id": "1592803578",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 (0.2 nozzle)",
"Snapmaker A250 BKit (0.2 nozzle)",
"Snapmaker A250 QS+B Kit (0.2 nozzle)",
"Snapmaker A250 QSKit (0.2 nozzle)",
"Snapmaker A350 (0.2 nozzle)",
"Snapmaker A350 BKit (0.2 nozzle)",
"Snapmaker A350 QS+B Kit (0.2 nozzle)",
"Snapmaker A350 QSKit (0.2 nozzle)"
],
"filament_max_volumetric_speed": [
"1.6"
]
}

View file

@ -1,20 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA @U1 base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "13938660340",
"instantiation": "false",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"90"
],
"filament_max_volumetric_speed": [
"15"
],
"default_filament_colour": [
""
]
}

View file

@ -1,11 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA @U1",
"inherits": "PolyLite PLA @U1 base",
"from": "system",
"setting_id": "6486836500",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
]
}

View file

@ -1,20 +0,0 @@
{
"type": "filament",
"name": "PolyLite PLA @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "1393866034",
"instantiation": "false",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"90"
],
"filament_max_volumetric_speed": [
"15"
],
"default_filament_colour": [
""
]
}

View file

@ -1,19 +0,0 @@
{
"type": "filament",
"name": "PolyTerra Dual PLA @0.2 nozzle",
"inherits": "PolyTerra PLA @0.2 nozzle",
"from": "system",
"setting_id": "1258531391",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 Dual (0.2 nozzle)",
"Snapmaker A250 Dual BKit (0.2 nozzle)",
"Snapmaker A250 Dual QS+B Kit (0.2 nozzle)",
"Snapmaker A250 Dual QSKit (0.2 nozzle)",
"Snapmaker A350 Dual (0.2 nozzle)",
"Snapmaker A350 Dual BKit (0.2 nozzle)",
"Snapmaker A350 Dual QS+B Kit (0.2 nozzle)",
"Snapmaker A350 Dual QSKit (0.2 nozzle)",
"Snapmaker Artisan (0.2 nozzle)"
]
}

View file

@ -1,11 +0,0 @@
{
"type": "filament",
"name": "PolyTerra J1 PLA @0.2 nozzle",
"inherits": "PolyTerra PLA @0.2 nozzle",
"from": "system",
"setting_id": "1072374370",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.2 nozzle)"
]
}

View file

@ -1,13 +0,0 @@
{
"type": "filament",
"name": "PolyTerra J1 PLA",
"inherits": "PolyTerra PLA @base",
"from": "system",
"setting_id": "3958200796",
"instantiation": "true",
"compatible_printers": [
"Snapmaker J1 (0.4 nozzle)",
"Snapmaker J1 (0.6 nozzle)",
"Snapmaker J1 (0.8 nozzle)"
]
}

View file

@ -1,21 +0,0 @@
{
"type": "filament",
"name": "PolyTerra PLA @0.2 nozzle",
"inherits": "PolyTerra PLA @base",
"from": "system",
"setting_id": "409934824",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 (0.2 nozzle)",
"Snapmaker A250 BKit (0.2 nozzle)",
"Snapmaker A250 QS+B Kit (0.2 nozzle)",
"Snapmaker A250 QSKit (0.2 nozzle)",
"Snapmaker A350 (0.2 nozzle)",
"Snapmaker A350 BKit (0.2 nozzle)",
"Snapmaker A350 QS+B Kit (0.2 nozzle)",
"Snapmaker A350 QSKit (0.2 nozzle)"
],
"filament_max_volumetric_speed": [
"1.4"
]
}

View file

@ -1,20 +0,0 @@
{
"type": "filament",
"name": "PolyTerra PLA @U1 base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "37895926870",
"instantiation": "false",
"filament_cost": [
"80"
],
"filament_density": [
"1.31"
],
"filament_max_volumetric_speed": [
"14.4"
],
"default_filament_colour": [
""
]
}

View file

@ -1,11 +0,0 @@
{
"type": "filament",
"name": "PolyTerra PLA @U1",
"inherits": "PolyTerra PLA @U1 base",
"from": "system",
"setting_id": "12580059400",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
]
}

View file

@ -0,0 +1,41 @@
{
"type": "filament",
"name": "Panchroma CoPE @U1 base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "GFPM016",
"instantiation": "false",
"filament_cost": [
"19.99"
],
"filament_density": [
"1.29"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"230"
],
"nozzle_temperature_initial_layer": [
"230"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"58"
]
}

View file

@ -0,0 +1,26 @@
{
"type": "filament",
"name": "Panchroma CoPE @U1",
"inherits": "Panchroma CoPE @U1 base",
"from": "system",
"setting_id": "GFSPM016_00",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"fan_max_speed": [
"100"
],
"fan_min_speed": [
"100"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"slow_down_layer_time": [
"4"
]
}

View file

@ -0,0 +1,44 @@
{
"type": "filament",
"name": "Panchroma PLA @U1 base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "GFPM001",
"instantiation": "false",
"filament_cost": [
"19.99"
],
"filament_density": [
"1.32"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"15"
],
"filament_vendor": [
"Polymaker"
],
"filament_wipe": [
"0"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"58"
]
}

View file

@ -0,0 +1,26 @@
{
"type": "filament",
"name": "Panchroma PLA @U1",
"inherits": "Panchroma PLA @U1 base",
"from": "system",
"setting_id": "GFSPM001_00",
"instantiation": "true",
"compatible_printers": [
"Snapmaker U1 (0.4 nozzle)"
],
"fan_max_speed": [
"100"
],
"fan_min_speed": [
"100"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"15"
],
"slow_down_layer_time": [
"4"
]
}

View file

@ -0,0 +1,41 @@
{
"type": "filament",
"name": "Panchroma PLA Celestial @U1 base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "GFPM008",
"instantiation": "false",
"filament_cost": [
"29.99"
],
"filament_density": [
"1.17"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"15"
],
"filament_vendor": [
"Polymaker"
],
"nozzle_temperature": [
"220"
],
"nozzle_temperature_initial_layer": [
"220"
],
"nozzle_temperature_range_high": [
"240"
],
"nozzle_temperature_range_low": [
"190"
],
"slow_down_layer_time": [
"4"
],
"temperature_vitrification": [
"61"
]
}

Some files were not shown because too many files have changed in this diff Show more