Merge branch 'main' into libvgcode
14
.doxygen
@@ -48,7 +48,7 @@ PROJECT_NAME = OrcaSlicer
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# 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
|
# 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
|
# 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
|
# entered, it will be relative to the location where doxygen was started. If
|
||||||
# left blank the current directory will be used.
|
# 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
|
# 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
|
# 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
|
# 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 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
|
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
|
||||||
# (namespaces, classes, functions, etc.) that should be excluded from the
|
# (namespaces, classes, functions, etc.) that should be excluded from the
|
||||||
@@ -1286,7 +1290,7 @@ GENERATE_HTML = YES
|
|||||||
# The default directory is: html.
|
# The default directory is: html.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# 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
|
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
|
||||||
# generated HTML page (for example: .htm, .php, .asp).
|
# generated HTML page (for example: .htm, .php, .asp).
|
||||||
@@ -1565,7 +1569,7 @@ TOC_EXPAND = NO
|
|||||||
# protocol see https://www.sitemaps.org
|
# protocol see https://www.sitemaps.org
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# 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
|
# 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
|
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
|
||||||
|
|||||||
6
.github/workflows/build_all.yml
vendored
@@ -93,7 +93,7 @@ jobs:
|
|||||||
- name: Apt-Install Dependencies
|
- name: Apt-Install Dependencies
|
||||||
uses: ./.github/actions/apt-install-deps
|
uses: ./.github/actions/apt-install-deps
|
||||||
- name: Restore Test Artifact
|
- name: Restore Test Artifact
|
||||||
uses: actions/download-artifact@v6
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ github.sha }}-tests
|
name: ${{ github.sha }}-tests
|
||||||
- uses: lukka/get-cmake@latest
|
- uses: lukka/get-cmake@latest
|
||||||
@@ -105,7 +105,7 @@ jobs:
|
|||||||
tar -xvf build_tests.tar
|
tar -xvf build_tests.tar
|
||||||
scripts/run_unit_tests.sh
|
scripts/run_unit_tests.sh
|
||||||
- name: Upload Test Logs
|
- name: Upload Test Logs
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
if: ${{ failure() }}
|
if: ${{ failure() }}
|
||||||
with:
|
with:
|
||||||
name: unit-test-logs
|
name: unit-test-logs
|
||||||
@@ -169,7 +169,7 @@ jobs:
|
|||||||
arch: ${{ matrix.variant.arch }}
|
arch: ${{ matrix.variant.arch }}
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload artifacts Flatpak
|
- name: Upload artifacts Flatpak
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
|
name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
|
||||||
path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak'
|
path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak'
|
||||||
|
|||||||
2
.github/workflows/build_check_cache.yml
vendored
@@ -41,7 +41,7 @@ jobs:
|
|||||||
|
|
||||||
- name: load cache
|
- name: load cache
|
||||||
id: cache_deps
|
id: cache_deps
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.set_outputs.outputs.cache-path }}
|
path: ${{ steps.set_outputs.outputs.cache-path }}
|
||||||
key: ${{ steps.set_outputs.outputs.cache-key }}
|
key: ${{ steps.set_outputs.outputs.cache-key }}
|
||||||
|
|||||||
8
.github/workflows/build_deps.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
|||||||
lfs: 'true'
|
lfs: 'true'
|
||||||
|
|
||||||
- name: load cached deps
|
- name: load cached deps
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ inputs.cache-path }}
|
path: ${{ inputs.cache-path }}
|
||||||
key: ${{ inputs.cache-key }}
|
key: ${{ inputs.cache-key }}
|
||||||
@@ -105,14 +105,14 @@ jobs:
|
|||||||
# Upload Artifacts
|
# Upload Artifacts
|
||||||
# - name: Upload Mac ${{ inputs.arch }} artifacts
|
# - name: Upload Mac ${{ inputs.arch }} artifacts
|
||||||
# if: inputs.os == 'macos-14'
|
# if: inputs.os == 'macos-14'
|
||||||
# uses: actions/upload-artifact@v5
|
# uses: actions/upload-artifact@v6
|
||||||
# with:
|
# with:
|
||||||
# name: OrcaSlicer_dep_mac_${{ env.date }}
|
# name: OrcaSlicer_dep_mac_${{ env.date }}
|
||||||
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz
|
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz
|
||||||
|
|
||||||
- name: Upload Windows artifacts
|
- name: Upload Windows artifacts
|
||||||
if: inputs.os == 'windows-latest'
|
if: inputs.os == 'windows-latest'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_dep_win64_${{ env.date }}
|
name: OrcaSlicer_dep_win64_${{ env.date }}
|
||||||
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip
|
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip
|
||||||
@@ -121,7 +121,7 @@ jobs:
|
|||||||
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
|
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
|
||||||
env:
|
env:
|
||||||
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
|
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:
|
with:
|
||||||
name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }}
|
name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }}
|
||||||
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz
|
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz
|
||||||
|
|||||||
20
.github/workflows/build_orca.yml
vendored
@@ -31,7 +31,7 @@ jobs:
|
|||||||
lfs: 'true'
|
lfs: 'true'
|
||||||
|
|
||||||
- name: load cached deps
|
- name: load cached deps
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ inputs.cache-path }}
|
path: ${{ inputs.cache-path }}
|
||||||
key: ${{ inputs.cache-key }}
|
key: ${{ inputs.cache-key }}
|
||||||
@@ -181,14 +181,14 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload artifacts mac
|
- name: Upload artifacts mac
|
||||||
if: inputs.os == 'macos-14'
|
if: inputs.os == 'macos-14'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_Mac_universal_${{ env.ver }}
|
name: OrcaSlicer_Mac_universal_${{ env.ver }}
|
||||||
path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||||
|
|
||||||
- name: Upload OrcaSlicer_profile_validator DMG mac
|
- name: Upload OrcaSlicer_profile_validator DMG mac
|
||||||
if: inputs.os == 'macos-14'
|
if: inputs.os == 'macos-14'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_profile_validator_Mac_universal_DMG_${{ env.ver }}
|
name: OrcaSlicer_profile_validator_Mac_universal_DMG_${{ env.ver }}
|
||||||
path: ${{ github.workspace }}/OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
path: ${{ github.workspace }}/OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
||||||
@@ -255,28 +255,28 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload artifacts Win zip
|
- name: Upload artifacts Win zip
|
||||||
if: inputs.os == 'windows-latest'
|
if: inputs.os == 'windows-latest'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_Windows_${{ env.ver }}_portable
|
name: OrcaSlicer_Windows_${{ env.ver }}_portable
|
||||||
path: ${{ github.workspace }}/build/OrcaSlicer
|
path: ${{ github.workspace }}/build/OrcaSlicer
|
||||||
|
|
||||||
- name: Upload artifacts Win installer
|
- name: Upload artifacts Win installer
|
||||||
if: inputs.os == 'windows-latest'
|
if: inputs.os == 'windows-latest'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_Windows_${{ env.ver }}
|
name: OrcaSlicer_Windows_${{ env.ver }}
|
||||||
path: ${{ github.workspace }}/build/OrcaSlicer*.exe
|
path: ${{ github.workspace }}/build/OrcaSlicer*.exe
|
||||||
|
|
||||||
- name: Upload artifacts Win PDB
|
- name: Upload artifacts Win PDB
|
||||||
if: inputs.os == 'windows-latest'
|
if: inputs.os == 'windows-latest'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: PDB
|
name: PDB
|
||||||
path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z
|
path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z
|
||||||
|
|
||||||
- name: Upload OrcaSlicer_profile_validator Win
|
- name: Upload OrcaSlicer_profile_validator Win
|
||||||
if: inputs.os == 'windows-latest'
|
if: inputs.os == 'windows-latest'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_profile_validator_Windows_${{ env.ver }}
|
name: OrcaSlicer_profile_validator_Windows_${{ env.ver }}
|
||||||
path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe
|
path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe
|
||||||
@@ -336,7 +336,7 @@ jobs:
|
|||||||
# and doesn't preserve file permissions
|
# and doesn't preserve file permissions
|
||||||
- name: Upload Test Artifact
|
- name: Upload Test Artifact
|
||||||
if: inputs.os == 'ubuntu-24.04'
|
if: inputs.os == 'ubuntu-24.04'
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: ${{ github.sha }}-tests
|
name: ${{ github.sha }}-tests
|
||||||
overwrite: true
|
overwrite: true
|
||||||
@@ -358,7 +358,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
|
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
|
||||||
ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }}
|
ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }}
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
|
name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
|
||||||
path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage'
|
path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage'
|
||||||
@@ -367,7 +367,7 @@ jobs:
|
|||||||
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
|
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
|
||||||
env:
|
env:
|
||||||
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
|
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:
|
with:
|
||||||
name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
|
name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
|
||||||
path: './build/src/Release/OrcaSlicer_profile_validator'
|
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:
|
steps:
|
||||||
- name: Cache shellcheck download
|
- name: Cache shellcheck download
|
||||||
id: cache-shellcheck-v0_11
|
id: cache-shellcheck-v0_11
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/shellcheck
|
path: ~/shellcheck
|
||||||
key: ${{ runner.os }}-shellcheck-v0_11
|
key: ${{ runner.os }}-shellcheck-v0_11
|
||||||
|
|||||||
1
.gitignore
vendored
@@ -42,3 +42,4 @@ deps_src/build/
|
|||||||
test.js
|
test.js
|
||||||
/.cache/
|
/.cache/
|
||||||
.clangd
|
.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)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
# Verify that your CMake version is exactly 3.5 series or higher on windows
|
# Verify that your CMake version is exactly 3.5 series or higher on windows
|
||||||
@@ -571,6 +575,7 @@ endif()
|
|||||||
if(POLICY CMP0167)
|
if(POLICY CMP0167)
|
||||||
cmake_policy(SET CMP0167 NEW)
|
cmake_policy(SET CMP0167 NEW)
|
||||||
endif()
|
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)
|
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)
|
add_library(boost_libs INTERFACE)
|
||||||
@@ -688,6 +693,10 @@ find_package(PNG REQUIRED)
|
|||||||
set(OpenGL_GL_PREFERENCE "LEGACY")
|
set(OpenGL_GL_PREFERENCE "LEGACY")
|
||||||
find_package(OpenGL REQUIRED)
|
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}")
|
set(GLEW_ROOT "${CMAKE_PREFIX_PATH}")
|
||||||
message("GLEW_ROOT: ${GLEW_ROOT}")
|
message("GLEW_ROOT: ${GLEW_ROOT}")
|
||||||
# Find glew or use bundled version
|
# 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
|
# 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.
|
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.
|
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**
|
- **[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://github.com/OrcaSlicer/OrcaSlicer/wiki/strength_settings_patterns) and accurate hole shapes for improved clarity.
|
Use varied infill [patterns](https://www.orcaslicer.com/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)**
|
- **[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.
|
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.
|
Fine-tune print speed, layer height, pressure, and temperature with precision.
|
||||||
- **Network Printer Support**
|
- **Network Printer Support**
|
||||||
Seamless integration with Klipper, PrusaLink, and OctoPrint for remote control.
|
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.
|
Automatic brims and adaptive mesh calibration ensure consistent adhesion.
|
||||||
- **User-Friendly Interface**
|
- **User-Friendly Interface**
|
||||||
Intuitive drag-and-drop design with pre-made profiles for popular printers.
|
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
|
# 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)**
|
- **[Access the wiki here](https://www.orcaslicer.com/wiki)**
|
||||||
- **[Contribute to the wiki](https://github.com/OrcaSlicer/OrcaSlicer/wiki/How-to-wiki)**
|
- **[Contribute to the wiki](https://www.orcaslicer.com/wiki/How-to-wiki)**
|
||||||
|
|
||||||
# Download
|
# Download
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ winget install --id=SoftFever.OrcaSlicer -e
|
|||||||
|
|
||||||
# How to Compile
|
# 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.
|
Please refer to the wiki to ensure you're following the latest and most accurate steps for your platform.
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
set -e
|
set -e
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
while getopts ":dpa:snt:xbc:1h" opt; do
|
while getopts ":dpa:snt:xbc:1Th" opt; do
|
||||||
case "${opt}" in
|
case "${opt}" in
|
||||||
d )
|
d )
|
||||||
export BUILD_TARGET="deps"
|
export BUILD_TARGET="deps"
|
||||||
@@ -37,6 +37,9 @@ while getopts ":dpa:snt:xbc:1h" opt; do
|
|||||||
1 )
|
1 )
|
||||||
export CMAKE_BUILD_PARALLEL_LEVEL=1
|
export CMAKE_BUILD_PARALLEL_LEVEL=1
|
||||||
;;
|
;;
|
||||||
|
T )
|
||||||
|
export BUILD_TESTS="1"
|
||||||
|
;;
|
||||||
h ) echo "Usage: ./build_release_macos.sh [-d]"
|
h ) echo "Usage: ./build_release_macos.sh [-d]"
|
||||||
echo " -d: Build deps only"
|
echo " -d: Build deps only"
|
||||||
echo " -a: Set ARCHITECTURE (arm64 or x86_64 or universal)"
|
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 " -b: Build without reconfiguring CMake"
|
||||||
echo " -c: Set CMake build configuration, default is Release"
|
echo " -c: Set CMake build configuration, default is Release"
|
||||||
echo " -1: Use single job for building"
|
echo " -1: Use single job for building"
|
||||||
|
echo " -T: Build and run tests"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
* )
|
* )
|
||||||
@@ -85,6 +89,15 @@ if [ -z "$OSX_DEPLOYMENT_TARGET" ]; then
|
|||||||
export OSX_DEPLOYMENT_TARGET="11.3"
|
export OSX_DEPLOYMENT_TARGET="11.3"
|
||||||
fi
|
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 "Build params:"
|
||||||
echo " - ARCH: $ARCH"
|
echo " - ARCH: $ARCH"
|
||||||
echo " - BUILD_CONFIG: $BUILD_CONFIG"
|
echo " - BUILD_CONFIG: $BUILD_CONFIG"
|
||||||
@@ -133,7 +146,8 @@ function build_deps() {
|
|||||||
-G "${DEPS_CMAKE_GENERATOR}" \
|
-G "${DEPS_CMAKE_GENERATOR}" \
|
||||||
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
|
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
|
||||||
-DCMAKE_OSX_ARCHITECTURES:STRING="${_ARCH}" \
|
-DCMAKE_OSX_ARCHITECTURES:STRING="${_ARCH}" \
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
|
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}" \
|
||||||
|
${CMAKE_POLICY_COMPAT}
|
||||||
fi
|
fi
|
||||||
cmake --build . --config "$BUILD_CONFIG" --target deps
|
cmake --build . --config "$BUILD_CONFIG" --target deps
|
||||||
)
|
)
|
||||||
@@ -170,13 +184,24 @@ function build_slicer() {
|
|||||||
-G "${SLICER_CMAKE_GENERATOR}" \
|
-G "${SLICER_CMAKE_GENERATOR}" \
|
||||||
-DORCA_TOOLS=ON \
|
-DORCA_TOOLS=ON \
|
||||||
${ORCA_UPDATER_SIG_KEY:+-DORCA_UPDATER_SIG_KEY="$ORCA_UPDATER_SIG_KEY"} \
|
${ORCA_UPDATER_SIG_KEY:+-DORCA_UPDATER_SIG_KEY="$ORCA_UPDATER_SIG_KEY"} \
|
||||||
|
${BUILD_TESTS:+-DBUILD_TESTS=ON} \
|
||||||
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
|
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
|
||||||
-DCMAKE_OSX_ARCHITECTURES="${_ARCH}" \
|
-DCMAKE_OSX_ARCHITECTURES="${_ARCH}" \
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
|
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}" \
|
||||||
|
${CMAKE_POLICY_COMPAT}
|
||||||
fi
|
fi
|
||||||
cmake --build . --config "$BUILD_CONFIG" --target "$SLICER_BUILD_TARGET"
|
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..."
|
echo "Verify localization with gettext..."
|
||||||
(
|
(
|
||||||
cd "$PROJECT_DIR"
|
cd "$PROJECT_DIR"
|
||||||
|
|||||||
@@ -223,9 +223,14 @@ if(NOT TARGET GLEW::glew AND NOT GLEW_USE_STATIC_LIBS)
|
|||||||
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
|
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
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
|
set_target_properties(GLEW::glew
|
||||||
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
|
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(GLEW_SHARED_LIBRARY_RELEASE)
|
if(GLEW_SHARED_LIBRARY_RELEASE)
|
||||||
set_property(TARGET GLEW::glew
|
set_property(TARGET GLEW::glew
|
||||||
@@ -258,9 +263,14 @@ elseif(NOT TARGET GLEW::glew_s AND GLEW_USE_STATIC_LIBS)
|
|||||||
set_target_properties(GLEW::glew_s PROPERTIES INTERFACE_COMPILE_DEFINITIONS GLEW_STATIC)
|
set_target_properties(GLEW::glew_s PROPERTIES INTERFACE_COMPILE_DEFINITIONS GLEW_STATIC)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
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
|
set_target_properties(GLEW::glew_s
|
||||||
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
|
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(GLEW_STATIC_LIBRARY_RELEASE)
|
if(GLEW_STATIC_LIBRARY_RELEASE)
|
||||||
set_property(TARGET GLEW::glew_s
|
set_property(TARGET GLEW::glew_s
|
||||||
@@ -292,9 +302,14 @@ if(NOT TARGET GLEW::GLEW)
|
|||||||
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
|
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
|
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
|
set_target_properties(GLEW::GLEW
|
||||||
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
|
PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
|
||||||
endif()
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(TARGET GLEW::glew)
|
if(TARGET GLEW::glew)
|
||||||
if(GLEW_SHARED_LIBRARY_RELEASE)
|
if(GLEW_SHARED_LIBRARY_RELEASE)
|
||||||
|
|||||||
59
deps/CGAL/0001-clang19.patch
vendored
@@ -1,59 +0,0 @@
|
|||||||
--- a/BGL/include/CGAL/boost/graph/iterator.h 2022-10-07 19:04:41 UTC
|
|
||||||
+++ b/BGL/include/CGAL/boost/graph/iterator.h
|
|
||||||
@@ -213,18 +213,7 @@ class Halfedge_around_source_iterator { (public)
|
|
||||||
{}
|
|
||||||
|
|
||||||
#ifndef DOXYGEN_RUNNING
|
|
||||||
- // design patter: "safe bool"
|
|
||||||
- // will be replaced by explicit operator bool with C++11
|
|
||||||
- typedef void (Halfedge_around_source_iterator::*bool_type)() const;
|
|
||||||
|
|
||||||
- void this_type_does_not_support_comparisons() const {}
|
|
||||||
-
|
|
||||||
- operator bool_type() const
|
|
||||||
- {
|
|
||||||
- return (! (this->base() == nullptr)) ?
|
|
||||||
- &Halfedge_around_source_iterator::this_type_does_not_support_comparisons : 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
bool operator==( const Self& i) const {
|
|
||||||
CGAL_assertion( anchor == anchor);
|
|
||||||
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
|
|
||||||
@@ -313,18 +302,7 @@ class Halfedge_around_target_iterator { (public)
|
|
||||||
{}
|
|
||||||
|
|
||||||
#ifndef DOXYGEN_RUNNING
|
|
||||||
- // design patter: "safe bool"
|
|
||||||
- // will be replaced by explicit operator bool with C++11
|
|
||||||
- typedef void (Halfedge_around_target_iterator::*bool_type)() const;
|
|
||||||
|
|
||||||
- void this_type_does_not_support_comparisons() const {}
|
|
||||||
-
|
|
||||||
- operator bool_type() const
|
|
||||||
- {
|
|
||||||
- return (! (this->base() == nullptr)) ?
|
|
||||||
- &Halfedge_around_target_iterator::this_type_does_not_support_comparisons : 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
bool operator==( const Self& i) const {
|
|
||||||
CGAL_assertion( anchor == anchor);
|
|
||||||
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
|
|
||||||
@@ -411,18 +389,6 @@ class Halfedge_around_face_iterator { (public)
|
|
||||||
const value_type& operator * ( ) const { return pos; }
|
|
||||||
pointer operator -> ( ) { return &pos; }
|
|
||||||
const value_type* operator -> ( ) const { return &pos; }
|
|
||||||
-
|
|
||||||
- // design patter: "safe bool"
|
|
||||||
- // will be replaced by explicit operator bool with C++11
|
|
||||||
- typedef void (Halfedge_around_face_iterator::*bool_type)() const;
|
|
||||||
-
|
|
||||||
- void this_type_does_not_support_comparisons() const {}
|
|
||||||
-
|
|
||||||
- operator bool_type() const
|
|
||||||
- {
|
|
||||||
- return (! (this->base() == nullptr)) ?
|
|
||||||
- &Halfedge_around_face_iterator::this_type_does_not_support_comparisons : 0;
|
|
||||||
- }
|
|
||||||
|
|
||||||
bool operator==( const Self& i) const {
|
|
||||||
CGAL_assertion( anchor == anchor);
|
|
||||||
7
deps/CGAL/CGAL.cmake
vendored
@@ -5,11 +5,10 @@ endif ()
|
|||||||
orcaslicer_add_cmake_project(
|
orcaslicer_add_cmake_project(
|
||||||
CGAL
|
CGAL
|
||||||
# GIT_REPOSITORY https://github.com/CGAL/cgal.git
|
# GIT_REPOSITORY https://github.com/CGAL/cgal.git
|
||||||
# GIT_TAG bec70a6d52d8aacb0b3d82a7b4edc3caa899184b # releases/CGAL-5.0
|
# GIT_TAG 3654f780ae0c64675cabaef0e5ddaf904c48b4b7 # releases/CGAL-5.6.3
|
||||||
# For whatever reason, this keeps downloading forever (repeats downloads if finished)
|
# For whatever reason, this keeps downloading forever (repeats downloads if finished)
|
||||||
URL https://github.com/CGAL/cgal/archive/refs/tags/v5.4.zip
|
URL https://github.com/CGAL/cgal/releases/download/v5.6.3/CGAL-5.6.3.zip
|
||||||
URL_HASH SHA256=d7605e0a5a5ca17da7547592f6f6e4a59430a0bc861948974254d0de43eab4c0
|
URL_HASH SHA256=5d577acb4a9918ccb960491482da7a3838f8d363aff47e14d703f19fd84733d4
|
||||||
PATCH_COMMAND git apply ${CGAL_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-clang19.patch
|
|
||||||
DEPENDS dep_Boost dep_GMP dep_MPFR
|
DEPENDS dep_Boost dep_GMP dep_MPFR
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
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.
|
# 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}
|
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
||||||
${_gen}
|
${_gen}
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||||
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
||||||
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
|
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
|
||||||
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
||||||
@@ -221,6 +226,7 @@ else()
|
|||||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
||||||
${_gen}
|
${_gen}
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||||
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
||||||
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
||||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||||
|
|||||||
4
deps/Qhull/Qhull.cmake
vendored
@@ -1,7 +1,7 @@
|
|||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
orcaslicer_add_cmake_project(Qhull
|
orcaslicer_add_cmake_project(Qhull
|
||||||
URL "https://github.com/qhull/qhull/archive/v8.0.1.zip"
|
URL "https://github.com/qhull/qhull/archive/v8.0.2.zip"
|
||||||
URL_HASH SHA256=5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b
|
URL_HASH SHA256=a378e9a39e718e289102c20d45632f873bfdc58a7a5f924246ea4b176e185f1e
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
-DINCLUDE_INSTALL_DIR=${CMAKE_INSTALL_INCLUDEDIR}
|
-DINCLUDE_INSTALL_DIR=${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
)
|
)
|
||||||
|
|||||||
9
deps/wxWidgets/wxWidgets.cmake
vendored
@@ -24,6 +24,14 @@ else ()
|
|||||||
set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF")
|
set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF")
|
||||||
endif ()
|
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(
|
orcaslicer_add_cmake_project(
|
||||||
wxWidgets
|
wxWidgets
|
||||||
GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-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}
|
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${JPEG_PKG}
|
||||||
${_wx_flatpak_patch}
|
${_wx_flatpak_patch}
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
|
${_wx_opengl_override}
|
||||||
-DwxBUILD_PRECOMP=ON
|
-DwxBUILD_PRECOMP=ON
|
||||||
${_wx_toolkit}
|
${_wx_toolkit}
|
||||||
"-DCMAKE_DEBUG_POSTFIX:STRING=${_wx_debug_postfix}"
|
"-DCMAKE_DEBUG_POSTFIX:STRING=${_wx_debug_postfix}"
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ add_subdirectory(earcut)
|
|||||||
add_subdirectory(fast_float)
|
add_subdirectory(fast_float)
|
||||||
add_subdirectory(nanosvg)
|
add_subdirectory(nanosvg)
|
||||||
add_subdirectory(nlohmann)
|
add_subdirectory(nlohmann)
|
||||||
add_subdirectory(spline) # Header-only spline library
|
|
||||||
add_subdirectory(stb_dxt) # Header-only STB DXT compression library
|
add_subdirectory(stb_dxt) # Header-only STB DXT compression library
|
||||||
|
|
||||||
# Static libraries
|
# Static libraries
|
||||||
add_subdirectory(Shiny)
|
add_subdirectory(Shiny)
|
||||||
add_subdirectory(admesh)
|
add_subdirectory(admesh)
|
||||||
add_subdirectory(clipper)
|
add_subdirectory(clipper)
|
||||||
|
add_subdirectory(clipper2)
|
||||||
add_subdirectory(expat)
|
add_subdirectory(expat)
|
||||||
add_subdirectory(glu-libtess)
|
add_subdirectory(glu-libtess)
|
||||||
add_subdirectory(hidapi)
|
add_subdirectory(hidapi)
|
||||||
|
|||||||
@@ -24,18 +24,7 @@ target_link_libraries(your_target PRIVATE semver::semver)
|
|||||||
target_link_libraries(your_target PRIVATE hints)
|
target_link_libraries(your_target PRIVATE hints)
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. **spline** (Interface Library)
|
### 3. **stb_dxt** (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)
|
|
||||||
- **Type**: Interface library (header-only)
|
- **Type**: Interface library (header-only)
|
||||||
- **Target**: `stb_dxt` or `stb_dxt::stb_dxt`
|
- **Target**: `stb_dxt` or `stb_dxt::stb_dxt`
|
||||||
- **Headers**: `stb_dxt.h`
|
- **Headers**: `stb_dxt.h`
|
||||||
@@ -56,7 +45,6 @@ add_executable(my_app main.cpp)
|
|||||||
target_link_libraries(my_app
|
target_link_libraries(my_app
|
||||||
PRIVATE
|
PRIVATE
|
||||||
semver::semver # For version parsing
|
semver::semver # For version parsing
|
||||||
spline::spline # For spline interpolation
|
|
||||||
stb_dxt::stb_dxt # For DXT texture compression
|
stb_dxt::stb_dxt # For DXT texture compression
|
||||||
hints # For hints functionality
|
hints # For hints functionality
|
||||||
)
|
)
|
||||||
@@ -67,9 +55,6 @@ target_link_libraries(my_app
|
|||||||
// For semver
|
// For semver
|
||||||
#include <semver.h>
|
#include <semver.h>
|
||||||
|
|
||||||
// For spline
|
|
||||||
#include <spline.h>
|
|
||||||
|
|
||||||
// For stb_dxt
|
// For stb_dxt
|
||||||
#include <stb_dxt.h>
|
#include <stb_dxt.h>
|
||||||
|
|
||||||
@@ -100,7 +85,6 @@ target_link_libraries(mycomponent
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
semver::semver # Version handling is part of public API
|
semver::semver # Version handling is part of public API
|
||||||
PRIVATE
|
PRIVATE
|
||||||
spline::spline # Used internally for interpolation
|
|
||||||
stb_dxt::stb_dxt # Used internally for texture compression
|
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."
|
"easily."
|
||||||
msgstr ""
|
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"
|
msgid "Brim ears"
|
||||||
msgstr ""
|
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 "
|
"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"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Orelles de la Vora d'Adherència"
|
msgstr "Orelles de la Vora d'Adherència"
|
||||||
|
|
||||||
|
|||||||
@@ -11730,6 +11730,26 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Mezera mezi nejvnitřnějším límcem a předmětem může usnadnit odstranění límce"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Uši límce"
|
msgstr "Uši límce"
|
||||||
|
|
||||||
|
|||||||
@@ -12766,6 +12766,26 @@ msgstr ""
|
|||||||
"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das Abnehmen "
|
"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das Abnehmen "
|
||||||
"des Randes erleichtern"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Brim Ohren"
|
msgstr "Brim Ohren"
|
||||||
|
|
||||||
|
|||||||
@@ -11327,6 +11327,26 @@ msgstr ""
|
|||||||
"This creates a gap between the innermost brim line and the object and can "
|
"This creates a gap between the innermost brim line and the object and can "
|
||||||
"make the brim easier to remove."
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
@@ -12147,6 +12147,26 @@ msgstr ""
|
|||||||
"Un hueco entre la línea más interna del borde de adherencia y el objeto "
|
"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"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Orejas de borde"
|
msgstr "Orejas de borde"
|
||||||
|
|
||||||
|
|||||||
@@ -12298,6 +12298,26 @@ msgstr ""
|
|||||||
"Un espace entre la ligne de bord la plus interne et l'objet peut faciliter "
|
"Un espace entre la ligne de bord la plus interne et l'objet peut faciliter "
|
||||||
"le retrait du bord"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Bordures à oreilles"
|
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 "
|
"A legbelső peremvonal és a tárgy közötti rés, ami megkönnyítheti a perem "
|
||||||
"eltávolítását"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Karimás fülek"
|
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 "
|
"Crea uno spazio tra la linea più interna della tesa e l'oggetto per rendere "
|
||||||
"più facile la rimozione della tesa."
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Tesa ad orecchio"
|
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"
|
msgid "Brim ears"
|
||||||
msgstr ""
|
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"
|
msgid "Brim ears"
|
||||||
msgstr "브림 귀"
|
msgstr "브림 귀"
|
||||||
|
|
||||||
|
|||||||
@@ -12183,6 +12183,26 @@ msgstr ""
|
|||||||
"Sukuriamas tarpas tarp vidinės krašto linijos ir objekto, todėl galima "
|
"Sukuriamas tarpas tarp vidinės krašto linijos ir objekto, todėl galima "
|
||||||
"lengviau jį atskirti."
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Krašto \"ausys\""
|
msgstr "Krašto \"ausys\""
|
||||||
|
|
||||||
|
|||||||
@@ -11751,6 +11751,26 @@ msgstr ""
|
|||||||
"Dit creëert ruimte tussen de binnenste brimlijn en het object en zorgt "
|
"Dit creëert ruimte tussen de binnenste brimlijn en het object en zorgt "
|
||||||
"ervoor dat het object eenvoudiger van het printbed kan worden verwijderd."
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Rand oren"
|
msgstr "Rand oren"
|
||||||
|
|
||||||
|
|||||||
@@ -12130,6 +12130,26 @@ msgstr ""
|
|||||||
"Szczelina między najbardziej wewnętrzną linią brimu a obiektem może ułatwić "
|
"Szczelina między najbardziej wewnętrzną linią brimu a obiektem może ułatwić "
|
||||||
"usunięcie brimu"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Uszy brim"
|
msgstr "Uszy brim"
|
||||||
|
|
||||||
|
|||||||
@@ -12555,6 +12555,26 @@ msgstr ""
|
|||||||
"Um espaço entre a linha mais interna da borda e o objeto pode facilitar a "
|
"Um espaço entre a linha mais interna da borda e o objeto pode facilitar a "
|
||||||
"remoção da borda."
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Orelhas da borda"
|
msgstr "Orelhas da borda"
|
||||||
|
|
||||||
|
|||||||
@@ -12291,6 +12291,26 @@ msgid ""
|
|||||||
"easily."
|
"easily."
|
||||||
msgstr "Смещение каймы от печатаемой модели, может облегчить её удаление."
|
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"
|
msgid "Brim ears"
|
||||||
msgstr "Ушки каймы"
|
msgstr "Ушки каймы"
|
||||||
|
|
||||||
|
|||||||
@@ -11574,6 +11574,26 @@ msgstr ""
|
|||||||
"Mellanrum mellan innersta brim linjen och objektet kan underlätta vid "
|
"Mellanrum mellan innersta brim linjen och objektet kan underlätta vid "
|
||||||
"borttagande av brim"
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Brätte öron"
|
msgstr "Brätte öron"
|
||||||
|
|
||||||
|
|||||||
@@ -12097,6 +12097,26 @@ msgstr ""
|
|||||||
"En içteki kenar çizgisi ile nesne arasındaki boşluk, kenarlığın daha kolay "
|
"En içteki kenar çizgisi ile nesne arasındaki boşluk, kenarlığın daha kolay "
|
||||||
"çıkarılmasını sağlayabilir."
|
"çı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"
|
msgid "Brim ears"
|
||||||
msgstr "Kenar kulakları"
|
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"
|
msgid "Brim ears"
|
||||||
msgstr "Вушка кайми"
|
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ễ "
|
"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."
|
"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"
|
msgid "Brim ears"
|
||||||
msgstr "Tai brim"
|
msgstr "Tai brim"
|
||||||
|
|
||||||
|
|||||||
@@ -2490,7 +2490,7 @@ msgid "Plate"
|
|||||||
msgstr "盘"
|
msgstr "盘"
|
||||||
|
|
||||||
msgid "Brim"
|
msgid "Brim"
|
||||||
msgstr "Brim"
|
msgstr "边缘"
|
||||||
|
|
||||||
msgid "Object/Part Setting"
|
msgid "Object/Part Setting"
|
||||||
msgstr "对象/零件设置"
|
msgstr "对象/零件设置"
|
||||||
@@ -11493,6 +11493,26 @@ msgid ""
|
|||||||
"easily."
|
"easily."
|
||||||
msgstr "在brim和模型之间设置间隙,能够让brim更容易剥离"
|
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"
|
msgid "Brim ears"
|
||||||
msgstr "圆盘"
|
msgstr "圆盘"
|
||||||
|
|
||||||
|
|||||||
@@ -2493,7 +2493,7 @@ msgid "Plate"
|
|||||||
msgstr "列印板"
|
msgstr "列印板"
|
||||||
|
|
||||||
msgid "Brim"
|
msgid "Brim"
|
||||||
msgstr "Brim"
|
msgstr "邊緣"
|
||||||
|
|
||||||
msgid "Object/Part Setting"
|
msgid "Object/Part Setting"
|
||||||
msgstr "物件/零件 設定"
|
msgstr "物件/零件 設定"
|
||||||
@@ -11560,6 +11560,26 @@ msgid ""
|
|||||||
"easily."
|
"easily."
|
||||||
msgstr "在 Brim 和模型之間設定間隙,能夠讓 Brim 更容易拆除"
|
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"
|
msgid "Brim ears"
|
||||||
msgstr "耳狀 Brim"
|
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.0 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.0 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.0 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 |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M15.5,22.5l-14-14m21,7-14-14m0,21-7-7m21-7-7-7M2.086,2.086,21.914,21.914" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.75"/><path d="M8.5,22.5l14-14m-21,7,14-14m0,21,7-7m-21-7,7-7m13.414.586L2.086,21.914" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M3.5,1.5h17a2,2,0,0,1,2,2v17a2,2,0,0,1-2,2H3.5a2,2,0,0,1-2-2V3.5A2,2,0,0,1,3.5,1.5Z" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 591 B |
@@ -41,7 +41,7 @@
|
|||||||
"before_layer_change_gcode": "; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm",
|
"before_layer_change_gcode": "; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm",
|
||||||
"best_object_pos": "0.5,0.5",
|
"best_object_pos": "0.5,0.5",
|
||||||
"change_extrusion_role_gcode": "",
|
"change_extrusion_role_gcode": "",
|
||||||
"change_filament_gcode": "",
|
"change_filament_gcode": "; FLUSH_START\n;;; M400 P0\nT[next_extruder] ; change extruder\n; 1\n;;; G90\n;;; G1 Z{toolchange_z+2} F480\n;;; G1 X261 Y25 F12000\n;;; G1 Y1 F600\n;;; M400 P2730\n;;; G1 Y25 F3000\n;;; M400 P76250\n;;; M400 P35780\n; 2.1\n;;; G90\n;;; G1 Z{toolchange_z+2} F480\n;;; G1 X47 Y230 F12000\n;;; M400 P0\n; 2.2\n;;; G1 X47 Y276 F600\n;;; G1 X47 Y230 F12000\n;;; G1 X47 Y276 F600\n;;; G1 X47 Y230 F12000\n; 3.1\n;;; G1 F36000\n;;; G1 Y250\n;;; G1 F8000\n;;; G1 X81\n;;; G1 Y273\n; 3.2\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n; 3.3\n;;; G1 X72\n;;; G1 X77\n;;; G1 Z{toolchange_z}\n;;; M400 P0\n; FLUSH_END",
|
||||||
"cooling_tube_length": "0",
|
"cooling_tube_length": "0",
|
||||||
"cooling_tube_retraction": "0",
|
"cooling_tube_retraction": "0",
|
||||||
"deretraction_speed": [
|
"deretraction_speed": [
|
||||||
|
|||||||
@@ -1405,6 +1405,10 @@
|
|||||||
"name": "Generic PLA-CF @base",
|
"name": "Generic PLA-CF @base",
|
||||||
"sub_path": "filament/Generic PLA-CF @base.json"
|
"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",
|
"name": "Overture Matte PLA @base",
|
||||||
"sub_path": "filament/Overture/Overture Matte PLA @base.json"
|
"sub_path": "filament/Overture/Overture Matte PLA @base.json"
|
||||||
@@ -1458,12 +1462,12 @@
|
|||||||
"sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json"
|
"sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Panchroma PLA Silk @base",
|
"name": "Panchroma PLA Satin @base",
|
||||||
"sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
|
"sub_path": "filament/Polymaker/Panchroma PLA Satin @base.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Panchroma PLA Stain @base",
|
"name": "Panchroma PLA Silk @base",
|
||||||
"sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json"
|
"sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Panchroma PLA Starlight @base",
|
"name": "Panchroma PLA Starlight @base",
|
||||||
@@ -5101,6 +5105,42 @@
|
|||||||
"name": "Generic PLA-CF @BBL P2S",
|
"name": "Generic PLA-CF @BBL P2S",
|
||||||
"sub_path": "filament/Generic PLA-CF @BBL P2S.json"
|
"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",
|
"name": "Overture Matte PLA @BBL A1",
|
||||||
"sub_path": "filament/Overture/Overture Matte PLA @BBL A1.json"
|
"sub_path": "filament/Overture/Overture Matte PLA @BBL A1.json"
|
||||||
@@ -5641,6 +5681,46 @@
|
|||||||
"name": "Panchroma PLA Neon @BBL X1C 0.2 nozzle",
|
"name": "Panchroma PLA Neon @BBL X1C 0.2 nozzle",
|
||||||
"sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json"
|
"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",
|
"name": "Panchroma PLA Silk @BBL A1",
|
||||||
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1.json"
|
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1.json"
|
||||||
@@ -5677,46 +5757,6 @@
|
|||||||
"name": "Panchroma PLA Silk @BBL X1C",
|
"name": "Panchroma PLA Silk @BBL X1C",
|
||||||
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1C.json"
|
"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",
|
"name": "Panchroma PLA Starlight @BBL A1",
|
||||||
"sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1.json"
|
"sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1.json"
|
||||||
@@ -7661,46 +7701,6 @@
|
|||||||
"name": "Overture TPU @BBL X1C 0.2 nozzle",
|
"name": "Overture TPU @BBL X1C 0.2 nozzle",
|
||||||
"sub_path": "filament/Overture/Overture TPU @BBL X1C 0.2 nozzle.json"
|
"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",
|
"name": "fdm_filament_dual_common",
|
||||||
"sub_path": "filament/fdm_filament_dual_common.json"
|
"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",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
|
"name": "Panchroma PLA Satin @BBL A1 0.2 nozzle",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_01",
|
"setting_id": "GFSPM005_01",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL A1",
|
"name": "Panchroma PLA Satin @BBL A1",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL A1",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_00",
|
"setting_id": "GFSPM005_00",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
|
"name": "Panchroma PLA Satin @BBL A1M 0.2 nozzle",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_03",
|
"setting_id": "GFSPM005_03",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL A1M",
|
"name": "Panchroma PLA Satin @BBL A1M",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL A1M",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_02",
|
"setting_id": "GFSPM005_02",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
|
"name": "Panchroma PLA Satin @BBL P1P 0.2 nozzle",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_05",
|
"setting_id": "GFSPM005_05",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL P1P",
|
"name": "Panchroma PLA Satin @BBL P1P",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL P1P",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_04",
|
"setting_id": "GFSPM005_04",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
|
"name": "Panchroma PLA Satin @BBL X1 0.2 nozzle",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_07",
|
"setting_id": "GFSPM005_07",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL X1",
|
"name": "Panchroma PLA Satin @BBL X1",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL X1",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_06",
|
"setting_id": "GFSPM005_06",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
|
"name": "Panchroma PLA Satin @BBL X1C 0.2 nozzle",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_09",
|
"setting_id": "GFSPM005_09",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @BBL X1C",
|
"name": "Panchroma PLA Satin @BBL X1C",
|
||||||
"inherits": "Panchroma PLA Stain @base",
|
"renamed_from": "Panchroma PLA Stain @BBL X1C",
|
||||||
|
"inherits": "Panchroma PLA Satin @base",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "GFSPM005_08",
|
"setting_id": "GFSPM005_08",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Panchroma PLA Stain @base",
|
"name": "Panchroma PLA Satin @base",
|
||||||
|
"renamed_from": "Panchroma PLA Stain @base",
|
||||||
"inherits": "fdm_filament_pla",
|
"inherits": "fdm_filament_pla",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "GFPM005",
|
"filament_id": "GFPM005",
|
||||||
@@ -136,7 +136,7 @@
|
|||||||
"60"
|
"60"
|
||||||
],
|
],
|
||||||
"scan_first_layer": "0",
|
"scan_first_layer": "0",
|
||||||
"enable_power_loss_recovery": "1",
|
"enable_power_loss_recovery": "printer_configuration",
|
||||||
"silent_mode": "0",
|
"silent_mode": "0",
|
||||||
"single_extruder_multi_material": "1",
|
"single_extruder_multi_material": "1",
|
||||||
"support_air_filtration": "0",
|
"support_air_filtration": "0",
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
"nozzle_diameter": [
|
"nozzle_diameter": [
|
||||||
"0.4"
|
"0.4"
|
||||||
],
|
],
|
||||||
|
"nozzle_volume": [
|
||||||
|
"156"
|
||||||
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0%"
|
"0%"
|
||||||
],
|
],
|
||||||
@@ -132,7 +135,7 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"parking_pos_retraction": [
|
"parking_pos_retraction": [
|
||||||
"25"
|
"0"
|
||||||
],
|
],
|
||||||
"retract_when_changing_layer": [
|
"retract_when_changing_layer": [
|
||||||
"0"
|
"0"
|
||||||
@@ -141,7 +144,10 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"high_current_on_filament_swap": [
|
"high_current_on_filament_swap": [
|
||||||
"1"
|
"0"
|
||||||
|
],
|
||||||
|
"enable_filament_ramming": [
|
||||||
|
"0"
|
||||||
],
|
],
|
||||||
"z_hop_types": "Spiral Lift"
|
"z_hop_types": "Spiral Lift"
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,9 @@
|
|||||||
"nozzle_diameter": [
|
"nozzle_diameter": [
|
||||||
"0.4"
|
"0.4"
|
||||||
],
|
],
|
||||||
|
"nozzle_volume": [
|
||||||
|
"156"
|
||||||
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0%"
|
"0%"
|
||||||
],
|
],
|
||||||
@@ -132,7 +135,7 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"parking_pos_retraction": [
|
"parking_pos_retraction": [
|
||||||
"25"
|
"0"
|
||||||
],
|
],
|
||||||
"retract_when_changing_layer": [
|
"retract_when_changing_layer": [
|
||||||
"0"
|
"0"
|
||||||
@@ -141,7 +144,10 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"high_current_on_filament_swap": [
|
"high_current_on_filament_swap": [
|
||||||
"1"
|
"0"
|
||||||
|
],
|
||||||
|
"enable_filament_ramming": [
|
||||||
|
"0"
|
||||||
],
|
],
|
||||||
"z_hop_types": "Spiral Lift"
|
"z_hop_types": "Spiral Lift"
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,9 @@
|
|||||||
"nozzle_diameter": [
|
"nozzle_diameter": [
|
||||||
"0.4"
|
"0.4"
|
||||||
],
|
],
|
||||||
|
"nozzle_volume": [
|
||||||
|
"156"
|
||||||
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0%"
|
"0%"
|
||||||
],
|
],
|
||||||
@@ -132,7 +135,7 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"parking_pos_retraction": [
|
"parking_pos_retraction": [
|
||||||
"25"
|
"0"
|
||||||
],
|
],
|
||||||
"retract_when_changing_layer": [
|
"retract_when_changing_layer": [
|
||||||
"0"
|
"0"
|
||||||
@@ -141,7 +144,10 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"high_current_on_filament_swap": [
|
"high_current_on_filament_swap": [
|
||||||
"1"
|
"0"
|
||||||
|
],
|
||||||
|
"enable_filament_ramming": [
|
||||||
|
"0"
|
||||||
],
|
],
|
||||||
"z_hop_types": "Spiral Lift"
|
"z_hop_types": "Spiral Lift"
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,9 @@
|
|||||||
"printer_variant": "0.4",
|
"printer_variant": "0.4",
|
||||||
"nozzle_diameter": [
|
"nozzle_diameter": [
|
||||||
"0.4"
|
"0.4"
|
||||||
|
],
|
||||||
|
"nozzle_volume": [
|
||||||
|
"156"
|
||||||
],
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0%"
|
"0%"
|
||||||
@@ -132,7 +135,7 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"parking_pos_retraction": [
|
"parking_pos_retraction": [
|
||||||
"25"
|
"0"
|
||||||
],
|
],
|
||||||
"retract_when_changing_layer": [
|
"retract_when_changing_layer": [
|
||||||
"0"
|
"0"
|
||||||
@@ -141,7 +144,10 @@
|
|||||||
"0"
|
"0"
|
||||||
],
|
],
|
||||||
"high_current_on_filament_swap": [
|
"high_current_on_filament_swap": [
|
||||||
"1"
|
"0"
|
||||||
|
],
|
||||||
|
"enable_filament_ramming": [
|
||||||
|
"0"
|
||||||
],
|
],
|
||||||
"z_hop_types": "Spiral Lift"
|
"z_hop_types": "Spiral Lift"
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,10 @@
|
|||||||
{
|
{
|
||||||
"name": "Cubicon xCeler-I",
|
"name": "Cubicon xCeler-I",
|
||||||
"sub_path": "machine/Cubicon xCeler-I.json"
|
"sub_path": "machine/Cubicon xCeler-I.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon xCeler-Plus",
|
||||||
|
"sub_path": "machine/Cubicon xCeler-Plus.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"process_list": [
|
"process_list": [
|
||||||
@@ -19,16 +23,20 @@
|
|||||||
"sub_path": "process/fdm_process_common_klipper.json"
|
"sub_path": "process/fdm_process_common_klipper.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cubicon common @Cubicon xCeler-I 0.4 nozzle",
|
"name": "process template @base",
|
||||||
"sub_path": "process/cubicon common @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "process/process template @base.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "process template @Cubicon xCeler-I 0.4 nozzle",
|
"name": "cubicon common @base",
|
||||||
"sub_path": "process/process template @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "process/cubicon common @base.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cubicon default @Cubicon xCeler-I 0.4 nozzle",
|
"name": "cubicon default @Cubicon xCeler-I 0.4 nozzle",
|
||||||
"sub_path": "process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cubicon default @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "process/cubicon default @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"filament_list": [
|
"filament_list": [
|
||||||
@@ -37,12 +45,12 @@
|
|||||||
"sub_path": "filament/fdm_filament_common.json"
|
"sub_path": "filament/fdm_filament_common.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fdm_filament_abs",
|
"name": "fdm_filament_pla",
|
||||||
"sub_path": "filament/fdm_filament_abs.json"
|
"sub_path": "filament/fdm_filament_pla.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fdm_filament_pa",
|
"name": "fdm_filament_abs",
|
||||||
"sub_path": "filament/fdm_filament_pa.json"
|
"sub_path": "filament/fdm_filament_abs.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fdm_filament_pc",
|
"name": "fdm_filament_pc",
|
||||||
@@ -53,44 +61,119 @@
|
|||||||
"sub_path": "filament/fdm_filament_pet.json"
|
"sub_path": "filament/fdm_filament_pet.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fdm_filament_pla",
|
"name": "fdm_filament_pa",
|
||||||
"sub_path": "filament/fdm_filament_pla.json"
|
"sub_path": "filament/fdm_filament_pa.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon PLA @base",
|
||||||
"sub_path": "filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "filament/Cubicon PLA @base.json"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"sub_path": "filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"sub_path": "filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"sub_path": "filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle",
|
||||||
"sub_path": "filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
"sub_path": "filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon PLA+ @base",
|
||||||
"sub_path": "filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "filament/Cubicon PLA+ @base.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle",
|
||||||
"sub_path": "filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Cubicon PLAi21 @base",
|
||||||
|
"sub_path": "filament/Cubicon PLAi21 @base.json"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle",
|
||||||
"sub_path": "filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABS @base",
|
||||||
|
"sub_path": "filament/Cubicon ABS @base.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABSk @base",
|
||||||
|
"sub_path": "filament/Cubicon ABSk @base.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABS-A100 @base",
|
||||||
|
"sub_path": "filament/Cubicon ABS-A100 @base.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PETG @base",
|
||||||
|
"sub_path": "filament/Cubicon PETG @base.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Cubicon PC @base",
|
||||||
|
"sub_path": "filament/Cubicon PC @base.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Cubicon PA-CF @base",
|
||||||
|
"sub_path": "filament/Cubicon PA-CF @base.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"machine_list": [
|
"machine_list": [
|
||||||
@@ -101,6 +184,10 @@
|
|||||||
{
|
{
|
||||||
"name": "Cubicon xCeler-I 0.4 nozzle",
|
"name": "Cubicon xCeler-I 0.4 nozzle",
|
||||||
"sub_path": "machine/Cubicon xCeler-I 0.4 nozzle.json"
|
"sub_path": "machine/Cubicon xCeler-I 0.4 nozzle.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"sub_path": "machine/Cubicon xCeler-Plus 0.4 nozzle.json"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 35 KiB |
BIN
resources/profiles/Cubicon/Cubicon xCeler-Plus_cover.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
@@ -1,71 +1,13 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"inherits": "fdm_filament_abs",
|
|
||||||
"filament_id": "P510cfb0",
|
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"Cubicon xCeler-I 0.4 nozzle"
|
"Cubicon xCeler-I 0.4 nozzle"
|
||||||
],
|
],
|
||||||
"default_filament_colour": "",
|
|
||||||
"filament_settings_id": [
|
"inherits": "Cubicon ABS @base",
|
||||||
"Cubicon ABS @Cubicon xCeler-I 0.4 nozzle"
|
"name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
|
||||||
],
|
"filament_settings_id": ["Cubicon ABS @Cubicon xCeler-I 0.4 nozzle"]
|
||||||
"filament_type": [
|
|
||||||
"ABS"
|
|
||||||
],
|
|
||||||
"filament_vendor": [
|
|
||||||
"Cubicon"
|
|
||||||
],
|
|
||||||
"hot_plate_temp": [
|
|
||||||
"115"
|
|
||||||
],
|
|
||||||
"hot_plate_temp_initial_layer": [
|
|
||||||
"115"
|
|
||||||
],
|
|
||||||
"close_fan_the_first_x_layers": [
|
|
||||||
"3"
|
|
||||||
],
|
|
||||||
"fan_cooling_layer_time": [
|
|
||||||
"30"
|
|
||||||
],
|
|
||||||
"filament_density": [
|
|
||||||
"1.24"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.99"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"25"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_initial_layer": [
|
|
||||||
"240"
|
|
||||||
],
|
|
||||||
"fan_max_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"fan_min_speed": [
|
|
||||||
"70"
|
|
||||||
],
|
|
||||||
"slow_down_min_speed": [
|
|
||||||
"30"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"3"
|
|
||||||
],
|
|
||||||
"nozzle_temperature": [
|
|
||||||
"245"
|
|
||||||
],
|
|
||||||
"temperature_vitrification": [
|
|
||||||
"78"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_range_low": [
|
|
||||||
"220"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_range_high": [
|
|
||||||
"260"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
|
"compatible_printers": [
|
||||||
|
"Cubicon xCeler-Plus 0.4 nozzle"
|
||||||
|
],
|
||||||
|
|
||||||
|
"inherits": "Cubicon ABS @base",
|
||||||
|
"name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"filament_settings_id": ["Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle"]
|
||||||
|
}
|
||||||
73
resources/profiles/Cubicon/filament/Cubicon ABS @base.json
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
|
"compatible_printers": [
|
||||||
|
"Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"Cubicon xCeler-Plus 0.4 nozzle"
|
||||||
|
],
|
||||||
|
|
||||||
|
"default_filament_colour": "",
|
||||||
|
|
||||||
|
"filament_id": "P510cfb0",
|
||||||
|
|
||||||
|
"name": "Cubicon ABS @base",
|
||||||
|
"filament_settings_id": ["Cubicon ABS @base"],
|
||||||
|
"filament_vendor": ["Cubicon"],
|
||||||
|
"inherits": "fdm_filament_abs",
|
||||||
|
"filament_type": ["ABS"],
|
||||||
|
"is_custom_defined": "0",
|
||||||
|
|
||||||
|
"hot_plate_temp": [
|
||||||
|
"115"
|
||||||
|
],
|
||||||
|
"hot_plate_temp_initial_layer": [
|
||||||
|
"115"
|
||||||
|
],
|
||||||
|
"close_fan_the_first_x_layers": [
|
||||||
|
"3"
|
||||||
|
],
|
||||||
|
"fan_cooling_layer_time": [
|
||||||
|
"30"
|
||||||
|
],
|
||||||
|
"filament_density": [
|
||||||
|
"1.24"
|
||||||
|
],
|
||||||
|
"filament_flow_ratio": [
|
||||||
|
"0.99"
|
||||||
|
],
|
||||||
|
"filament_max_volumetric_speed": [
|
||||||
|
"23"
|
||||||
|
],
|
||||||
|
"nozzle_temperature_initial_layer": [
|
||||||
|
"240"
|
||||||
|
],
|
||||||
|
"fan_max_speed": [
|
||||||
|
"80"
|
||||||
|
],
|
||||||
|
"fan_min_speed": [
|
||||||
|
"70"
|
||||||
|
],
|
||||||
|
"slow_down_min_speed": [
|
||||||
|
"30"
|
||||||
|
],
|
||||||
|
"slow_down_layer_time": [
|
||||||
|
"3"
|
||||||
|
],
|
||||||
|
"nozzle_temperature": [
|
||||||
|
"245"
|
||||||
|
],
|
||||||
|
"temperature_vitrification": [
|
||||||
|
"78"
|
||||||
|
],
|
||||||
|
"nozzle_temperature_range_low": [
|
||||||
|
"220"
|
||||||
|
],
|
||||||
|
"nozzle_temperature_range_high": [
|
||||||
|
"260"
|
||||||
|
],
|
||||||
|
"additional_cooling_fan_speed": [
|
||||||
|
"0"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,71 +1,13 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"inherits": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"filament_id": "P510cfb1",
|
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"Cubicon xCeler-I 0.4 nozzle"
|
"Cubicon xCeler-I 0.4 nozzle"
|
||||||
],
|
],
|
||||||
"default_filament_colour": "",
|
|
||||||
"filament_settings_id": [
|
"inherits": "Cubicon ABS-A100 @base",
|
||||||
"Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle"
|
"name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
|
||||||
],
|
"filament_settings_id": ["Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle"]
|
||||||
"filament_type": [
|
|
||||||
"ABS"
|
|
||||||
],
|
|
||||||
"filament_vendor": [
|
|
||||||
"Cubicon"
|
|
||||||
],
|
|
||||||
"hot_plate_temp": [
|
|
||||||
"100"
|
|
||||||
],
|
|
||||||
"hot_plate_temp_initial_layer": [
|
|
||||||
"100"
|
|
||||||
],
|
|
||||||
"close_fan_the_first_x_layers": [
|
|
||||||
"3"
|
|
||||||
],
|
|
||||||
"fan_cooling_layer_time": [
|
|
||||||
"30"
|
|
||||||
],
|
|
||||||
"filament_density": [
|
|
||||||
"1.24"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.99"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"25"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_initial_layer": [
|
|
||||||
"225"
|
|
||||||
],
|
|
||||||
"fan_max_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"fan_min_speed": [
|
|
||||||
"70"
|
|
||||||
],
|
|
||||||
"slow_down_min_speed": [
|
|
||||||
"30"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"3"
|
|
||||||
],
|
|
||||||
"nozzle_temperature": [
|
|
||||||
"230"
|
|
||||||
],
|
|
||||||
"temperature_vitrification": [
|
|
||||||
"78"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_range_low": [
|
|
||||||
"220"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_range_high": [
|
|
||||||
"240"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
|
"compatible_printers": [
|
||||||
|
"Cubicon xCeler-Plus 0.4 nozzle"
|
||||||
|
],
|
||||||
|
|
||||||
|
"inherits": "Cubicon ABS-A100 @base",
|
||||||
|
"name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"filament_settings_id": ["Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
"compatible_printers": [
|
||||||
|
"Cubicon xCeler-I 0.4 nozzle",
|
||||||
|
"Cubicon xCeler-Plus 0.4 nozzle"
|
||||||
|
],
|
||||||
|
"default_filament_colour": "",
|
||||||
|
"filament_id": "P510cfb1",
|
||||||
|
"filament_settings_id": [
|
||||||
|
"Cubicon ABS-A100 @base"
|
||||||
|
],
|
||||||
|
"filament_type": [
|
||||||
|
"ABS"
|
||||||
|
],
|
||||||
|
"filament_vendor": [
|
||||||
|
"Cubicon"
|
||||||
|
],
|
||||||
|
"inherits": "Cubicon ABS @base",
|
||||||
|
"is_custom_defined": "0",
|
||||||
|
"name": "Cubicon ABS-A100 @base",
|
||||||
|
"hot_plate_temp": [
|
||||||
|
"100"
|
||||||
|
],
|
||||||
|
"hot_plate_temp_initial_layer": [
|
||||||
|
"100"
|
||||||
|
],
|
||||||
|
"close_fan_the_first_x_layers": [
|
||||||
|
"3"
|
||||||
|
],
|
||||||
|
"fan_cooling_layer_time": [
|
||||||
|
"30"
|
||||||
|
],
|
||||||
|
"filament_density": [
|
||||||
|
"1.24"
|
||||||
|
],
|
||||||
|
"filament_flow_ratio": [
|
||||||
|
"0.99"
|
||||||
|
],
|
||||||
|
"filament_max_volumetric_speed": [
|
||||||
|
"23"
|
||||||
|
],
|
||||||
|
"nozzle_temperature_initial_layer": [
|
||||||
|
"225"
|
||||||
|
],
|
||||||
|
"fan_max_speed": [
|
||||||
|
"80"
|
||||||
|
],
|
||||||
|
"fan_min_speed": [
|
||||||
|
"70"
|
||||||
|
],
|
||||||
|
"slow_down_min_speed": [
|
||||||
|
"30"
|
||||||
|
],
|
||||||
|
"slow_down_layer_time": [
|
||||||
|
"3"
|
||||||
|
],
|
||||||
|
"nozzle_temperature": [
|
||||||
|
"230"
|
||||||
|
],
|
||||||
|
"temperature_vitrification": [
|
||||||
|
"78"
|
||||||
|
],
|
||||||
|
"nozzle_temperature_range_low": [
|
||||||
|
"220"
|
||||||
|
],
|
||||||
|
"nozzle_temperature_range_high": [
|
||||||
|
"240"
|
||||||
|
],
|
||||||
|
"additional_cooling_fan_speed": [
|
||||||
|
"0"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,71 +1,13 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"inherits": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
|
|
||||||
"filament_id": "P510cfb2",
|
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"Cubicon xCeler-I 0.4 nozzle"
|
"Cubicon xCeler-I 0.4 nozzle"
|
||||||
],
|
],
|
||||||
"default_filament_colour": "",
|
|
||||||
"filament_settings_id": [
|
"inherits": "Cubicon ABSk @base",
|
||||||
"Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle"
|
"name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
|
||||||
],
|
"filament_settings_id": ["Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle"]
|
||||||
"filament_type": [
|
|
||||||
"ABS"
|
|
||||||
],
|
|
||||||
"filament_vendor": [
|
|
||||||
"Cubicon"
|
|
||||||
],
|
|
||||||
"hot_plate_temp": [
|
|
||||||
"115"
|
|
||||||
],
|
|
||||||
"hot_plate_temp_initial_layer": [
|
|
||||||
"115"
|
|
||||||
],
|
|
||||||
"close_fan_the_first_x_layers": [
|
|
||||||
"3"
|
|
||||||
],
|
|
||||||
"fan_cooling_layer_time": [
|
|
||||||
"30"
|
|
||||||
],
|
|
||||||
"filament_density": [
|
|
||||||
"1.24"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.99"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"25"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_initial_layer": [
|
|
||||||
"240"
|
|
||||||
],
|
|
||||||
"fan_max_speed": [
|
|
||||||
"80"
|
|
||||||
],
|
|
||||||
"fan_min_speed": [
|
|
||||||
"70"
|
|
||||||
],
|
|
||||||
"slow_down_min_speed": [
|
|
||||||
"30"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"3"
|
|
||||||
],
|
|
||||||
"nozzle_temperature": [
|
|
||||||
"240"
|
|
||||||
],
|
|
||||||
"temperature_vitrification": [
|
|
||||||
"85"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_range_low": [
|
|
||||||
"220"
|
|
||||||
],
|
|
||||||
"nozzle_temperature_range_high": [
|
|
||||||
"240"
|
|
||||||
],
|
|
||||||
"additional_cooling_fan_speed": [
|
|
||||||
"0"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"instantiation": "true",
|
||||||
|
"version": "1.0.0.0",
|
||||||
|
|
||||||
|
"compatible_printers": [
|
||||||
|
"Cubicon xCeler-Plus 0.4 nozzle"
|
||||||
|
],
|
||||||
|
|
||||||
|
"inherits": "Cubicon ABSk @base",
|
||||||
|
"name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle",
|
||||||
|
"filament_settings_id": ["Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle"]
|
||||||
|
}
|
||||||