Compare commits

..
Author SHA1 Message Date
Hanif Koh 536ef75894 Fill Settings Missing From a CLI Project From Its System Presets
A project saved before a printer or process option existed has no value
for it. The GUI takes such keys from the project's system preset; the
CLI left them at the option default, so e.g. extruder_clearance_dist_to_rod
sliced as 40 instead of the P1S's 33.

The CLI now resolves the project's system printer and process presets by
name and copies the keys the project lacks, skipping preset bookkeeping,
print-host keys, the extruder variant layout and keys the legacy handler
drops. PresetBundle::resolve_system_preset finds the vendor through its
manifest or preset cache, so it also works in release builds, which ship
vendors as caches only.
2026-09-28 18:01:00 +08:00
197 changed files with 1981 additions and 5808 deletions
+45 -105
View File
@@ -1,7 +1,5 @@
name: Daily OFL OTA Update name: Daily OFL OTA Update
run-name: Daily OFL OTA Update [OFL barrier]
# This workflow is intended for creating and publishing the OrcaFilamentLibrary (OFL) OPC package to # This workflow is intended for creating and publishing the OrcaFilamentLibrary (OFL) OPC package to
# https://github.com/OrcaSlicer/orcaslicer-profiles, which generates an OTA update. # https://github.com/OrcaSlicer/orcaslicer-profiles, which generates an OTA update.
# This cronjob runs daily at 00:00 UTC every day and scans main plus every release/vX.Y.Z branch for # This cronjob runs daily at 00:00 UTC every day and scans main plus every release/vX.Y.Z branch for
@@ -14,9 +12,9 @@ run-name: Daily OFL OTA Update [OFL barrier]
# vendor-dispatch path is also what makes post_merge_profiles.yml call the OTA auto-publish API after # vendor-dispatch path is also what makes post_merge_profiles.yml call the OTA auto-publish API after
# uploading - see post_merge_profiles.yml for both sides of that contract. # uploading - see post_merge_profiles.yml for both sides of that contract.
# #
# Each run captures a timestamp, dispatches the needed OFL publishers, waits for # At the start of each run, the pending-publish table is cleared up to a captured
# all of them to finish, then clears the pending-publish table once. Changes merged # timestamp (POST /api/v1/ota/ofl/pending/clear?timestamp=...). Changes merged after
# after that timestamp remain pending for the next run. # that timestamp remain pending for the next run.
on: on:
schedule: schedule:
@@ -36,14 +34,32 @@ jobs:
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' }} if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' }}
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
- name: Capture start timestamp - name: Capture start timestamp and clear OFL pending queue
id: start id: start
shell: bash shell: bash
env:
OTA_API_BASE_URL: ${{ vars.OTA_API_BASE_URL }}
OTA_API_KEY: ${{ secrets.OFL_OTA_PUBLISH_KEY }}
run: | run: |
set -euo pipefail set -euo pipefail
[ -n "$OTA_API_BASE_URL" ] || { echo "::error::vars.OTA_API_BASE_URL is not set"; exit 1; }
[ -n "$OTA_API_KEY" ] || { echo "::error::secrets.OFL_OTA_PUBLISH_KEY is not set"; exit 1; }
timestamp="$(date -u +%s)" timestamp="$(date -u +%s)"
echo "timestamp=$timestamp" >> "$GITHUB_OUTPUT" echo "timestamp=$timestamp" >> "$GITHUB_OUTPUT"
resp_file="$RUNNER_TEMP/ota-pending-clear-response.json"
status="$(curl -sS -o "$resp_file" -w '%{http_code}' -X POST \
"${OTA_API_BASE_URL%/}/api/v1/ota/ofl/pending/clear?timestamp=$timestamp" \
-H "Authorization: Bearer $OTA_API_KEY")"
body="$(cat "$resp_file")"
echo "$body"
if [ "$status" != "200" ]; then
echo "::error::OTA pending-clear call failed with HTTP $status"
exit 1
fi
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v7 uses: actions/checkout@v7
with: with:
@@ -68,21 +84,27 @@ jobs:
| grep -E '^(main|release/v[0-9]+\.[0-9]+\.[0-9]+)$' | sort -u | grep -E '^(main|release/v[0-9]+\.[0-9]+\.[0-9]+)$' | sort -u
) )
# The cron run is the checkpoint: a successful run means every
# dispatched branch publisher completed and the pending queue was
# cleared. Manual or push-triggered post_merge_profiles runs are not
# checkpoints for this scan.
successful_cron_runs="$(gh api --method GET \
"repos/${{ github.repository }}/actions/workflows/ofl-ota-cronjob.yml/runs" \
-f status=success -f branch=main -f per_page=100 --paginate \
--jq '.workflow_runs[] | select((.display_title // "") | contains("[OFL barrier]"))')"
since="$(jq -rs 'sort_by(.run_started_at) | last.run_started_at // empty' <<< "$successful_cron_runs")"
for branch in "${branches[@]}"; do for branch in "${branches[@]}"; do
echo "::group::$branch" echo "::group::$branch"
# post_merge_profiles.yml's own run history, not this workflow's: this
# workflow only ever runs against main (schedule, or workflow_dispatch
# --ref main), so its head branch never varies - filtering ITS history
# by $branch would never match anything except main. post_merge_profiles.yml
# genuinely runs per-branch (this dispatch below sets --ref "$branch"),
# so its history is the real per-branch checkpoint. It also means a
# failed publish naturally gets retried tomorrow: the checkpoint only
# advances on a run that actually succeeded.
# --method GET is required, not cosmetic: gh api defaults to POST
# whenever -f fields are present unless a method is given
# explicitly, and POST on this list-runs endpoint 404s - confirmed
# on real Actions infrastructure, not just reasoned about.
since="$(gh api --method GET "repos/${{ github.repository }}/actions/workflows/post_merge_profiles.yml/runs" \
-f status=success -f branch="$branch" -f per_page=1 \
--jq '.workflow_runs[0].run_started_at // empty')"
if [ -z "$since" ]; then if [ -z "$since" ]; then
echo "No prior successful OFL cron run; checking $branch through $SCAN_UNTIL." echo "No prior successful run for $branch; checking OFL changes up to $SCAN_UNTIL."
changed_files="$(git log --until="$SCAN_UNTIL" --name-only --pretty=format: "origin/$branch" -- \ changed_files="$(git log --until="$SCAN_UNTIL" --name-only --pretty=format: "origin/$branch" -- \
resources/profiles/OrcaFilamentLibrary resources/profiles/OrcaFilamentLibrary.json \ resources/profiles/OrcaFilamentLibrary resources/profiles/OrcaFilamentLibrary.json \
| sed '/^$/d')" | sed '/^$/d')"
@@ -102,98 +124,16 @@ jobs:
fi fi
if [ "$changed" = true ]; then if [ "$changed" = true ]; then
dispatch_id="${GITHUB_RUN_ID}-${branch//\//-}" # Tolerate a per-branch failure (e.g. a pre-existing release branch
# Record successful dispatches for the barrier step below. # whose post_merge_profiles.yml predates the vendor/auto_publish
# Branches whose workflow predates workflow_dispatch are skipped # inputs) rather than aborting the whole scan under set -e.
# with a warning, as they were before the barrier was added. if ! gh workflow run post_merge_profiles.yml \
if gh workflow run post_merge_profiles.yml \
--repo "${{ github.repository }}" \ --repo "${{ github.repository }}" \
--ref "$branch" \ --ref "$branch" \
-f vendor="$VENDOR" -f auto_publish=true \ -f vendor="$VENDOR" -f auto_publish=true; then
-f ofl_cron_dispatch_id="$dispatch_id"; then echo "::warning::failed to dispatch post_merge_profiles.yml for $branch - its post_merge_profiles.yml at this ref may predate the vendor/auto_publish inputs"
printf '%s\t%s\n' "$branch" "$dispatch_id" >> "$RUNNER_TEMP/ofl-dispatches.tsv"
else
echo "::warning::skipping $branch because post_merge_profiles.yml could not be dispatched at that ref"
fi fi
fi fi
echo "::endgroup::" echo "::endgroup::"
done done
- name: Wait for OFL publishers
id: wait
shell: bash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DISPATCHES_FILE: ${{ runner.temp }}/ofl-dispatches.tsv
run: |
set -euo pipefail
if [ ! -s "$DISPATCHES_FILE" ]; then
echo "No OFL publisher workflows were dispatched; pending queue will not be cleared."
echo "publishers_dispatched=false" >> "$GITHUB_OUTPUT"
exit 0
fi
: > "$RUNNER_TEMP/ofl-run-ids.tsv"
while IFS=$'\t' read -r branch dispatch_id; do
[ -n "$branch" ] || continue
echo "Waiting for OFL publisher on $branch ($dispatch_id)"
run_id=""
for _ in {1..120}; do
runs_json="$(gh api --method GET \
"repos/${{ github.repository }}/actions/workflows/post_merge_profiles.yml/runs" \
-f branch="$branch" -f event=workflow_dispatch -f per_page=100)"
run_id="$(jq -r --arg marker "[OFL cron $dispatch_id]" \
'[.workflow_runs[] | select((.display_title // "") | contains($marker))] \
| sort_by(.created_at) | last | .id // empty' <<< "$runs_json")"
[ -n "$run_id" ] && break
sleep 5
done
if [ -z "$run_id" ]; then
echo "::error::could not find dispatched post_merge_profiles run for $branch ($dispatch_id)"
exit 1
fi
printf '%s\t%s\n' "$branch" "$run_id" >> "$RUNNER_TEMP/ofl-run-ids.tsv"
done < "$DISPATCHES_FILE"
all_success=true
while IFS=$'\t' read -r branch run_id; do
[ -n "$run_id" ] || continue
echo "Watching OFL publisher run $run_id for $branch"
if ! gh run watch "$run_id" --repo "${{ github.repository }}" --exit-status; then
all_success=false
fi
done < "$RUNNER_TEMP/ofl-run-ids.tsv"
if [ "$all_success" != true ]; then
echo "::error::one or more OFL publisher workflows failed; pending queue will not be cleared"
exit 1
fi
echo "publishers_dispatched=true" >> "$GITHUB_OUTPUT"
- name: Clear OFL pending queue
if: steps.wait.outputs.publishers_dispatched == 'true'
shell: bash
env:
OTA_API_BASE_URL: ${{ vars.OTA_API_BASE_URL }}
OTA_API_KEY: ${{ secrets.OFL_OTA_PUBLISH_KEY }}
TIMESTAMP: ${{ steps.start.outputs.timestamp }}
run: |
set -euo pipefail
[ -n "$OTA_API_BASE_URL" ] || { echo "::error::vars.OTA_API_BASE_URL is not set"; exit 1; }
[ -n "$OTA_API_KEY" ] || { echo "::error::secrets.OFL_OTA_PUBLISH_KEY is not set"; exit 1; }
resp_file="$RUNNER_TEMP/ota-pending-clear-response.json"
status="$(curl -sS -o "$resp_file" -w '%{http_code}' -X POST \
"${OTA_API_BASE_URL%/}/api/v1/ota/ofl/pending/clear?timestamp=$TIMESTAMP" \
-H "Authorization: Bearer $OTA_API_KEY")"
body="$(cat "$resp_file")"
echo "$body"
if [ "$status" != "200" ]; then
echo "::error::OTA pending-clear call failed with HTTP $status"
exit 1
fi
-15
View File
@@ -1,14 +1,5 @@
name: Post-merge profiles name: Post-merge profiles
run-name: >-
Post-merge profiles${{
inputs.ofl_cron_dispatch_id != '' &&
inputs.vendor == 'OrcaFilamentLibrary' &&
(inputs.auto_publish == true || inputs.auto_publish == 'true') &&
format(' [OFL cron {0}]', inputs.ofl_cron_dispatch_id) ||
''
}}
# Push-triggered counterpart to check_profiles.yml (which only gates PRs). When a # Push-triggered counterpart to check_profiles.yml (which only gates PRs). When a
# profile change lands on main or a release branch, rebuild the affected vendors' # profile change lands on main or a release branch, rebuild the affected vendors'
# binary preset caches (<vendor>.opc) and publish each as a versioned ZIP asset on # binary preset caches (<vendor>.opc) and publish each as a versioned ZIP asset on
@@ -68,12 +59,6 @@ on:
required: false required: false
type: boolean type: boolean
default: false default: false
ofl_cron_dispatch_id:
description: >-
Unique marker supplied by the trusted OFL daily cron so it can find
and wait for this dispatched workflow run.
required: false
type: string
permissions: permissions:
contents: read contents: read
+1 -42
View File
@@ -834,37 +834,6 @@ find_package(OpenSSL REQUIRED)
find_package(CURL REQUIRED) find_package(CURL REQUIRED)
find_package(Freetype REQUIRED) find_package(Freetype REQUIRED)
if (SLIC3R_GUI)
# LibDataChannel's installed export references its bundled dependencies,
# but does not install their CMake targets. Recreate those targets from
# the same dependency prefix before loading the LibDataChannel config.
if (NOT TARGET Usrsctp::usrsctp)
find_library(_ORCA_USRSCTP_LIBRARY NAMES usrsctp
PATHS "${CMAKE_PREFIX_PATH}/lib" NO_DEFAULT_PATH)
if (_ORCA_USRSCTP_LIBRARY)
add_library(Usrsctp::usrsctp UNKNOWN IMPORTED GLOBAL)
set_target_properties(Usrsctp::usrsctp PROPERTIES
IMPORTED_LOCATION "${_ORCA_USRSCTP_LIBRARY}"
IMPORTED_LINK_INTERFACE_LANGUAGES C
INTERFACE_LINK_LIBRARIES "Threads::Threads")
endif()
endif()
if (NOT TARGET LibJuice::LibJuice)
find_library(_ORCA_LIBJUICE_LIBRARY NAMES juice
PATHS "${CMAKE_PREFIX_PATH}/lib" NO_DEFAULT_PATH)
if (_ORCA_LIBJUICE_LIBRARY)
add_library(LibJuice::LibJuice UNKNOWN IMPORTED GLOBAL)
set_target_properties(LibJuice::LibJuice PROPERTIES
IMPORTED_LOCATION "${_ORCA_LIBJUICE_LIBRARY}"
IMPORTED_LINK_INTERFACE_LANGUAGES C
INTERFACE_LINK_LIBRARIES "Threads::Threads")
endif()
endif()
find_package(LibDataChannel CONFIG REQUIRED)
endif()
add_library(libcurl INTERFACE) add_library(libcurl INTERFACE)
target_link_libraries(libcurl INTERFACE CURL::libcurl) target_link_libraries(libcurl INTERFACE CURL::libcurl)
@@ -1145,7 +1114,6 @@ function(orcaslicer_copy_dlls target config postfix output_dlls)
endif () endif ()
file(COPY ${_occt_dlls} file(COPY ${_occt_dlls}
${CMAKE_PREFIX_PATH}/bin/freetype.dll ${CMAKE_PREFIX_PATH}/bin/freetype.dll
${CMAKE_PREFIX_PATH}/bin/avformat-61.dll
${CMAKE_PREFIX_PATH}/bin/avcodec-61.dll ${CMAKE_PREFIX_PATH}/bin/avcodec-61.dll
${CMAKE_PREFIX_PATH}/bin/swresample-5.dll ${CMAKE_PREFIX_PATH}/bin/swresample-5.dll
${CMAKE_PREFIX_PATH}/bin/swscale-8.dll ${CMAKE_PREFIX_PATH}/bin/swscale-8.dll
@@ -1158,7 +1126,6 @@ function(orcaslicer_copy_dlls target config postfix output_dlls)
${_out_dir}/WebView2Loader.dll ${_out_dir}/WebView2Loader.dll
${_out_dir}/freetype.dll ${_out_dir}/freetype.dll
${_out_dir}/avformat-61.dll
${_out_dir}/avcodec-61.dll ${_out_dir}/avcodec-61.dll
${_out_dir}/swresample-5.dll ${_out_dir}/swresample-5.dll
${_out_dir}/swscale-8.dll ${_out_dir}/swscale-8.dll
@@ -1182,10 +1149,7 @@ function(orcaslicer_copy_sos target config postfix output_sos)
set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}") set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
endif () endif ()
file(COPY ${CMAKE_PREFIX_PATH}/lib/libavformat.so file(COPY ${CMAKE_PREFIX_PATH}/lib/libavcodec.so
${CMAKE_PREFIX_PATH}/lib/libavformat.so.61
${CMAKE_PREFIX_PATH}/lib/libavformat.so.61.1.100
${CMAKE_PREFIX_PATH}/lib/libavcodec.so
${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61 ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61
${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61.3.100 ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61.3.100
${CMAKE_PREFIX_PATH}/lib/libavutil.so ${CMAKE_PREFIX_PATH}/lib/libavutil.so
@@ -1200,9 +1164,6 @@ function(orcaslicer_copy_sos target config postfix output_sos)
DESTINATION ${_out_dir}) DESTINATION ${_out_dir})
set(${output_sos} set(${output_sos}
${_out_dir}/libavformat.so
${_out_dir}/libavformat.so.61
${_out_dir}/libavformat.so.61.1.100
${_out_dir}/libavcodec.so ${_out_dir}/libavcodec.so
${_out_dir}/libavcodec.so.61 ${_out_dir}/libavcodec.so.61
${_out_dir}/libavcodec.so.61.3.100 ${_out_dir}/libavcodec.so.61.3.100
@@ -1332,8 +1293,6 @@ endif ()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux") if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(LIBRARY_FILES set(LIBRARY_FILES
${LIBDIR_BIN}/libavformat.so.61
${LIBDIR_BIN}/libavformat.so.61.1.100
${LIBDIR_BIN}/libavcodec.so.61 ${LIBDIR_BIN}/libavcodec.so.61
${LIBDIR_BIN}/libavcodec.so.61.3.100 ${LIBDIR_BIN}/libavcodec.so.61.3.100
${LIBDIR_BIN}/libavutil.so.59 ${LIBDIR_BIN}/libavutil.so.59
+6 -18
View File
@@ -164,7 +164,7 @@ if (NOT _is_multi AND NOT CMAKE_BUILD_TYPE)
endif () endif ()
function(orcaslicer_add_cmake_project projectname) function(orcaslicer_add_cmake_project projectname)
cmake_parse_arguments(P_ARGS "FORWARD_CONFIG" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND;SOURCE_DIR" "CMAKE_ARGS" ${ARGN}) cmake_parse_arguments(P_ARGS "FORWARD_CONFIG" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
# MSVC is true for clang-cl as well, so the sub-build toolchain has to key on the # MSVC is true for clang-cl as well, so the sub-build toolchain has to key on the
# generator. A non-Visual-Studio superbuild passes its own generator down, and with # generator. A non-Visual-Studio superbuild passes its own generator down, and with
@@ -210,18 +210,12 @@ function(orcaslicer_add_cmake_project projectname)
set(_build_j "-j${NPROC}") set(_build_j "-j${NPROC}")
endif () endif ()
set(_source_dir_arg "")
if (P_ARGS_SOURCE_DIR)
set(_source_dir_arg SOURCE_DIR ${P_ARGS_SOURCE_DIR})
endif ()
if (NOT IS_CROSS_COMPILE OR NOT APPLE) if (NOT IS_CROSS_COMPILE OR NOT APPLE)
ExternalProject_Add( ExternalProject_Add(
dep_${projectname} dep_${projectname}
EXCLUDE_FROM_ALL ON EXCLUDE_FROM_ALL ON
INSTALL_DIR ${DESTDIR} INSTALL_DIR ${DESTDIR}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname} DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
${_source_dir_arg}
${_gen} ${_gen}
CMAKE_ARGS CMAKE_ARGS
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_POLICY_VERSION_MINIMUM=3.5
@@ -255,14 +249,12 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
# note for future devs: shared libs may actually create a size reduction # note for future devs: shared libs may actually create a size reduction
# but orcaslicer_deps tends to get really funny regarding linking after that (notably boost) # but orcaslicer_deps tends to get really funny regarding linking after that (notably boost)
# so, as much as I would like to use that, it's not happening # so, as much as I would like to use that, it's not happening
if (NOT P_ARGS_SOURCE_DIR)
ExternalProject_Add_Step(dep_${projectname} free_download_space ExternalProject_Add_Step(dep_${projectname} free_download_space
DEPENDEES download # do after download DEPENDEES download # do after download
COMMENT "Freeing Space: Removing source archive" COMMENT "Freeing Space: Removing source archive"
WORKING_DIRECTORY ${DEP_DOWNLOAD_DIR} WORKING_DIRECTORY ${DEP_DOWNLOAD_DIR}
COMMAND ${CMAKE_COMMAND} -E rm -rf ${projectname} COMMAND ${CMAKE_COMMAND} -E rm -r ${projectname}
) )
endif ()
ExternalProject_Add_Step(dep_${projectname} free_build_space ExternalProject_Add_Step(dep_${projectname} free_build_space
DEPENDEES install # do after install DEPENDEES install # do after install
COMMENT "Freeing Space: Removing source and build files" COMMENT "Freeing Space: Removing source and build files"
@@ -276,7 +268,6 @@ else()
EXCLUDE_FROM_ALL ON EXCLUDE_FROM_ALL ON
INSTALL_DIR ${DESTDIR} INSTALL_DIR ${DESTDIR}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname} DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
${_source_dir_arg}
${_gen} ${_gen}
CMAKE_ARGS CMAKE_ARGS
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 -DCMAKE_POLICY_VERSION_MINIMUM=3.5
@@ -405,6 +396,10 @@ include(libnoise/libnoise.cmake)
include(Draco/Draco.cmake) include(Draco/Draco.cmake)
include(FFMPEG/FFMPEG.cmake)
include(Assimp/Assimp.cmake)
# I *think* 1.1 is used for *just* md5 hashing? # I *think* 1.1 is used for *just* md5 hashing?
# 3.1 has everything in the right place, but the md5 funcs used are deprecated # 3.1 has everything in the right place, but the md5 funcs used are deprecated
# a grep across the repo shows it is used for other things # a grep across the repo shows it is used for other things
@@ -415,12 +410,6 @@ if(NOT OPENSSL_FOUND)
set(OPENSSL_PKG dep_OpenSSL) set(OPENSSL_PKG dep_OpenSSL)
endif() endif()
include(FFMPEG/FFMPEG.cmake)
include(Assimp/Assimp.cmake)
include(DataChannel/DataChannel.cmake)
set(DATACHANNEL_PKG dep_DataChannel)
# we don't want to load a "wrong" openssl when loading curl # we don't want to load a "wrong" openssl when loading curl
# so, just don't even bother # so, just don't even bother
# ...i think this is how it works? change if wrong # ...i think this is how it works? change if wrong
@@ -494,7 +483,6 @@ set(_dep_list
dep_wxInspector dep_wxInspector
dep_FFMPEG dep_FFMPEG
dep_Assimp dep_Assimp
${DATACHANNEL_PKG}
) )
if (MSVC) if (MSVC)
-37
View File
@@ -1,37 +0,0 @@
# libdatachannel is the native ICE/DTLS/SCTP implementation used by the
# GUI WebRTC camera controller. Keep the source revision fixed: the signaling
# protocol is evolving independently of this transport dependency.
#
# It vendors plog, usrsctp and libjuice as git submodules, which a plain
# GitHub tag tarball does not include. The flatpak sandbox has no network
# access during the build, so there the manifest itself clones the repo
# (submodules and all) into the dependency download directory before the
# sandbox closes. ExternalProject_Add is pointed at that existing checkout
# instead of being given its own network-dependent download method.
if (FLATPAK)
set(_datachannel_source
SOURCE_DIR ${DEP_DOWNLOAD_DIR}/DataChannel
)
else()
set(_datachannel_source
GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
GIT_TAG v0.24.5
GIT_SHALLOW ON
GIT_SUBMODULES_RECURSE ON
)
endif()
orcaslicer_add_cmake_project(DataChannel
DEPENDS ${OPENSSL_PKG}
CMAKE_ARGS
-DNO_EXAMPLES=ON
-DNO_TESTS=ON
-DNO_WEBSOCKET=ON
-DNO_MEDIA=ON
-DUSE_NICE=OFF
-DUSE_SYSTEM_JUICE=OFF
-DUSE_SYSTEM_USRSCTP=OFF
-DOPENSSL_ROOT_DIR:PATH=${DESTDIR}
-DOPENSSL_USE_STATIC_LIBS=ON
${_datachannel_source}
)
+7 -23
View File
@@ -1,26 +1,14 @@
set(_conf_cmd ./configure) set(_conf_cmd ./configure)
set(_ffmpeg_depends)
set(_ffmpeg_configure_command ${_conf_cmd})
if (TARGET dep_OpenSSL)
set(_ffmpeg_depends DEPENDS dep_OpenSSL)
set(_ffmpeg_configure_command
${CMAKE_COMMAND} -E env
"PKG_CONFIG_PATH=${DESTDIR}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}"
${_conf_cmd}
)
endif()
if (MSVC) if (MSVC)
set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG") set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG")
set(PREBUILD_URL_arm64 "https://github.com/Noisyfox/FFmpeg-Builds-Orca/releases/download/autobuild-2026-09-18-16-50/ffmpeg-n7.0.3-33-g887d4b4919-winarm64-orca-shared-7.0.zip") set(PREBUILD_URL_arm64 "https://github.com/Noisyfox/FFmpeg-Builds-Orca/releases/download/autobuild-2026-07-17-14-28/ffmpeg-n7.0.3-31-g9b6ffd74b5-winarm64-orca-shared-7.0.zip")
set(PREBUILD_HASH_arm64 "da480cbb39680056de824c57ec4dc3bd577b479ebbc310ff1f9dc55cf014b4c1") set(PREBUILD_HASH_arm64 "12f4140279f2f8469885e1b5b2e8be9d788882914c21523cacd56989f3548054")
set(PREBUILD_URL_x64 "https://github.com/Noisyfox/FFmpeg-Builds-Orca/releases/download/autobuild-2026-09-18-16-50/ffmpeg-n7.0.3-33-g887d4b4919-win64-orca-shared-7.0.zip") set(PREBUILD_URL_x64 "https://github.com/Noisyfox/FFmpeg-Builds-Orca/releases/download/autobuild-2026-07-17-14-28/ffmpeg-n7.0.3-31-g9b6ffd74b5-win64-orca-shared-7.0.zip")
set(PREBUILD_HASH_x64 "85da19daf198f5548259d8aabb349db84997a3f6e6886d8d7764114add9c6dae") set(PREBUILD_HASH_x64 "e65916020ddb9ef84b2666dfbcbfc9b1d67f69d15b4a66db53754637bf2d498c")
ExternalProject_Add(dep_FFMPEG ExternalProject_Add(dep_FFMPEG
${_ffmpeg_depends}
URL ${PREBUILD_URL_${DEPS_ARCH}} URL ${PREBUILD_URL_${DEPS_ARCH}}
URL_HASH SHA256=${PREBUILD_HASH_${DEPS_ARCH}} URL_HASH SHA256=${PREBUILD_HASH_${DEPS_ARCH}}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
@@ -33,8 +21,6 @@ if (MSVC)
) )
else () else ()
set(_openssl_cmd --enable-openssl)
if (APPLE) if (APPLE)
set(_minos_cmd set(_minos_cmd
"--extra-cflags=-mmacosx-version-min=${DEP_OSX_TARGET}" "--extra-cflags=-mmacosx-version-min=${DEP_OSX_TARGET}"
@@ -66,11 +52,10 @@ else ()
endif() endif()
ExternalProject_Add(dep_FFMPEG ExternalProject_Add(dep_FFMPEG
${_ffmpeg_depends}
URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.3.tar.gz URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.3.tar.gz
URL_HASH SHA256=DEEDCABE339165214A3637DF4C86A507AEF0D793CF8774FF68735F4737E8DDBC URL_HASH SHA256=DEEDCABE339165214A3637DF4C86A507AEF0D793CF8774FF68735F4737E8DDBC
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
CONFIGURE_COMMAND ${_ffmpeg_configure_command} CONFIGURE_COMMAND ${_conf_cmd}
${_cross_cmd} ${_cross_cmd}
${_pic_cmd} ${_pic_cmd}
${_arch_cmd} ${_arch_cmd}
@@ -78,21 +63,20 @@ else ()
"--prefix=${DESTDIR}" "--prefix=${DESTDIR}"
${_link_cmd} ${_link_cmd}
${_minos_cmd} ${_minos_cmd}
${_openssl_cmd}
--disable-doc --disable-doc
--enable-small --enable-small
--disable-outdevs --disable-outdevs
--disable-filters --disable-filters
--enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test* --enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test*
--disable-protocols --disable-protocols
--enable-protocol=file,fd,pipe,http,https,rtp,tcp,udp --enable-protocol=file,fd,pipe,rtp,udp
--disable-muxers --disable-muxers
--enable-muxer=rtp --enable-muxer=rtp
--disable-encoders --disable-encoders
--disable-decoders --disable-decoders
--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv* --enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*
--disable-demuxers --disable-demuxers
--enable-demuxer=h264,mp3,mov,mpjpeg,rtsp,sdp --enable-demuxer=h264,mp3,mov
--disable-zlib --disable-zlib
--disable-avdevice --disable-avdevice
BUILD_IN_SOURCE ON BUILD_IN_SOURCE ON
-240
View File
@@ -1,240 +0,0 @@
# Printer agents
Printer agents isolate printer-specific communication from the rest of OrcaSlicer. The GUI and
`DeviceManager` operate on a shared set of printer operations and device state; a selected printer
agent implements those operations for a particular printer ecosystem. The agent boundary allows
Bambu, Moonraker-based printers, built-in integrations, and Python-provided integrations to use the
same application workflow without making the GUI understand every printer protocol.
The current boundary is an adapter boundary around the existing application contract. In particular,
some request fields and message payloads still use the Bambu-shaped representation that existing
`MachineObject` and `DeviceManager` code consumes. The printer agent is responsible for translating
that representation into the protocol spoken by its printer. This is an intentional compatibility
constraint of the current design; the interface is not yet a neutral printer protocol.
The v1 dialect migration path is deliberately narrow. `DeviceManager` currently speaks the Bambu JSON
dialect because that is the payload shape already used throughout the command and state workflow. The
v1 `OrcaPrinterAgent` also accepts that Bambu dialect. Its transport path places the small translation
needed for the target printer at `deliver_to_sink`, keeping the compatibility code at the edge rather
than spreading it through `DeviceManager` or the agent interface.
The eventual direction is for `DeviceManager` to produce an Orca JSON dialect. The Bambu agent will then
own the translation from Orca JSON to Bambu's protocol, while `OrcaPrinterAgent` can forward the Orca
payload directly to its sink. The v1 translation at `deliver_to_sink` can then be removed without
changing `DeviceManager`, the command callers, or the rest of the agent workflow.
## Components
The system has four relevant layers:
```text
GUI / DeviceManager / MachineObject
|
NetworkAgent
/ \
IPrinterAgent ICloudServiceAgent
| |
printer protocol authentication and cloud services
```
### `DeviceManager` and `MachineObject`
`DeviceManager` owns the application-facing printer workflow. It maintains `MachineObject` instances,
updates their state, filters devices for the active printer agent, and initiates operations such as
homing, temperature changes, printing, subscriptions, and camera playback.
`MachineObject` remains the shared state model used by the GUI. It does not contain the implementation
of a printer protocol. When a device is discovered or returned by a cloud query, the device is tagged
with the active `printer_agent_id`. Device lists and selected-machine operations use that tag to avoid
sending an operation through an agent that does not own the device.
### `NetworkAgent`
`NetworkAgent` is the façade used by the GUI and `DeviceManager`. It owns:
- the currently selected `IPrinterAgent`;
- the registered cloud-service instances, indexed by provider;
- callbacks shared by the active printer agent and the application;
- the forwarding methods for printer commands and cloud operations.
There is one active printer agent for the currently selected printer preset. Switching the preset
increments the machine-list generation, disconnects the old printer agent, removes its callbacks, and
installs the newly selected agent. The façade then forwards printer operations to that agent.
Cloud operations are selected separately using a provider key. `NetworkAgent` forwards a cloud request
to the matching `ICloudServiceAgent`, and forwards cloud camera operations with a device ID. The
printer agent receives a cloud-agent pointer through `set_cloud_agent()` when it is created, allowing
printer communication to obtain cloud tokens without depending on a concrete cloud implementation.
### `IPrinterAgent`
`IPrinterAgent` is the printer-facing contract. It covers:
- cloud-relay and direct-LAN message delivery;
- LAN connection, discovery, binding, and certificates;
- printer subscriptions and callbacks;
- print operations;
- filament synchronization;
- camera capability and local camera URL reporting;
- printer command methods.
Concrete built-in implementations include the Bambu wrapper, the native Orca/Moonraker path, and
other printer-agent implementations registered by the application. A printer agent may use either
the cloud agent, a direct LAN connection, or both.
### `ICloudServiceAgent`
`ICloudServiceAgent` owns authentication and services provided by a cloud backend. It covers login
state, tokens, user and printer lists, settings synchronization, model services, cloud messages, and
cloud camera operations.
Cloud camera operations are device-scoped:
- `get_camera_url(dev_id, callback)` obtains a stream URL for one device;
- `create_camera_signaling_channel(dev_id)` creates signaling for one device where the provider
supports it.
This is separate from the local camera URL exposed by `IPrinterAgent`, which is currently scoped to
the active printer agent because a normal LAN agent represents one physical printer connection.
## Agent registration and selection
`NetworkAgentFactory` maintains the printer-agent registry. Each registry entry contains an agent ID,
a display name, and a factory function. Built-in agents register during application initialization.
Python printer-agent capabilities register dynamically and contribute an agent ID and factory entry.
The selected printer preset contains the printer-agent choice. If no explicit choice is stored, the
application preserves the existing default behavior: Bambu presets select the Bambu agent and other
presets select the native Orca agent. When a preset is changed, `GUI_App` resolves the effective agent
ID, obtains the corresponding cloud agent, creates the printer agent through the registry, and installs
it in `NetworkAgent`.
The registry rejects conflicting agent IDs. This matters for Python plugins because an agent ID is the
stable identity used by presets and device ownership; two enabled plugin capabilities must not claim
the same ID.
## Message and command flow
There are two low-level message paths:
- `send_message()` publishes a command through the printer's cloud relay;
- `send_message_to_printer()` sends a command directly to the printer over the LAN path.
Both paths accept a JSON string, quality-of-service and flag values, and return the existing network
status code domain. The agent owns the conversion from that JSON contract to its native transport.
The typed `command_*` methods are the application-facing convenience layer. The five generic defaults
currently implemented by `IPrinterAgent` construct the existing JSON dialect and route through the
same message path:
| Method | Default operation |
| --- | --- |
| `command_xyz_abs()` | Send `G90` for absolute positioning |
| `command_auto_leveling()` | Send `G29` for bed leveling |
| `command_go_home()` | Use the supported homing operation or send `G28` |
| `command_set_bed()` | Use the supported bed control or send `M140` |
| `command_set_nozzle()` | Send `M104` for nozzle temperature |
These are compatibility defaults for common printer workflows, not a guarantee that every firmware
implements every command identically. An agent can override a method when its protocol needs another
operation. For example, a Klipper configuration may use `BED_MESH_CALIBRATE` instead of `G29`.
The remaining common command methods default to `ORCA_NETWORK_ERR_CMD_NOT_SUPPORTED` because their
existing behavior is vendor-specific or has no portable implementation:
- AMS RFID refresh;
- AMS calibration;
- AMS tray selection;
- camera start;
- axis control.
The methods remain on the common interface so an agent that supports them can override them explicitly.
`sequence_id` remains part of the command contract because `DeviceManager` creates and tracks it as
the command ID.
## Device ownership and stale responses
Printer-agent ownership is represented by `printer_agent_id` on device records and `MachineObject`
instances. The active agent ID is attached when a device is discovered, returned by a cloud list, or
reused after a preset switch. Local-machine configuration also persists the agent ID so a saved LAN
device is not silently reused by an unrelated agent.
Cloud printer-list responses carry three pieces of request context added by `NetworkAgent`:
```text
provider cloud provider used for the request
agent_id active printer agent when the request was made
generation machine-list generation when the request was made
```
`DeviceManager` accepts the response only when those values still match the current provider, active
agent, and generation. This prevents a slow response from the previous preset or provider from
repopulating the current device list.
The provider mapping is currently selected by `GUI_App`: the Bambu agent maps to the Bambu cloud
provider and other agents map to the Orca cloud provider. The generation check protects that existing
selection from races; it does not make cloud-provider ownership intrinsic to an agent. Cloud-printer
ownership and the broader Orca cloud services are therefore still separate architectural concerns.
## Python printer agents
`PrinterAgentPluginCapability` implements `IPrinterAgent` directly. The live capability object is
registered with `NetworkAgentFactory` and handed out as the printer agent when its agent ID is selected.
The plugin receives the selected `ICloudServiceAgent` through `set_cloud_agent()` just like a built-in
printer agent.
Python plugins must implement the core communication and lifecycle methods required by the interface,
including agent metadata, printer connection, discovery callbacks, and the two message-send methods.
Methods that are meaningful only to a particular printer are optional overrides where the C++ base
class provides a default.
All ten `command_*` methods are available in the Python binding and in the trampoline. Their override
status is intentionally optional:
- the five generic commands use the C++ default when Python does not override them;
- the five vendor-specific commands return `NOT_SUPPORTED` unless Python supplies an implementation;
- a Python implementation can replace either behavior for its own protocol.
The Python camera binding exposes HTTP, HTTPS, RTSP, and HTTP-snapshot modes. WebRTC remains a
built-in C++ camera mode, but is not exposed as a Python mode because the current Python capability
does not provide the corresponding cloud signaling-channel contract.
## Camera playback boundary
The camera stream mode describes how a stream is obtained; it does not by itself define ownership of
the wxWidgets view that renders it. `MediaPlayCtrl` selects and tears down the active backend, while
the wx parent owns the child window or renderer. This is important because a web view, native media
control, and frame-based/WebRTC renderer have different wx window-lifetime requirements.
Cloud URL and signaling requests are routed through `NetworkAgent` to the cloud provider selected for
the device. Local URL requests are routed to the active printer agent. The distinction keeps cloud
account services device-scoped while preserving the current one-LAN-agent/one-printer model.
## Compatibility constraints
The printer-agent boundary intentionally preserves several existing application contracts:
- Bambu-shaped JSON is still the shared command representation;
- existing network status codes are reused, with Orca-specific unsupported/capability errors added
in the Orca-reserved range;
- `MachineObject` remains the shared device-state model;
- preset and local-machine data retain compatibility with the existing agent-selection behavior;
- Python plugins use the existing capability and pybind11 registration system.
The agent abstraction is therefore responsible for containing vendor differences, not for pretending
that all vendor protocols are identical. The planned Orca JSON dialect is the protocol-neutral command
model for the `DeviceManager`/agent boundary. Once it is introduced, Bambu-specific translation remains
inside the Bambu agent and the Orca agent's v1 sink adapter can be removed as a self-contained cleanup.
## Main implementation locations
- [`IPrinterAgent`](../../src/slic3r/Utils/IPrinterAgent.hpp) — printer-agent contract and generic command defaults
- [`ICloudServiceAgent`](../../src/slic3r/Utils/ICloudServiceAgent.hpp) — cloud service and per-device
cloud camera contract
- [`NetworkAgent`](../../src/slic3r/Utils/NetworkAgent.hpp) — façade and dispatch between active agents
- [`NetworkAgentFactory`](../../src/slic3r/Utils/NetworkAgentFactory.hpp) — built-in and Python agent registry
- [`DeviceManager`](../../src/slic3r/GUI/DeviceCore/DevManager.cpp) — device ownership, filtering, and
stale-response checks
- [`PrinterAgentPluginCapability`](../../src/slic3r/plugin/pluginTypes/printerAgent/PrinterAgentPluginCapability.cpp)
— Python bindings
- [`MediaPlayCtrl`](../../src/slic3r/GUI/MediaPlayCtrl.cpp) — camera backend selection and playback lifecycle
+55 -155
View File
@@ -1,6 +1,6 @@
{ {
"name": "Blocks", "name": "Blocks",
"version": "02.04.00.13", "version": "02.04.00.04",
"force_update": "0", "force_update": "0",
"description": "Blocks configurations", "description": "Blocks configurations",
"machine_model_list": [ "machine_model_list": [
@@ -43,8 +43,8 @@
"sub_path": "process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json" "sub_path": "process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100", "name": "0.20mm Standard 0.4 nozzle @Blocks",
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks.json"
}, },
{ {
"name": "0.20mm Standard 0.4 nozzle @Blocks_RD50_V2", "name": "0.20mm Standard 0.4 nozzle @Blocks_RD50_V2",
@@ -55,8 +55,8 @@
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json" "sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.24mm Draft 0.4 nozzle @Blocks_Pro_S100", "name": "0.24mm Draft 0.4 nozzle @Blocks",
"sub_path": "process/0.24mm Draft 0.4 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.24mm Draft 0.4 nozzle @Blocks.json"
}, },
{ {
"name": "0.24mm Draft 0.4 nozzle @Blocks_RD50_V2", "name": "0.24mm Draft 0.4 nozzle @Blocks_RD50_V2",
@@ -75,8 +75,8 @@
"sub_path": "process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json" "sub_path": "process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100", "name": "0.30mm Extra Draft 0.4 nozzle @Blocks",
"sub_path": "process/0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.30mm Extra Draft 0.4 nozzle @Blocks.json"
}, },
{ {
"name": "fdm_process_common 0.6 nozzle", "name": "fdm_process_common 0.6 nozzle",
@@ -111,8 +111,8 @@
"sub_path": "process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json" "sub_path": "process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100", "name": "0.30mm Standard 0.6 nozzle @Blocks",
"sub_path": "process/0.30mm Standard 0.6 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.30mm Standard 0.6 nozzle @Blocks.json"
}, },
{ {
"name": "0.32mm Draft 0.6 nozzle @Blocks_RD50_V2", "name": "0.32mm Draft 0.6 nozzle @Blocks_RD50_V2",
@@ -131,12 +131,12 @@
"sub_path": "process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json" "sub_path": "process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.40mm Draft 0.6 nozzle @Blocks_Pro_S100", "name": "0.40mm Draft 0.6 nozzle @Blocks",
"sub_path": "process/0.40mm Draft 0.6 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.40mm Draft 0.6 nozzle @Blocks.json"
}, },
{ {
"name": "0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100", "name": "0.30mm Optimal 0.8 nozzle @Blocks",
"sub_path": "process/0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.30mm Optimal 0.8 nozzle @Blocks.json"
}, },
{ {
"name": "0.30mm Optimal 0.8 nozzle @Blocks_RD50_V2", "name": "0.30mm Optimal 0.8 nozzle @Blocks_RD50_V2",
@@ -155,8 +155,8 @@
"sub_path": "process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json" "sub_path": "process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100", "name": "0.40mm Standard 0.8 nozzle @Blocks",
"sub_path": "process/0.40mm Standard 0.8 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.40mm Standard 0.8 nozzle @Blocks.json"
}, },
{ {
"name": "0.46mm Draft 0.8 nozzle @Blocks_RD50_V2", "name": "0.46mm Draft 0.8 nozzle @Blocks_RD50_V2",
@@ -167,8 +167,8 @@
"sub_path": "process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json" "sub_path": "process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.50mm Draft 0.8 nozzle @Blocks_Pro_S100", "name": "0.50mm Draft 0.8 nozzle @Blocks",
"sub_path": "process/0.50mm Draft 0.8 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.50mm Draft 0.8 nozzle @Blocks.json"
}, },
{ {
"name": "0.54mm Extra Draft 0.8 nozzle @Blocks_RD50_V2", "name": "0.54mm Extra Draft 0.8 nozzle @Blocks_RD50_V2",
@@ -179,36 +179,36 @@
"sub_path": "process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json" "sub_path": "process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json"
}, },
{ {
"name": "0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100", "name": "0.30mm Optimal 1.0 nozzle @Blocks",
"sub_path": "process/0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.30mm Optimal 1.0 nozzle @Blocks.json"
}, },
{ {
"name": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100", "name": "0.50mm Standard 1.0 nozzle @Blocks",
"sub_path": "process/0.50mm Standard 1.0 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.50mm Standard 1.0 nozzle @Blocks.json"
}, },
{ {
"name": "0.60mm Draft 1.0 nozzle @Blocks_Pro_S100", "name": "0.60mm Draft 1.0 nozzle @Blocks",
"sub_path": "process/0.60mm Draft 1.0 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.60mm Draft 1.0 nozzle @Blocks.json"
}, },
{ {
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100", "name": "0.70mm Extra Draft 1.0 nozzle @Blocks",
"sub_path": "process/0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.70mm Extra Draft 1.0 nozzle @Blocks.json"
}, },
{ {
"name": "0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100", "name": "0.50mm Optimal 1.2 nozzle @Blocks",
"sub_path": "process/0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.50mm Optimal 1.2 nozzle @Blocks.json"
}, },
{ {
"name": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100", "name": "0.60mm Standard 1.2 nozzle @Blocks",
"sub_path": "process/0.60mm Standard 1.2 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.60mm Standard 1.2 nozzle @Blocks.json"
}, },
{ {
"name": "0.70mm Draft 1.2 nozzle @Blocks_Pro_S100", "name": "0.70mm Draft 1.2 nozzle @Blocks",
"sub_path": "process/0.70mm Draft 1.2 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.70mm Draft 1.2 nozzle @Blocks.json"
}, },
{ {
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100", "name": "0.80mm Extra Draft 1.2 nozzle @Blocks",
"sub_path": "process/0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100.json" "sub_path": "process/0.80mm Extra Draft 1.2 nozzle @Blocks.json"
} }
], ],
"filament_list": [ "filament_list": [
@@ -249,148 +249,48 @@
"sub_path": "filament/fdm_filament_tpu.json" "sub_path": "filament/fdm_filament_tpu.json"
}, },
{ {
"name": "Blocks ABS @base", "name": "Generic ABS @Blocks",
"sub_path": "filament/Blocks ABS @base.json" "sub_path": "filament/Generic ABS @Blocks.json"
}, },
{ {
"name": "Blocks ASA @base", "name": "Generic ASA @Blocks",
"sub_path": "filament/Blocks ASA @base.json" "sub_path": "filament/Generic ASA @Blocks.json"
}, },
{ {
"name": "Blocks ASA-CF @base", "name": "Generic ASA-CF @Blocks",
"sub_path": "filament/Blocks ASA-CF @base.json" "sub_path": "filament/Generic ASA-CF @Blocks.json"
}, },
{ {
"name": "Blocks PA @base", "name": "Generic PA @Blocks",
"sub_path": "filament/Blocks PA @base.json" "sub_path": "filament/Generic PA @Blocks.json"
}, },
{ {
"name": "Blocks PA-CF @base", "name": "Generic PA-CF @Blocks",
"sub_path": "filament/Blocks PA-CF @base.json" "sub_path": "filament/Generic PA-CF @Blocks.json"
}, },
{ {
"name": "Blocks PC @base", "name": "Generic PC @Blocks",
"sub_path": "filament/Blocks PC @base.json" "sub_path": "filament/Generic PC @Blocks.json"
}, },
{ {
"name": "Blocks PETG @base", "name": "Generic PETG @Blocks",
"sub_path": "filament/Blocks PETG @base.json" "sub_path": "filament/Generic PETG @Blocks.json"
}, },
{ {
"name": "Blocks PLA @base", "name": "Generic PLA @Blocks",
"sub_path": "filament/Blocks PLA @base.json" "sub_path": "filament/Generic PLA @Blocks.json"
}, },
{ {
"name": "Blocks PLA-CF @base", "name": "Generic PLA-CF @Blocks",
"sub_path": "filament/Blocks PLA-CF @base.json" "sub_path": "filament/Generic PLA-CF @Blocks.json"
}, },
{ {
"name": "Blocks PVA @base", "name": "Generic PVA @Blocks",
"sub_path": "filament/Blocks PVA @base.json" "sub_path": "filament/Generic PVA @Blocks.json"
}, },
{ {
"name": "Blocks TPU @base", "name": "Generic TPU @Blocks",
"sub_path": "filament/Blocks TPU @base.json" "sub_path": "filament/Generic TPU @Blocks.json"
},
{
"name": "Blocks ABS @Blocks_RD50_V2",
"sub_path": "filament/Blocks ABS @Blocks_RD50_V2.json"
},
{
"name": "Blocks ABS @Blocks_RF50",
"sub_path": "filament/Blocks ABS @Blocks_RF50.json"
},
{
"name": "Blocks ASA @Blocks_RD50_V2",
"sub_path": "filament/Blocks ASA @Blocks_RD50_V2.json"
},
{
"name": "Blocks ASA @Blocks_RF50",
"sub_path": "filament/Blocks ASA @Blocks_RF50.json"
},
{
"name": "Blocks ASA-CF @Blocks_RD50_V2",
"sub_path": "filament/Blocks ASA-CF @Blocks_RD50_V2.json"
},
{
"name": "Blocks ASA-CF @Blocks_RF50",
"sub_path": "filament/Blocks ASA-CF @Blocks_RF50.json"
},
{
"name": "Blocks PA @Blocks_RD50_V2",
"sub_path": "filament/Blocks PA @Blocks_RD50_V2.json"
},
{
"name": "Blocks PA @Blocks_RF50",
"sub_path": "filament/Blocks PA @Blocks_RF50.json"
},
{
"name": "Blocks PA-CF @Blocks_RD50_V2",
"sub_path": "filament/Blocks PA-CF @Blocks_RD50_V2.json"
},
{
"name": "Blocks PA-CF @Blocks_RF50",
"sub_path": "filament/Blocks PA-CF @Blocks_RF50.json"
},
{
"name": "Blocks PC @Blocks_RD50_V2",
"sub_path": "filament/Blocks PC @Blocks_RD50_V2.json"
},
{
"name": "Blocks PC @Blocks_RF50",
"sub_path": "filament/Blocks PC @Blocks_RF50.json"
},
{
"name": "Blocks PETG @Blocks_Pro_S100",
"sub_path": "filament/Blocks PETG @Blocks_Pro_S100.json"
},
{
"name": "Blocks PETG @Blocks_RD50_V2",
"sub_path": "filament/Blocks PETG @Blocks_RD50_V2.json"
},
{
"name": "Blocks PETG @Blocks_RF50",
"sub_path": "filament/Blocks PETG @Blocks_RF50.json"
},
{
"name": "Blocks PLA @Blocks_Pro_S100",
"sub_path": "filament/Blocks PLA @Blocks_Pro_S100.json"
},
{
"name": "Blocks PLA @Blocks_RD50_V2",
"sub_path": "filament/Blocks PLA @Blocks_RD50_V2.json"
},
{
"name": "Blocks PLA @Blocks_RF50",
"sub_path": "filament/Blocks PLA @Blocks_RF50.json"
},
{
"name": "Blocks PLA-CF @Blocks_RD50_V2",
"sub_path": "filament/Blocks PLA-CF @Blocks_RD50_V2.json"
},
{
"name": "Blocks PLA-CF @Blocks_RF50",
"sub_path": "filament/Blocks PLA-CF @Blocks_RF50.json"
},
{
"name": "Blocks PVA @Blocks_RD50_V2",
"sub_path": "filament/Blocks PVA @Blocks_RD50_V2.json"
},
{
"name": "Blocks PVA @Blocks_RF50",
"sub_path": "filament/Blocks PVA @Blocks_RF50.json"
},
{
"name": "Blocks TPU @Blocks_Pro_S100",
"sub_path": "filament/Blocks TPU @Blocks_Pro_S100.json"
},
{
"name": "Blocks TPU @Blocks_RD50_V2",
"sub_path": "filament/Blocks TPU @Blocks_RD50_V2.json"
},
{
"name": "Blocks TPU @Blocks_RF50",
"sub_path": "filament/Blocks TPU @Blocks_RF50.json"
} }
], ],
"machine_list": [ "machine_list": [
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks ABS @Blocks_RD50_V2",
"inherits": "Blocks ABS @base",
"from": "system",
"setting_id": "qhQ0qQDGJgsueCAF",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic ABS;Generic ABS @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks ABS @Blocks_RF50",
"inherits": "Blocks ABS @base",
"from": "system",
"setting_id": "bGYMFFdKiROKuSiY",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks ASA @Blocks_RD50_V2",
"inherits": "Blocks ASA @base",
"from": "system",
"setting_id": "HW7xDXThvpVFbMq5",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic ASA;Generic ASA @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks ASA @Blocks_RF50",
"inherits": "Blocks ASA @base",
"from": "system",
"setting_id": "lBW7SCsvawi4icNU",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks ASA-CF @Blocks_RD50_V2",
"inherits": "Blocks ASA-CF @base",
"from": "system",
"setting_id": "x5ksnGLGGy1PgDns",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic ASA-CF;Generic ASA-CF @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks ASA-CF @Blocks_RF50",
"inherits": "Blocks ASA-CF @base",
"from": "system",
"setting_id": "pcbd5qFiMZAvDPg1",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks PA @Blocks_RD50_V2",
"inherits": "Blocks PA @base",
"from": "system",
"setting_id": "gxD81n2jjrReLD29",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic PA;Generic PA @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PA @Blocks_RF50",
"inherits": "Blocks PA @base",
"from": "system",
"setting_id": "PzKxRMDnQUzVWRer",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,17 +0,0 @@
{
"type": "filament",
"name": "Blocks PA @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "OFidOgK4",
"instantiation": "false",
"filament_vendor": [
"Blocks"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"10"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks PA-CF @Blocks_RD50_V2",
"inherits": "Blocks PA-CF @base",
"from": "system",
"setting_id": "EtbeKx3rbhUo1TtM",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic PA-CF;Generic PA-CF @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PA-CF @Blocks_RF50",
"inherits": "Blocks PA-CF @base",
"from": "system",
"setting_id": "udI8Q4X7HaPIaPt4",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks PC @Blocks_RD50_V2",
"inherits": "Blocks PC @base",
"from": "system",
"setting_id": "HLc0shWnKwJzSFyW",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic PC;Generic PC @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PC @Blocks_RF50",
"inherits": "Blocks PC @base",
"from": "system",
"setting_id": "9a6bccZopMTeNHYu",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,17 +0,0 @@
{
"type": "filament",
"name": "Blocks PC @base",
"inherits": "fdm_filament_pc",
"from": "system",
"filament_id": "OFlGY0MN",
"instantiation": "false",
"filament_vendor": [
"Blocks"
],
"filament_flow_ratio": [
"0.94"
],
"filament_max_volumetric_speed": [
"10"
]
}
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Blocks PETG @Blocks_Pro_S100",
"inherits": "Blocks PETG @base",
"from": "system",
"setting_id": "AhMR49fcFqtrQ6hI",
"instantiation": "true",
"compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle",
"BLOCKS Pro S100 0.6 nozzle",
"BLOCKS Pro S100 0.8 nozzle",
"BLOCKS Pro S100 1.0 nozzle",
"BLOCKS Pro S100 1.2 nozzle"
],
"renamed_from": "Blocks Generic PETG;Generic PETG @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PETG @Blocks_RD50_V2",
"inherits": "Blocks PETG @base",
"from": "system",
"setting_id": "3v7ah1zVG8MERPSJ",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
]
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PETG @Blocks_RF50",
"inherits": "Blocks PETG @base",
"from": "system",
"setting_id": "S7weR19wo9meJ6Yz",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Blocks PLA @Blocks_Pro_S100",
"inherits": "Blocks PLA @base",
"from": "system",
"setting_id": "vWojuLYIfduLGFLL",
"instantiation": "true",
"compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle",
"BLOCKS Pro S100 0.6 nozzle",
"BLOCKS Pro S100 0.8 nozzle",
"BLOCKS Pro S100 1.0 nozzle",
"BLOCKS Pro S100 1.2 nozzle"
],
"renamed_from": "Blocks Generic PLA;Generic PLA @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PLA @Blocks_RD50_V2",
"inherits": "Blocks PLA @base",
"from": "system",
"setting_id": "y7y8NcXNdp17sJUs",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
]
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PLA @Blocks_RF50",
"inherits": "Blocks PLA @base",
"from": "system",
"setting_id": "jt1MJF4eZzkkscEJ",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks PLA-CF @Blocks_RD50_V2",
"inherits": "Blocks PLA-CF @base",
"from": "system",
"setting_id": "lhBtMKP1DmOB3HOI",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic PLA-CF;Generic PLA-CF @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PLA-CF @Blocks_RF50",
"inherits": "Blocks PLA-CF @base",
"from": "system",
"setting_id": "6CU83mAyhcZ4FCPI",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,23 +0,0 @@
{
"type": "filament",
"name": "Blocks PLA-CF @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OF6FfwOP",
"instantiation": "false",
"filament_vendor": [
"Blocks"
],
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_type": [
"PLA-CF"
],
"slow_down_layer_time": [
"7"
]
}
@@ -1,14 +0,0 @@
{
"type": "filament",
"name": "Blocks PVA @Blocks_RD50_V2",
"inherits": "Blocks PVA @base",
"from": "system",
"setting_id": "hREDqwKF6qyKkakp",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
],
"renamed_from": "Blocks Generic PVA;Generic PVA @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks PVA @Blocks_RF50",
"inherits": "Blocks PVA @base",
"from": "system",
"setting_id": "q6pKqHY7Iz4OZaAC",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,17 +0,0 @@
{
"type": "filament",
"name": "Blocks PVA @base",
"inherits": "fdm_filament_pva",
"from": "system",
"filament_id": "OFqcNuE1",
"instantiation": "false",
"filament_vendor": [
"Blocks"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
]
}
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Blocks TPU @Blocks_Pro_S100",
"inherits": "Blocks TPU @base",
"from": "system",
"setting_id": "6Rkz2je91JRTRoTi",
"instantiation": "true",
"compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle",
"BLOCKS Pro S100 0.6 nozzle",
"BLOCKS Pro S100 0.8 nozzle",
"BLOCKS Pro S100 1.0 nozzle",
"BLOCKS Pro S100 1.2 nozzle"
],
"renamed_from": "Blocks Generic TPU;Generic TPU @Blocks"
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks TPU @Blocks_RD50_V2",
"inherits": "Blocks TPU @base",
"from": "system",
"setting_id": "mkCqRQTtXldzoEUg",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle"
]
}
@@ -1,13 +0,0 @@
{
"type": "filament",
"name": "Blocks TPU @Blocks_RF50",
"inherits": "Blocks TPU @base",
"from": "system",
"setting_id": "bCCvu5Ow1JkwIrRR",
"instantiation": "true",
"compatible_printers": [
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks ABS @base", "name": "Generic ABS @Blocks",
"inherits": "fdm_filament_abs", "inherits": "fdm_filament_abs",
"renamed_from": "Blocks Generic ABS",
"from": "system", "from": "system",
"filament_id": "OFBBhiX8", "setting_id": "TL1Q1kA4t36GGObG",
"instantiation": "false", "filament_id": "OFY9muEs",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_flow_ratio": [ "filament_flow_ratio": [
"0.95" "0.95"
], ],
@@ -82,5 +81,13 @@
], ],
"during_print_exhaust_fan_speed": [ "during_print_exhaust_fan_speed": [
"100" "100"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks ASA @base", "name": "Generic ASA @Blocks",
"inherits": "fdm_filament_asa", "inherits": "fdm_filament_asa",
"renamed_from": "Blocks Generic ASA",
"from": "system", "from": "system",
"filament_id": "OFTz2YXa", "setting_id": "xP7cB4RHgbm4cYDD",
"instantiation": "false", "filament_id": "OFLPAxz3",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_flow_ratio": [ "filament_flow_ratio": [
"0.95" "0.95"
], ],
@@ -82,5 +81,13 @@
], ],
"during_print_exhaust_fan_speed": [ "during_print_exhaust_fan_speed": [
"100" "100"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks ASA-CF @base", "name": "Generic ASA-CF @Blocks",
"inherits": "fdm_filament_asa", "inherits": "fdm_filament_asa",
"renamed_from": "Blocks Generic ASA-CF",
"from": "system", "from": "system",
"filament_id": "OF8b9I7o", "setting_id": "ju4ue7yJoz3ujny6",
"instantiation": "false", "filament_id": "OF53eLVD",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_type": [ "filament_type": [
"ASA-CF" "ASA-CF"
], ],
@@ -85,5 +84,13 @@
], ],
"during_print_exhaust_fan_speed": [ "during_print_exhaust_fan_speed": [
"100" "100"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -0,0 +1,24 @@
{
"type": "filament",
"name": "Generic PA @Blocks",
"inherits": "fdm_filament_pa",
"renamed_from": "Blocks Generic PA",
"from": "system",
"setting_id": "hL3p8gAeciwDkjNK",
"filament_id": "OFg8ndtj",
"instantiation": "true",
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"10"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks PA-CF @base", "name": "Generic PA-CF @Blocks",
"inherits": "fdm_filament_pa", "inherits": "fdm_filament_pa",
"renamed_from": "Blocks Generic PA-CF",
"from": "system", "from": "system",
"filament_id": "OFdWrXpL", "setting_id": "T6SO0WRdnG6wcyG8",
"instantiation": "false", "filament_id": "OFQLcbps",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_type": [ "filament_type": [
"PA-CF" "PA-CF"
], ],
@@ -88,5 +87,13 @@
], ],
"during_print_exhaust_fan_speed": [ "during_print_exhaust_fan_speed": [
"80" "80"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -0,0 +1,24 @@
{
"type": "filament",
"name": "Generic PC @Blocks",
"inherits": "fdm_filament_pc",
"renamed_from": "Blocks Generic PC",
"from": "system",
"setting_id": "Xhs8PjtmwwVj0ksE",
"filament_id": "OFLakOUI",
"instantiation": "true",
"filament_flow_ratio": [
"0.94"
],
"filament_max_volumetric_speed": [
"10"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks PETG @base", "name": "Generic PETG @Blocks",
"inherits": "fdm_filament_petg", "inherits": "fdm_filament_petg",
"renamed_from": "Blocks Generic PETG",
"from": "system", "from": "system",
"filament_id": "OF9t1Ga0", "setting_id": "NgzPlYItKHbmGgv3",
"instantiation": "false", "filament_id": "OFYPdQJh",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_flow_ratio": [ "filament_flow_ratio": [
"0.94" "0.94"
], ],
@@ -82,5 +81,18 @@
], ],
"slow_down_layer_time": [ "slow_down_layer_time": [
"5" "5"
],
"compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle",
"BLOCKS Pro S100 0.6 nozzle",
"BLOCKS Pro S100 0.8 nozzle",
"BLOCKS Pro S100 1.0 nozzle",
"BLOCKS Pro S100 1.2 nozzle",
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks PLA @base", "name": "Generic PLA @Blocks",
"inherits": "fdm_filament_pla", "inherits": "fdm_filament_pla",
"renamed_from": "Blocks Generic PLA",
"from": "system", "from": "system",
"filament_id": "OFVGAC8g", "setting_id": "kjhuttx4T8OtTNmV",
"instantiation": "false", "filament_id": "OFDSrzZ8",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_flow_ratio": [ "filament_flow_ratio": [
"0.95" "0.95"
], ],
@@ -40,5 +39,18 @@
], ],
"during_print_exhaust_fan_speed": [ "during_print_exhaust_fan_speed": [
"100" "100"
],
"compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle",
"BLOCKS Pro S100 0.6 nozzle",
"BLOCKS Pro S100 0.8 nozzle",
"BLOCKS Pro S100 1.0 nozzle",
"BLOCKS Pro S100 1.2 nozzle",
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -0,0 +1,30 @@
{
"type": "filament",
"name": "Generic PLA-CF @Blocks",
"inherits": "fdm_filament_pla",
"renamed_from": "Blocks Generic PLA-CF",
"from": "system",
"setting_id": "oKUqzwAWMrpiyGLf",
"filament_id": "OFWbdGsC",
"instantiation": "true",
"filament_flow_ratio": [
"0.95"
],
"filament_max_volumetric_speed": [
"20"
],
"filament_type": [
"PLA-CF"
],
"slow_down_layer_time": [
"7"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -0,0 +1,24 @@
{
"type": "filament",
"name": "Generic PVA @Blocks",
"inherits": "fdm_filament_pva",
"renamed_from": "Blocks Generic PVA",
"from": "system",
"setting_id": "tNw3oe7VovLkgUbB",
"filament_id": "OFDvXujf",
"instantiation": "true",
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"20"
],
"compatible_printers": [
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
]
}
@@ -1,13 +1,12 @@
{ {
"type": "filament", "type": "filament",
"name": "Blocks TPU @base", "name": "Generic TPU @Blocks",
"inherits": "fdm_filament_tpu", "inherits": "fdm_filament_tpu",
"renamed_from": "Blocks Generic TPU",
"from": "system", "from": "system",
"filament_id": "OFYnedOZ", "setting_id": "6iVYOCZo8ugs4JA0",
"instantiation": "false", "filament_id": "OFgbpcy9",
"filament_vendor": [ "instantiation": "true",
"Blocks"
],
"filament_max_volumetric_speed": [ "filament_max_volumetric_speed": [
"4" "4"
], ],
@@ -55,5 +54,18 @@
], ],
"during_print_exhaust_fan_speed": [ "during_print_exhaust_fan_speed": [
"80" "80"
],
"compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle",
"BLOCKS Pro S100 0.6 nozzle",
"BLOCKS Pro S100 0.8 nozzle",
"BLOCKS Pro S100 1.0 nozzle",
"BLOCKS Pro S100 1.2 nozzle",
"BLOCKS RD50 V2 0.4 nozzle",
"BLOCKS RD50 V2 0.6 nozzle",
"BLOCKS RD50 V2 0.8 nozzle",
"BLOCKS RF50 0.4 nozzle",
"BLOCKS RF50 0.6 nozzle",
"BLOCKS RF50 0.8 nozzle"
] ]
} }
@@ -6,7 +6,7 @@
"setting_id": "G7HQgaspHXduDM8O", "setting_id": "G7HQgaspHXduDM8O",
"instantiation": "true", "instantiation": "true",
"printer_model": "BLOCKS Pro S100", "printer_model": "BLOCKS Pro S100",
"default_print_profile": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100", "default_print_profile": "0.20mm Standard 0.4 nozzle @Blocks",
"max_layer_height": [ "max_layer_height": [
"0.30" "0.30"
], ],
@@ -25,8 +25,5 @@
"printable_height": "900", "printable_height": "900",
"upward_compatible_machine": [ "upward_compatible_machine": [
"BLOCKS Pro S100" "BLOCKS Pro S100"
],
"default_filament_profile": [
"Blocks PLA @Blocks_Pro_S100"
] ]
} }
@@ -6,7 +6,7 @@
"setting_id": "XkWdS210oUMQN17N", "setting_id": "XkWdS210oUMQN17N",
"instantiation": "true", "instantiation": "true",
"printer_model": "BLOCKS Pro S100", "printer_model": "BLOCKS Pro S100",
"default_print_profile": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100", "default_print_profile": "0.30mm Standard 0.6 nozzle @Blocks",
"max_layer_height": [ "max_layer_height": [
"0.50" "0.50"
], ],
@@ -26,8 +26,5 @@
"upward_compatible_machine": [ "upward_compatible_machine": [
"BLOCKS Pro S100" "BLOCKS Pro S100"
], ],
"printer_variant": "0.6", "printer_variant": "0.6"
"default_filament_profile": [
"Blocks PLA @Blocks_Pro_S100"
]
} }
@@ -6,7 +6,7 @@
"setting_id": "I6PdeCS7SbvIlkZf", "setting_id": "I6PdeCS7SbvIlkZf",
"instantiation": "true", "instantiation": "true",
"printer_model": "BLOCKS Pro S100", "printer_model": "BLOCKS Pro S100",
"default_print_profile": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100", "default_print_profile": "0.40mm Standard 0.8 nozzle @Blocks",
"max_layer_height": [ "max_layer_height": [
"0.56" "0.56"
], ],
@@ -26,8 +26,5 @@
"upward_compatible_machine": [ "upward_compatible_machine": [
"BLOCKS Pro S100" "BLOCKS Pro S100"
], ],
"printer_variant": "0.8", "printer_variant": "0.8"
"default_filament_profile": [
"Blocks PLA @Blocks_Pro_S100"
]
} }
@@ -6,7 +6,7 @@
"setting_id": "elLdUyy9RhUoa37o", "setting_id": "elLdUyy9RhUoa37o",
"instantiation": "true", "instantiation": "true",
"printer_model": "BLOCKS Pro S100", "printer_model": "BLOCKS Pro S100",
"default_print_profile": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100", "default_print_profile": "0.50mm Standard 1.0 nozzle @Blocks",
"max_layer_height": [ "max_layer_height": [
"0.7" "0.7"
], ],
@@ -26,8 +26,5 @@
"upward_compatible_machine": [ "upward_compatible_machine": [
"BLOCKS Pro S100" "BLOCKS Pro S100"
], ],
"printer_variant": "1.0", "printer_variant": "1.0"
"default_filament_profile": [
"Blocks PLA @Blocks_Pro_S100"
]
} }
@@ -6,7 +6,7 @@
"setting_id": "xtsGSJ4JkbHTPi44", "setting_id": "xtsGSJ4JkbHTPi44",
"instantiation": "true", "instantiation": "true",
"printer_model": "BLOCKS Pro S100", "printer_model": "BLOCKS Pro S100",
"default_print_profile": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100", "default_print_profile": "0.60mm Standard 1.2 nozzle @Blocks",
"max_layer_height": [ "max_layer_height": [
"0.8" "0.8"
], ],
@@ -26,8 +26,5 @@
"upward_compatible_machine": [ "upward_compatible_machine": [
"BLOCKS Pro S100" "BLOCKS Pro S100"
], ],
"printer_variant": "1.2", "printer_variant": "1.2"
"default_filament_profile": [
"Blocks PLA @Blocks_Pro_S100"
]
} }
@@ -8,5 +8,5 @@
"bed_model": "PRO S100 HotBed model.stl", "bed_model": "PRO S100 HotBed model.stl",
"bed_texture": "PRO S100 HotBed texture.svg", "bed_texture": "PRO S100 HotBed texture.svg",
"hotend_model": "BLOCKS PrintCore.stl", "hotend_model": "BLOCKS PrintCore.stl",
"default_materials": "Blocks PLA @Blocks_Pro_S100;Blocks PETG @Blocks_Pro_S100;Blocks TPU @Blocks_Pro_S100" "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
} }
@@ -34,9 +34,5 @@
"printable_height": "500", "printable_height": "500",
"upward_compatible_machine": [ "upward_compatible_machine": [
"BLOCKS RD50 V2" "BLOCKS RD50 V2"
],
"printer_variant": "0.4",
"default_filament_profile": [
"Blocks PLA @Blocks_RD50_V2"
] ]
} }
@@ -35,8 +35,5 @@
"deretraction_speed": [ "deretraction_speed": [
"80" "80"
], ],
"printer_variant": "0.6", "printer_variant": "0.6"
"default_filament_profile": [
"Blocks PLA @Blocks_RD50_V2"
]
} }
@@ -35,8 +35,5 @@
"deretraction_speed": [ "deretraction_speed": [
"80" "80"
], ],
"printer_variant": "0.8", "printer_variant": "0.8"
"default_filament_profile": [
"Blocks PLA @Blocks_RD50_V2"
]
} }
@@ -8,5 +8,5 @@
"bed_model": "RD50 V2 HotBed model.stl", "bed_model": "RD50 V2 HotBed model.stl",
"bed_texture": "RD50 V2 HotBed texture.svg", "bed_texture": "RD50 V2 HotBed texture.svg",
"hotend_model": "BLOCKS PrintCore.stl", "hotend_model": "BLOCKS PrintCore.stl",
"default_materials": "Blocks PLA @Blocks_RD50_V2;Blocks PETG @Blocks_RD50_V2;Blocks TPU @Blocks_RD50_V2" "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
} }
@@ -51,7 +51,7 @@
"12" "12"
], ],
"retraction_length": [ "retraction_length": [
"1.2" "1"
], ],
"retraction_speed": [ "retraction_speed": [
"60" "60"
@@ -79,10 +79,5 @@
], ],
"retract_before_wipe": [ "retract_before_wipe": [
"0" "0"
], ]
"default_filament_profile": [
"Blocks PLA @Blocks_RF50"
],
"support_multi_bed_types": "1",
"default_bed_type": "Textured PEI Plate"
} }
@@ -51,7 +51,7 @@
"12" "12"
], ],
"retraction_length": [ "retraction_length": [
"1.2" "1"
], ],
"retraction_speed": [ "retraction_speed": [
"60" "60"
@@ -75,8 +75,8 @@
"BLOCKS RF50" "BLOCKS RF50"
], ],
"machine_start_gcode": [ "machine_start_gcode": [
"PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer]\n", "PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer]",
"SET_PRESSURE_ADVANCE ADVANCE=0.046\n" "SET_PRESSURE_ADVANCE ADVANCE=0.046"
], ],
"printer_variant": "0.6", "printer_variant": "0.6",
"wipe_distance": [ "wipe_distance": [
@@ -84,10 +84,5 @@
], ],
"retract_before_wipe": [ "retract_before_wipe": [
"0" "0"
], ]
"default_filament_profile": [
"Blocks PLA @Blocks_RF50"
],
"support_multi_bed_types": "1",
"default_bed_type": "Textured PEI Plate"
} }
@@ -51,7 +51,7 @@
"12" "12"
], ],
"retraction_length": [ "retraction_length": [
"1.2" "1"
], ],
"retraction_speed": [ "retraction_speed": [
"60" "60"
@@ -80,10 +80,5 @@
], ],
"retract_before_wipe": [ "retract_before_wipe": [
"0" "0"
], ]
"default_filament_profile": [
"Blocks PLA @Blocks_RF50"
],
"support_multi_bed_types": "1",
"default_bed_type": "Textured PEI Plate"
} }
@@ -8,6 +8,5 @@
"bed_model": "RF50 HotBed model.stl", "bed_model": "RF50 HotBed model.stl",
"bed_texture": "RF50 HotBed texture.svg", "bed_texture": "RF50 HotBed texture.svg",
"hotend_model": "BLOCKS PrintCore.stl", "hotend_model": "BLOCKS PrintCore.stl",
"default_materials": "Blocks PLA @Blocks_RF50;Blocks PETG @Blocks_RF50;Blocks TPU @Blocks_RF50", "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
"not_support_bed_type": "Smooth Cool Plate;Engineering Plate;Textured Cool Plate;Cool Plate (SuperTack)"
} }
@@ -123,6 +123,9 @@
"wipe": [ "wipe": [
"1" "1"
], ],
"default_filament_profile": [
"Generic PLA @Blocks"
],
"bed_exclude_area": [ "bed_exclude_area": [
"0x0" "0x0"
], ],
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100", "name": "0.20mm Standard 0.4 nozzle @Blocks",
"inherits": "fdm_process_blocks_common", "inherits": "fdm_process_blocks_common",
"from": "system", "from": "system",
"setting_id": "QSEguMMChNFZsK5H", "setting_id": "47aDtVL6E5DVr7Mt",
"instantiation": "true", "instantiation": "true",
"layer_height": "0.2", "layer_height": "0.2",
"bottom_shell_layers": "4", "bottom_shell_layers": "4",
"top_shell_layers": "5", "top_shell_layers": "5",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle" "BLOCKS Pro S100 0.4 nozzle"
], ]
"renamed_from": "0.20mm Standard 0.4 nozzle @Blocks"
} }
@@ -25,7 +25,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -61,7 +61,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.24mm Draft 0.4 nozzle @Blocks_Pro_S100", "name": "0.24mm Draft 0.4 nozzle @Blocks",
"inherits": "fdm_process_blocks_common", "inherits": "fdm_process_blocks_common",
"from": "system", "from": "system",
"setting_id": "uALfEFHGmup6vBYI", "setting_id": "ETADjxV6ViJQdnHA",
"instantiation": "true", "instantiation": "true",
"layer_height": "0.24", "layer_height": "0.24",
"bottom_shell_layers": "4", "bottom_shell_layers": "4",
"top_shell_layers": "5", "top_shell_layers": "5",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle" "BLOCKS Pro S100 0.4 nozzle"
], ]
"renamed_from": "0.24mm Draft 0.4 nozzle @Blocks"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -22,7 +22,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100", "name": "0.30mm Extra Draft 0.4 nozzle @Blocks",
"inherits": "fdm_process_blocks_common", "inherits": "fdm_process_blocks_common",
"from": "system", "from": "system",
"setting_id": "HYKF5l2OGvpugSQy", "setting_id": "UbuICsmppKDsaaZ4",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "3", "bottom_shell_layers": "3",
"top_shell_layers": "4", "top_shell_layers": "4",
"layer_height": "0.30", "layer_height": "0.30",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.4 nozzle" "BLOCKS Pro S100 0.4 nozzle"
], ]
"renamed_from": "0.30mm Extra Draft 0.4 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100", "name": "0.30mm Optimal 0.8 nozzle @Blocks",
"inherits": "fdm_process_common 0.8 nozzle", "inherits": "fdm_process_common 0.8 nozzle",
"from": "system", "from": "system",
"setting_id": "OUfZvizM5MGnvHfp", "setting_id": "YqkYzp5zdH4R5upm",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "3", "bottom_shell_layers": "3",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.3", "layer_height": "0.3",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.8 nozzle" "BLOCKS Pro S100 0.8 nozzle"
], ]
"renamed_from": "0.30mm Optimal 0.8 nozzle @Blocks"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100", "name": "0.30mm Optimal 1.0 nozzle @Blocks",
"inherits": "fdm_process_common 1.0 nozzle", "inherits": "fdm_process_common 1.0 nozzle",
"from": "system", "from": "system",
"setting_id": "HGG9WxKVr89qNFDx", "setting_id": "8pBawPScHkyQu0SW",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "4", "bottom_shell_layers": "4",
"top_shell_layers": "4", "top_shell_layers": "4",
"layer_height": "0.30", "layer_height": "0.30",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.0 nozzle" "BLOCKS Pro S100 1.0 nozzle"
], ]
"renamed_from": "0.30mm Optimal 1.0 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100", "name": "0.30mm Standard 0.6 nozzle @Blocks",
"inherits": "fdm_process_common 0.6 nozzle", "inherits": "fdm_process_common 0.6 nozzle",
"from": "system", "from": "system",
"setting_id": "gO2I1YjBl4nf8yzr", "setting_id": "EPI3PAVK9LpJOZWO",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "3", "bottom_shell_layers": "3",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.30", "layer_height": "0.30",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.6 nozzle" "BLOCKS Pro S100 0.6 nozzle"
], ]
"renamed_from": "0.30mm Standard 0.6 nozzle @Blocks"
} }
@@ -22,7 +22,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -22,7 +22,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.40mm Draft 0.6 nozzle @Blocks_Pro_S100", "name": "0.40mm Draft 0.6 nozzle @Blocks",
"inherits": "fdm_process_common 0.6 nozzle", "inherits": "fdm_process_common 0.6 nozzle",
"from": "system", "from": "system",
"setting_id": "OjsLUl1heqv1cevs", "setting_id": "CShVKoGspbMJNPw8",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "2", "top_shell_layers": "2",
"layer_height": "0.40", "layer_height": "0.40",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.6 nozzle" "BLOCKS Pro S100 0.6 nozzle"
], ]
"renamed_from": "0.40mm Draft 0.6 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100", "name": "0.40mm Standard 0.8 nozzle @Blocks",
"inherits": "fdm_process_common 0.8 nozzle", "inherits": "fdm_process_common 0.8 nozzle",
"from": "system", "from": "system",
"setting_id": "laOTioBGySeudJpl", "setting_id": "TSRjmfWaatY7oLJB",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "3", "bottom_shell_layers": "3",
"top_shell_layers": "4", "top_shell_layers": "4",
"layer_height": "0.40", "layer_height": "0.40",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.8 nozzle" "BLOCKS Pro S100 0.8 nozzle"
], ]
"renamed_from": "0.40mm Standard 0.8 nozzle @Blocks"
} }
@@ -22,7 +22,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.50mm Draft 0.8 nozzle @Blocks_Pro_S100", "name": "0.50mm Draft 0.8 nozzle @Blocks",
"inherits": "fdm_process_common 0.8 nozzle", "inherits": "fdm_process_common 0.8 nozzle",
"from": "system", "from": "system",
"setting_id": "oAhgUZdADR7kP87e", "setting_id": "vOtZHrDS88Shmf2m",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "3", "bottom_shell_layers": "3",
"top_shell_layers": "4", "top_shell_layers": "4",
"layer_height": "0.50", "layer_height": "0.50",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 0.8 nozzle" "BLOCKS Pro S100 0.8 nozzle"
], ]
"renamed_from": "0.50mm Draft 0.8 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100", "name": "0.50mm Optimal 1.2 nozzle @Blocks",
"inherits": "fdm_process_common 1.2 nozzle", "inherits": "fdm_process_common 1.2 nozzle",
"from": "system", "from": "system",
"setting_id": "0eqNgX26jemsBfV5", "setting_id": "BKrEAKqDYzdH43wc",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.50", "layer_height": "0.50",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.2 nozzle" "BLOCKS Pro S100 1.2 nozzle"
], ]
"renamed_from": "0.50mm Optimal 1.2 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100", "name": "0.50mm Standard 1.0 nozzle @Blocks",
"inherits": "fdm_process_common 1.0 nozzle", "inherits": "fdm_process_common 1.0 nozzle",
"from": "system", "from": "system",
"setting_id": "z1qCW1cEMc4QvBbV", "setting_id": "D40iksDm7mFjhSKn",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "3", "bottom_shell_layers": "3",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.50", "layer_height": "0.50",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.0 nozzle" "BLOCKS Pro S100 1.0 nozzle"
], ]
"renamed_from": "0.50mm Standard 1.0 nozzle @Blocks"
} }
@@ -21,7 +21,7 @@
"top_solid_infill_flow_ratio": "0.97", "top_solid_infill_flow_ratio": "0.97",
"bottom_solid_infill_flow_ratio": "1.08", "bottom_solid_infill_flow_ratio": "1.08",
"seam_position": "aligned", "seam_position": "aligned",
"sparse_infill_pattern": "grid", "sparse_infill_patter": "grid",
"initial_layer_speed": "60", "initial_layer_speed": "60",
"initial_layer_infill_speed": "80", "initial_layer_infill_speed": "80",
"initial_travel_speed": "100%", "initial_travel_speed": "100%",
@@ -57,7 +57,5 @@
"accel_to_decel_enable": "1", "accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%", "accel_to_decel_factor": "50%",
"elefant_foot_compensation": "0.25", "elefant_foot_compensation": "0.25",
"elefant_foot_compensation_layers": "1", "elefant_foot_compensation_layers": "1"
"skirt_loops": "2",
"skirt_type": "perobject"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.60mm Draft 1.0 nozzle @Blocks_Pro_S100", "name": "0.60mm Draft 1.0 nozzle @Blocks",
"inherits": "fdm_process_common 1.0 nozzle", "inherits": "fdm_process_common 1.0 nozzle",
"from": "system", "from": "system",
"setting_id": "gTTgtfG8qb9My3hH", "setting_id": "UJUe8XCBzZf8NyCL",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.60", "layer_height": "0.60",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.0 nozzle" "BLOCKS Pro S100 1.0 nozzle"
], ]
"renamed_from": "0.60mm Draft 1.0 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100", "name": "0.60mm Standard 1.2 nozzle @Blocks",
"inherits": "fdm_process_common 1.2 nozzle", "inherits": "fdm_process_common 1.2 nozzle",
"from": "system", "from": "system",
"setting_id": "ApcyToENCIANrI71", "setting_id": "PSBFrTykpkytPI2Q",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.60", "layer_height": "0.60",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.2 nozzle" "BLOCKS Pro S100 1.2 nozzle"
], ]
"renamed_from": "0.60mm Standard 1.2 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.70mm Draft 1.2 nozzle @Blocks_Pro_S100", "name": "0.70mm Draft 1.2 nozzle @Blocks",
"inherits": "fdm_process_common 1.2 nozzle", "inherits": "fdm_process_common 1.2 nozzle",
"from": "system", "from": "system",
"setting_id": "DEv7X7zaTfxRQmjo", "setting_id": "0ZQ0USGX9SwAKr29",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.70", "layer_height": "0.70",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.2 nozzle" "BLOCKS Pro S100 1.2 nozzle"
], ]
"renamed_from": "0.70mm Draft 1.2 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100", "name": "0.70mm Extra Draft 1.0 nozzle @Blocks",
"inherits": "fdm_process_common 1.0 nozzle", "inherits": "fdm_process_common 1.0 nozzle",
"from": "system", "from": "system",
"setting_id": "nUW7N9dJmTyQT4AG", "setting_id": "69PFmjOVFBOIp3Qg",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "3", "top_shell_layers": "3",
"layer_height": "0.70", "layer_height": "0.70",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.0 nozzle" "BLOCKS Pro S100 1.0 nozzle"
], ]
"renamed_from": "0.70mm Extra Draft 1.0 nozzle @Blocks"
} }
@@ -1,15 +1,14 @@
{ {
"type": "process", "type": "process",
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100", "name": "0.80mm Extra Draft 1.2 nozzle @Blocks",
"inherits": "fdm_process_common 1.2 nozzle", "inherits": "fdm_process_common 1.2 nozzle",
"from": "system", "from": "system",
"setting_id": "JMy62SonRfK0cAdL", "setting_id": "iBwRI5JJewW5HJSv",
"instantiation": "true", "instantiation": "true",
"bottom_shell_layers": "2", "bottom_shell_layers": "2",
"top_shell_layers": "2", "top_shell_layers": "2",
"layer_height": "0.80", "layer_height": "0.80",
"compatible_printers": [ "compatible_printers": [
"BLOCKS Pro S100 1.2 nozzle" "BLOCKS Pro S100 1.2 nozzle"
], ]
"renamed_from": "0.80mm Extra Draft 1.2 nozzle @Blocks"
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "OrcaFilamentLibrary", "name": "OrcaFilamentLibrary",
"version": "02.04.00.13", "version": "02.04.00.12",
"force_update": "0", "force_update": "0",
"description": "Orca Filament Library", "description": "Orca Filament Library",
"filament_list": [ "filament_list": [
@@ -6,7 +6,7 @@
"filament_id": "OFvgE0Zh", "filament_id": "OFvgE0Zh",
"instantiation": "false", "instantiation": "false",
"fan_cooling_layer_time": [ "fan_cooling_layer_time": [
"81" "80"
], ],
"fan_min_speed": [ "fan_min_speed": [
"50" "50"
+1 -3
View File
@@ -575,7 +575,7 @@ function CapabilityCanRun(plugin, capability) {
} }
function IsPluginChecked(plugin) { function IsPluginChecked(plugin) {
return plugin.is_loaded; return GetStatus(plugin) === "Activated";
} }
function HasMixedCapabilityState(plugin) { function HasMixedCapabilityState(plugin) {
@@ -1347,8 +1347,6 @@ function StatusDescription(plugin) {
return "This plugin is still loading."; return "This plugin is still loading.";
case "Error": case "Error":
return "This plugin is blocked until its error is fixed."; return "This plugin is blocked until its error is fixed.";
case "RuntimeError":
return "This plugin is loaded but a capability reported an error.";
case "Inactive": case "Inactive":
default: default:
return "This plugin is inactive. Activate it to install or load it."; return "This plugin is inactive. Activate it to install or load it.";
@@ -424,11 +424,6 @@ body.pane-resizing {
font-weight: 600; font-weight: 600;
} }
.status-cell.status-runtimeerror {
color: var(--plugin-status-warn);
font-weight: 600;
}
.status-cell.status-loading { .status-cell.status-loading {
color: var(--plugin-status-warn); color: var(--plugin-status-warn);
font-weight: 600; font-weight: 600;
@@ -685,11 +680,6 @@ body.pane-resizing {
color: var(--plugin-status-danger); color: var(--plugin-status-danger);
} }
.detail-status-chip.status-runtimeerror {
background: var(--plugin-status-warn-bg);
color: var(--plugin-status-warn);
}
.detail-status-chip.status-loading { .detail-status-chip.status-loading {
background: var(--plugin-status-warn-bg); background: var(--plugin-status-warn-bg);
color: var(--plugin-status-warn); color: var(--plugin-status-warn);
@@ -331,15 +331,6 @@ modules:
sha256: deedcabe339165214a3637df4c86a507aef0d793cf8774ff68735f4737e8ddbc sha256: deedcabe339165214a3637df4c86a507aef0d793cf8774ff68735f4737e8ddbc
dest: external-packages/FFMPEG dest: external-packages/FFMPEG
# libdatachannel v0.24.5
# The Git checkout includes the submodules that are missing from the
# GitHub source archive. DataChannel.cmake consumes it as SOURCE_DIR.
- type: git
url: https://github.com/paullouisageneau/libdatachannel.git
tag: v0.24.5
commit: 443f6934d9007eb7076ab7825ba330f355fcbead
dest: external-packages/DataChannel
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Fallback archives for deps normally provided by the GNOME SDK. # Fallback archives for deps normally provided by the GNOME SDK.
# These are only used if find_package() fails to locate them. # These are only used if find_package() fails to locate them.
+50 -4
View File
@@ -2116,7 +2116,12 @@ int CLI::run(int argc, char **argv)
// One resolver for the whole run, so presets from the same vendor tree share its load. // One resolver for the whole run, so presets from the same vendor tree share its load.
std::unique_ptr<PresetBundle> system_preset_resolver; std::unique_ptr<PresetBundle> system_preset_resolver;
auto resolve_preset = [&ensure_cli_preset_bundle, &system_preset_resolver](const std::string &file, DynamicPrintConfig &config, auto ensure_system_preset_resolver = [&system_preset_resolver]() -> PresetBundle & {
if (!system_preset_resolver)
system_preset_resolver = std::make_unique<PresetBundle>();
return *system_preset_resolver;
};
auto resolve_preset = [&ensure_cli_preset_bundle, &ensure_system_preset_resolver](const std::string &file, DynamicPrintConfig &config,
std::string &config_type, const std::string &config_from, std::string &config_type, const std::string &config_from,
bool probe_type, std::string &error) { bool probe_type, std::string &error) {
const auto *inherits = config.option<ConfigOptionString>(BBL_JSON_KEY_INHERITS); const auto *inherits = config.option<ConfigOptionString>(BBL_JSON_KEY_INHERITS);
@@ -2126,9 +2131,7 @@ int CLI::run(int argc, char **argv)
PresetBundle *bundle = nullptr; PresetBundle *bundle = nullptr;
bool allow_source_manifest = false; bool allow_source_manifest = false;
if (config_from == "system") { if (config_from == "system") {
if (!system_preset_resolver) bundle = &ensure_system_preset_resolver();
system_preset_resolver = std::make_unique<PresetBundle>();
bundle = system_preset_resolver.get();
allow_source_manifest = true; allow_source_manifest = true;
} else { } else {
bundle = ensure_cli_preset_bundle(error); bundle = ensure_cli_preset_bundle(error);
@@ -3120,6 +3123,49 @@ int CLI::run(int argc, char **argv)
return 0; return 0;
}; };
// A project saved before a printer or process option existed has no value for it. The GUI takes such
// keys from the project's system preset (load_external_preset refreshes every key the project did not
// override), so fill them from there too instead of leaving them to the option default.
// The extruder variant keys describe the project's variant layout and are kept as they are, so an
// older project is not left with a variant list from one layout and ids from another.
auto fill_missing_project_keys = [this, &ensure_system_preset_resolver](const std::string &system_name, Preset::Type type) {
if (system_name.empty())
return;
static const std::set<std::string> skip_keys = {
"inherits", "compatible_printers", "compatible_prints", "compatible_printers_condition", "compatible_prints_condition",
"print_settings_id", "filament_settings_id", "printer_settings_id",
"print_host", "print_host_webui", "printhost_apikey", "printhost_cafile", "printhost_user", "printhost_password", "printhost_port",
"printer_extruder_id", "printer_extruder_variant", "print_extruder_id", "print_extruder_variant", "extruder_variant_list"};
const std::vector<std::string> &options = type == Preset::TYPE_PRINTER ? Preset::printer_options() : Preset::print_options();
// Keys the legacy handler drops on load can never be in a project, so they do not count as missing.
auto dropped_on_load = [](std::string key) {
std::string value;
PrintConfigDef::handle_legacy(key, value);
return key.empty();
};
std::vector<std::string> missing;
for (const std::string &key : options)
if (m_print_config.option(key) == nullptr && skip_keys.count(key) == 0 && !dropped_on_load(key))
missing.push_back(key);
if (missing.empty())
return;
DynamicPrintConfig system_config;
std::string error;
if (!ensure_system_preset_resolver().resolve_system_preset(system_config, type, system_name, config_substitution_rule, error)) {
BOOST_LOG_TRIVIAL(warning) << boost::format("CLI: system preset '%1%' not resolved (%2%); keys missing from the project keep their defaults") % system_name % error;
return;
}
for (const std::string &key : missing)
if (const ConfigOption *opt = system_config.option(key)) {
m_print_config.set_key_value(key, opt->clone());
BOOST_LOG_TRIVIAL(info) << boost::format("CLI: %1% missing from the project, taken from '%2%': %3%") % key % system_name % opt->serialize();
}
};
if (new_printer_name.empty())
fill_missing_project_keys(current_printer_system_name, Preset::TYPE_PRINTER);
if (new_process_name.empty())
fill_missing_project_keys(current_process_system_name, Preset::TYPE_PRINT);
std::vector<std::string>& different_settings = m_print_config.option<ConfigOptionStrings>("different_settings_to_system", true)->values; std::vector<std::string>& different_settings = m_print_config.option<ConfigOptionStrings>("different_settings_to_system", true)->values;
std::vector<std::string>& inherits_group = m_print_config.option<ConfigOptionStrings>("inherits_group", true)->values; std::vector<std::string>& inherits_group = m_print_config.option<ConfigOptionStrings>("inherits_group", true)->values;
inherits_group.resize(filament_count + 2, std::string()); inherits_group.resize(filament_count + 2, std::string());
+2 -2
View File
@@ -2673,10 +2673,10 @@ void CadDocument::apply_feature(TopoDS_Shape& result, bool& have_body,
ridge = pipe.Shape(); ridge = pipe.Shape();
have_ridge = !ridge.IsNull(); have_ridge = !ridge.IsNull();
} }
} catch (const Standard_Failure&) {
have_ridge = false; // OCCT failure — on OCCT >= 8 Standard_Failure derives from std::exception, so this handler must come first
} catch (const std::exception&) { } catch (const std::exception&) {
have_ridge = false; // fall back to the bare cylinder/bore below have_ridge = false; // fall back to the bare cylinder/bore below
} catch (const Standard_Failure&) {
have_ridge = false; // OCCT failure (not a std::exception) — must be caught here too
} }
if (f.thread_internal) { if (f.thread_internal) {
-2
View File
@@ -15,8 +15,6 @@
#include <TopExp.hxx> #include <TopExp.hxx>
#include <TopTools.hxx> #include <TopTools.hxx>
#include <TopTools_IndexedMapOfShape.hxx> #include <TopTools_IndexedMapOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
#include <Poly_Triangulation.hxx> #include <Poly_Triangulation.hxx>
#include <gp_Ax2.hxx> #include <gp_Ax2.hxx>
#include <gp_Dir.hxx> #include <gp_Dir.hxx>

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