Merge branch 'main' into main
14
.doxygen
|
|
@ -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
|
||||
|
|
|
|||
15
.github/workflows/build_all.yml
vendored
|
|
@ -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
|
|
@ -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
|
||||
97
.github/workflows/build_deps.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
31
.github/workflows/build_orca.yml
vendored
|
|
@ -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
|
|
@ -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"
|
||||
2
.github/workflows/shellcheck.yml
vendored
|
|
@ -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
|
|
@ -42,3 +42,4 @@ deps_src/build/
|
|||
test.js
|
||||
/.cache/
|
||||
.clangd
|
||||
internal_docs/
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
22
README.md
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
|||
6
deps/Qhull/Qhull.cmake
vendored
|
|
@ -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 ()
|
||||
|
|
|
|||
9
deps/wxWidgets/wxWidgets.cmake
vendored
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
@ -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 */
|
||||
|
|
@ -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 ""
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 l’empreinte 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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
||||
|
|
|
|||
|
|
@ -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 "브림 귀"
|
||||
|
||||
|
|
|
|||
|
|
@ -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\""
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 "Ушки каймы"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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ı"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 "Вушка кайми"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 "圆盘"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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 |
|
|
@ -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 |
|
|
@ -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 |
|
|
@ -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 |
1
resources/images/canvas_menu.svg
Normal 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 |
1
resources/images/canvas_menu_dark.svg
Normal 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 |
1
resources/images/canvas_menu_dark_hover.svg
Normal 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 |
1
resources/images/canvas_menu_hover.svg
Normal 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 |
1
resources/images/canvas_zoom.svg
Normal 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 |
1
resources/images/canvas_zoom_dark.svg
Normal 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 |
1
resources/images/canvas_zoom_dark_hover.svg
Normal 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 |
1
resources/images/canvas_zoom_hover.svg
Normal 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 |
|
|
@ -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"
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 408 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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": [
|
||||
|
|
|
|||
|
|
@ -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": [],
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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": [
|
||||
""
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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": [
|
||||
""
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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": [
|
||||
""
|
||||
]
|
||||
}
|
||||
|
|
@ -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)"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||