mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-28 11:21:30 +00:00
Compare commits
237
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0010e402f | ||
|
|
9106c3dcc5 | ||
|
|
7707487252 | ||
|
|
3df9c215f8 | ||
|
|
cda1588578 | ||
|
|
455c24f052 | ||
|
|
87eb8de001 | ||
|
|
220508534a | ||
|
|
5a0810365b | ||
|
|
fa98ec5afe | ||
|
|
3c1d8ac8b4 | ||
|
|
936b0bbc17 | ||
|
|
5222a37eff | ||
|
|
6da938b660 | ||
|
|
2dcdf49185 | ||
|
|
52e845a821 | ||
|
|
ffb4813510 | ||
|
|
7436f68e09 | ||
|
|
ad956591ce | ||
|
|
8da8e9bee1 | ||
|
|
0acc8608b1 | ||
|
|
a2a9b2ce94 | ||
|
|
07bee6c7a4 | ||
|
|
1615390182 | ||
|
|
cf20994b58 | ||
|
|
309bb3c6e2 | ||
|
|
79f20c3996 | ||
|
|
33179c1902 | ||
|
|
ccaafb3003 | ||
|
|
7d4d8276a2 | ||
|
|
c492436228 | ||
|
|
99a1cd1b74 | ||
|
|
4b41bf7f4f | ||
|
|
d5962052ca | ||
|
|
f1410c8cac | ||
|
|
7283a05040 | ||
|
|
c32c87863b | ||
|
|
06f7016d6a | ||
|
|
be9ae6ffbf | ||
|
|
cda25c3715 | ||
|
|
2dcdfe2d32 | ||
|
|
9e34ca536b | ||
|
|
201617a6c0 | ||
|
|
2dcbee3d76 | ||
|
|
6c353d9596 | ||
|
|
ce0c759ded | ||
|
|
9a7e925790 | ||
|
|
f27b0a1f9d | ||
|
|
cf1c164546 | ||
|
|
d9f1f8b207 | ||
|
|
a096e1ab8c | ||
|
|
bca8dd00dd | ||
|
|
8b7f8cac82 | ||
|
|
aae03257ed | ||
|
|
3fba237c9a | ||
|
|
cfb6349695 | ||
|
|
f53ad6993a | ||
|
|
91c6d1d3d5 | ||
|
|
b91f48141d | ||
|
|
e168d900f2 | ||
|
|
467e249b3d | ||
|
|
bc03e3be2f | ||
|
|
5287fd0160 | ||
|
|
c441fd2fa4 | ||
|
|
f224b8e4a6 | ||
|
|
8b479c9af3 | ||
|
|
d8299c388e | ||
|
|
771d455d12 | ||
|
|
a7ab01b815 | ||
|
|
4d85b6627e | ||
|
|
38e35dbff4 | ||
|
|
dcddb9283c | ||
|
|
ba9cf6e897 | ||
|
|
d1f2ecb903 | ||
|
|
ee2b4ccf70 | ||
|
|
753c793ea0 | ||
|
|
9c5494b19f | ||
|
|
93a119427a | ||
|
|
d264fcaef4 | ||
|
|
b4ab6dedfd | ||
|
|
ed59f93456 | ||
|
|
cf52c81dcd | ||
|
|
803a2a3239 | ||
|
|
985092bb46 | ||
|
|
cb16a2e547 | ||
|
|
2c2e91b629 | ||
|
|
c3faf903ca | ||
|
|
5f3c957597 | ||
|
|
8557285389 | ||
|
|
a9edab78a8 | ||
|
|
79dede7d59 | ||
|
|
2ac45b2f78 | ||
|
|
b4f33e71e9 | ||
|
|
8c91cab971 | ||
|
|
79077518e9 | ||
|
|
56aa348c89 | ||
|
|
ae1752fbf2 | ||
|
|
cf3f36a1c6 | ||
|
|
cca7d8adb1 | ||
|
|
396d9ff51a | ||
|
|
81540c81e0 | ||
|
|
e7ace6cc99 | ||
|
|
79c20a1fad | ||
|
|
e48f9f47d2 | ||
|
|
2f566e3779 | ||
|
|
37d1edf69a | ||
|
|
f1cf9c69b1 | ||
|
|
1df362888e | ||
|
|
4b2466b179 | ||
|
|
3adcb3e953 | ||
|
|
104dbb2140 | ||
|
|
e482cbbdd7 | ||
|
|
2a5ddd9edb | ||
|
|
c10f83cf61 | ||
|
|
8eeec6935e | ||
|
|
131a2abf99 | ||
|
|
9daecc59b4 | ||
|
|
58e000d842 | ||
|
|
af6be5858e | ||
|
|
3fc7fd99d6 | ||
|
|
3fe043651b | ||
|
|
b0b78c296c | ||
|
|
62791fabfa | ||
|
|
b0ada2dee5 | ||
|
|
8f4df1aa8c | ||
|
|
5fec9b8d19 | ||
|
|
75ed5afbac | ||
|
|
01c553bad9 | ||
|
|
a4376c77c3 | ||
|
|
c459994290 | ||
|
|
3a0fda7d18 | ||
|
|
eb8733f0f4 | ||
|
|
55acb940a8 | ||
|
|
0d691403de | ||
|
|
9b2b75a51d | ||
|
|
25da273ea0 | ||
|
|
dbcb82075f | ||
|
|
2f82cfe40f | ||
|
|
972031cf06 | ||
|
|
2a4792e762 | ||
|
|
dd15ac6146 | ||
|
|
b0469254bc | ||
|
|
2228589e16 | ||
|
|
4d8480e1a1 | ||
|
|
4320cc78d9 | ||
|
|
d9d9678a7e | ||
|
|
d55a0bfec6 | ||
|
|
3b1017df51 | ||
|
|
f5b81d2ffc | ||
|
|
eb9cfe0ecb | ||
|
|
1e8805d43d | ||
|
|
e8f089dfa4 | ||
|
|
84e929ea24 | ||
|
|
abec603e73 | ||
|
|
0ed19d4826 | ||
|
|
b747c13ef4 | ||
|
|
6a12aca495 | ||
|
|
d486db6459 | ||
|
|
fe777b8801 | ||
|
|
1b3e206f34 | ||
|
|
4df1607ec4 | ||
|
|
a0ec8bec8a | ||
|
|
36c362cbd2 | ||
|
|
84fde32616 | ||
|
|
34e349e323 | ||
|
|
44941e571f | ||
|
|
876d6e2499 | ||
|
|
858b3024ff | ||
|
|
6595557c34 | ||
|
|
c729849843 | ||
|
|
c0563be36e | ||
|
|
462f8dce30 | ||
|
|
b2a0485139 | ||
|
|
f16071f083 | ||
|
|
a1505e9bed | ||
|
|
8e48312b1f | ||
|
|
ba7fdb8ceb | ||
|
|
8be9800567 | ||
|
|
c4eabc3c52 | ||
|
|
0d0d281d0c | ||
|
|
c4bbcd322b | ||
|
|
7aea1b1235 | ||
|
|
41c16436bf | ||
|
|
2bbb229c91 | ||
|
|
c2a43157d2 | ||
|
|
738b30a743 | ||
|
|
6e6ffe13f8 | ||
|
|
eb96d127b0 | ||
|
|
60421c33f4 | ||
|
|
300c4b8afb | ||
|
|
96092ef2d3 | ||
|
|
d9002ad87d | ||
|
|
4c1ea0a602 | ||
|
|
9415812d85 | ||
|
|
d3c728557e | ||
|
|
6558c52849 | ||
|
|
a34d056de2 | ||
|
|
7ba5718be6 | ||
|
|
c1163ce7e5 | ||
|
|
da187eaaf9 | ||
|
|
de0268ce86 | ||
|
|
108923bdaa | ||
|
|
44793f7a21 | ||
|
|
7cb1805272 | ||
|
|
d5c528b7c7 | ||
|
|
742cb712d8 | ||
|
|
fd1c5d826c | ||
|
|
58be7f4861 | ||
|
|
4031b00915 | ||
|
|
07c62112b8 | ||
|
|
f23e4963bf | ||
|
|
95279f7084 | ||
|
|
1014558c91 | ||
|
|
6515062a3a | ||
|
|
8153e26b6d | ||
|
|
79fd33d49a | ||
|
|
cdb662d4b2 | ||
|
|
a27fa7b5df | ||
|
|
cdeed107c5 | ||
|
|
be92f7e78c | ||
|
|
76f9de4cfb | ||
|
|
cd6d2cbf5e | ||
|
|
deaca0189f | ||
|
|
7d54ee286d | ||
|
|
dddfc7a8ad | ||
|
|
673bfb0dee | ||
|
|
b9e8c5a38c | ||
|
|
a2a4ca20e4 | ||
|
|
12075459d2 | ||
|
|
f3770f3106 | ||
|
|
90fbf1770f | ||
|
|
bde94ab37f | ||
|
|
6d25e1777e | ||
|
|
7ce26ca8e5 | ||
|
|
367fcce634 | ||
|
|
9b3a44b339 | ||
|
|
6384191102 |
+42
-1
@@ -834,6 +834,37 @@ find_package(OpenSSL REQUIRED)
|
||||
find_package(CURL 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)
|
||||
target_link_libraries(libcurl INTERFACE CURL::libcurl)
|
||||
@@ -1114,6 +1145,7 @@ function(orcaslicer_copy_dlls target config postfix output_dlls)
|
||||
endif ()
|
||||
file(COPY ${_occt_dlls}
|
||||
${CMAKE_PREFIX_PATH}/bin/freetype.dll
|
||||
${CMAKE_PREFIX_PATH}/bin/avformat-61.dll
|
||||
${CMAKE_PREFIX_PATH}/bin/avcodec-61.dll
|
||||
${CMAKE_PREFIX_PATH}/bin/swresample-5.dll
|
||||
${CMAKE_PREFIX_PATH}/bin/swscale-8.dll
|
||||
@@ -1126,6 +1158,7 @@ function(orcaslicer_copy_dlls target config postfix output_dlls)
|
||||
${_out_dir}/WebView2Loader.dll
|
||||
|
||||
${_out_dir}/freetype.dll
|
||||
${_out_dir}/avformat-61.dll
|
||||
${_out_dir}/avcodec-61.dll
|
||||
${_out_dir}/swresample-5.dll
|
||||
${_out_dir}/swscale-8.dll
|
||||
@@ -1149,7 +1182,10 @@ function(orcaslicer_copy_sos target config postfix output_sos)
|
||||
set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
endif ()
|
||||
|
||||
file(COPY ${CMAKE_PREFIX_PATH}/lib/libavcodec.so
|
||||
file(COPY ${CMAKE_PREFIX_PATH}/lib/libavformat.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.3.100
|
||||
${CMAKE_PREFIX_PATH}/lib/libavutil.so
|
||||
@@ -1164,6 +1200,9 @@ function(orcaslicer_copy_sos target config postfix output_sos)
|
||||
DESTINATION ${_out_dir})
|
||||
|
||||
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.61
|
||||
${_out_dir}/libavcodec.so.61.3.100
|
||||
@@ -1293,6 +1332,8 @@ endif ()
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
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.3.100
|
||||
${LIBDIR_BIN}/libavutil.so.59
|
||||
|
||||
Vendored
+23
-11
@@ -164,7 +164,7 @@ if (NOT _is_multi AND NOT CMAKE_BUILD_TYPE)
|
||||
endif ()
|
||||
|
||||
function(orcaslicer_add_cmake_project projectname)
|
||||
cmake_parse_arguments(P_ARGS "FORWARD_CONFIG" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
|
||||
cmake_parse_arguments(P_ARGS "FORWARD_CONFIG" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND;SOURCE_DIR" "CMAKE_ARGS" ${ARGN})
|
||||
|
||||
# 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
|
||||
@@ -210,12 +210,18 @@ function(orcaslicer_add_cmake_project projectname)
|
||||
set(_build_j "-j${NPROC}")
|
||||
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)
|
||||
ExternalProject_Add(
|
||||
dep_${projectname}
|
||||
EXCLUDE_FROM_ALL ON
|
||||
INSTALL_DIR ${DESTDIR}
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
||||
${_source_dir_arg}
|
||||
${_gen}
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
@@ -249,12 +255,14 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
|
||||
# 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)
|
||||
# so, as much as I would like to use that, it's not happening
|
||||
ExternalProject_Add_Step(dep_${projectname} free_download_space
|
||||
DEPENDEES download # do after download
|
||||
COMMENT "Freeing Space: Removing source archive"
|
||||
WORKING_DIRECTORY ${DEP_DOWNLOAD_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -r ${projectname}
|
||||
)
|
||||
if (NOT P_ARGS_SOURCE_DIR)
|
||||
ExternalProject_Add_Step(dep_${projectname} free_download_space
|
||||
DEPENDEES download # do after download
|
||||
COMMENT "Freeing Space: Removing source archive"
|
||||
WORKING_DIRECTORY ${DEP_DOWNLOAD_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -rf ${projectname}
|
||||
)
|
||||
endif ()
|
||||
ExternalProject_Add_Step(dep_${projectname} free_build_space
|
||||
DEPENDEES install # do after install
|
||||
COMMENT "Freeing Space: Removing source and build files"
|
||||
@@ -268,6 +276,7 @@ else()
|
||||
EXCLUDE_FROM_ALL ON
|
||||
INSTALL_DIR ${DESTDIR}
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
||||
${_source_dir_arg}
|
||||
${_gen}
|
||||
CMAKE_ARGS
|
||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
@@ -396,10 +405,6 @@ include(libnoise/libnoise.cmake)
|
||||
|
||||
include(Draco/Draco.cmake)
|
||||
|
||||
include(FFMPEG/FFMPEG.cmake)
|
||||
include(Assimp/Assimp.cmake)
|
||||
|
||||
|
||||
# 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
|
||||
# a grep across the repo shows it is used for other things
|
||||
@@ -410,6 +415,12 @@ if(NOT OPENSSL_FOUND)
|
||||
set(OPENSSL_PKG dep_OpenSSL)
|
||||
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
|
||||
# so, just don't even bother
|
||||
# ...i think this is how it works? change if wrong
|
||||
@@ -483,6 +494,7 @@ set(_dep_list
|
||||
dep_wxInspector
|
||||
dep_FFMPEG
|
||||
dep_Assimp
|
||||
${DATACHANNEL_PKG}
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
|
||||
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
# 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}
|
||||
)
|
||||
Vendored
+23
-7
@@ -1,14 +1,26 @@
|
||||
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)
|
||||
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-07-17-14-28/ffmpeg-n7.0.3-31-g9b6ffd74b5-winarm64-orca-shared-7.0.zip")
|
||||
set(PREBUILD_HASH_arm64 "12f4140279f2f8469885e1b5b2e8be9d788882914c21523cacd56989f3548054")
|
||||
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 "e65916020ddb9ef84b2666dfbcbfc9b1d67f69d15b4a66db53754637bf2d498c")
|
||||
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_HASH_arm64 "da480cbb39680056de824c57ec4dc3bd577b479ebbc310ff1f9dc55cf014b4c1")
|
||||
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_HASH_x64 "85da19daf198f5548259d8aabb349db84997a3f6e6886d8d7764114add9c6dae")
|
||||
|
||||
ExternalProject_Add(dep_FFMPEG
|
||||
${_ffmpeg_depends}
|
||||
URL ${PREBUILD_URL_${DEPS_ARCH}}
|
||||
URL_HASH SHA256=${PREBUILD_HASH_${DEPS_ARCH}}
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
|
||||
@@ -21,6 +33,8 @@ if (MSVC)
|
||||
)
|
||||
|
||||
else ()
|
||||
set(_openssl_cmd --enable-openssl)
|
||||
|
||||
if (APPLE)
|
||||
set(_minos_cmd
|
||||
"--extra-cflags=-mmacosx-version-min=${DEP_OSX_TARGET}"
|
||||
@@ -52,10 +66,11 @@ else ()
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(dep_FFMPEG
|
||||
${_ffmpeg_depends}
|
||||
URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.3.tar.gz
|
||||
URL_HASH SHA256=DEEDCABE339165214A3637DF4C86A507AEF0D793CF8774FF68735F4737E8DDBC
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
|
||||
CONFIGURE_COMMAND ${_conf_cmd}
|
||||
CONFIGURE_COMMAND ${_ffmpeg_configure_command}
|
||||
${_cross_cmd}
|
||||
${_pic_cmd}
|
||||
${_arch_cmd}
|
||||
@@ -63,20 +78,21 @@ else ()
|
||||
"--prefix=${DESTDIR}"
|
||||
${_link_cmd}
|
||||
${_minos_cmd}
|
||||
${_openssl_cmd}
|
||||
--disable-doc
|
||||
--enable-small
|
||||
--disable-outdevs
|
||||
--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*
|
||||
--disable-protocols
|
||||
--enable-protocol=file,fd,pipe,rtp,udp
|
||||
--enable-protocol=file,fd,pipe,http,https,rtp,tcp,udp
|
||||
--disable-muxers
|
||||
--enable-muxer=rtp
|
||||
--disable-encoders
|
||||
--disable-decoders
|
||||
--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*
|
||||
--disable-demuxers
|
||||
--enable-demuxer=h264,mp3,mov
|
||||
--enable-demuxer=h264,mp3,mov,mpjpeg,rtsp,sdp
|
||||
--disable-zlib
|
||||
--disable-avdevice
|
||||
BUILD_IN_SOURCE ON
|
||||
|
||||
@@ -0,0 +1,240 @@
|
||||
# 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
|
||||
+155
-55
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Blocks",
|
||||
"version": "02.04.00.04",
|
||||
"version": "02.04.00.13",
|
||||
"force_update": "0",
|
||||
"description": "Blocks configurations",
|
||||
"machine_model_list": [
|
||||
@@ -43,8 +43,8 @@
|
||||
"sub_path": "process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard 0.4 nozzle @Blocks",
|
||||
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks.json"
|
||||
"name": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "0.24mm Draft 0.4 nozzle @Blocks",
|
||||
"sub_path": "process/0.24mm Draft 0.4 nozzle @Blocks.json"
|
||||
"name": "0.24mm Draft 0.4 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.24mm Draft 0.4 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks",
|
||||
"sub_path": "process/0.30mm Extra Draft 0.4 nozzle @Blocks.json"
|
||||
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_common 0.6 nozzle",
|
||||
@@ -111,8 +111,8 @@
|
||||
"sub_path": "process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Standard 0.6 nozzle @Blocks",
|
||||
"sub_path": "process/0.30mm Standard 0.6 nozzle @Blocks.json"
|
||||
"name": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.30mm Standard 0.6 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "0.40mm Draft 0.6 nozzle @Blocks",
|
||||
"sub_path": "process/0.40mm Draft 0.6 nozzle @Blocks.json"
|
||||
"name": "0.40mm Draft 0.6 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.40mm Draft 0.6 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks",
|
||||
"sub_path": "process/0.30mm Optimal 0.8 nozzle @Blocks.json"
|
||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "0.40mm Standard 0.8 nozzle @Blocks",
|
||||
"sub_path": "process/0.40mm Standard 0.8 nozzle @Blocks.json"
|
||||
"name": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.40mm Standard 0.8 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "0.50mm Draft 0.8 nozzle @Blocks",
|
||||
"sub_path": "process/0.50mm Draft 0.8 nozzle @Blocks.json"
|
||||
"name": "0.50mm Draft 0.8 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.50mm Draft 0.8 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Optimal 1.0 nozzle @Blocks",
|
||||
"sub_path": "process/0.30mm Optimal 1.0 nozzle @Blocks.json"
|
||||
"name": "0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.50mm Standard 1.0 nozzle @Blocks",
|
||||
"sub_path": "process/0.50mm Standard 1.0 nozzle @Blocks.json"
|
||||
"name": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.50mm Standard 1.0 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.60mm Draft 1.0 nozzle @Blocks",
|
||||
"sub_path": "process/0.60mm Draft 1.0 nozzle @Blocks.json"
|
||||
"name": "0.60mm Draft 1.0 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.60mm Draft 1.0 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks",
|
||||
"sub_path": "process/0.70mm Extra Draft 1.0 nozzle @Blocks.json"
|
||||
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.50mm Optimal 1.2 nozzle @Blocks",
|
||||
"sub_path": "process/0.50mm Optimal 1.2 nozzle @Blocks.json"
|
||||
"name": "0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.60mm Standard 1.2 nozzle @Blocks",
|
||||
"sub_path": "process/0.60mm Standard 1.2 nozzle @Blocks.json"
|
||||
"name": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.60mm Standard 1.2 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.70mm Draft 1.2 nozzle @Blocks",
|
||||
"sub_path": "process/0.70mm Draft 1.2 nozzle @Blocks.json"
|
||||
"name": "0.70mm Draft 1.2 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.70mm Draft 1.2 nozzle @Blocks_Pro_S100.json"
|
||||
},
|
||||
{
|
||||
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks",
|
||||
"sub_path": "process/0.80mm Extra Draft 1.2 nozzle @Blocks.json"
|
||||
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100",
|
||||
"sub_path": "process/0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [
|
||||
@@ -249,48 +249,148 @@
|
||||
"sub_path": "filament/fdm_filament_tpu.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic ABS @Blocks",
|
||||
"sub_path": "filament/Generic ABS @Blocks.json"
|
||||
"name": "Blocks ABS @base",
|
||||
"sub_path": "filament/Blocks ABS @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic ASA @Blocks",
|
||||
"sub_path": "filament/Generic ASA @Blocks.json"
|
||||
"name": "Blocks ASA @base",
|
||||
"sub_path": "filament/Blocks ASA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic ASA-CF @Blocks",
|
||||
"sub_path": "filament/Generic ASA-CF @Blocks.json"
|
||||
"name": "Blocks ASA-CF @base",
|
||||
"sub_path": "filament/Blocks ASA-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PA @Blocks",
|
||||
"sub_path": "filament/Generic PA @Blocks.json"
|
||||
"name": "Blocks PA @base",
|
||||
"sub_path": "filament/Blocks PA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PA-CF @Blocks",
|
||||
"sub_path": "filament/Generic PA-CF @Blocks.json"
|
||||
"name": "Blocks PA-CF @base",
|
||||
"sub_path": "filament/Blocks PA-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PC @Blocks",
|
||||
"sub_path": "filament/Generic PC @Blocks.json"
|
||||
"name": "Blocks PC @base",
|
||||
"sub_path": "filament/Blocks PC @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PETG @Blocks",
|
||||
"sub_path": "filament/Generic PETG @Blocks.json"
|
||||
"name": "Blocks PETG @base",
|
||||
"sub_path": "filament/Blocks PETG @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA @Blocks",
|
||||
"sub_path": "filament/Generic PLA @Blocks.json"
|
||||
"name": "Blocks PLA @base",
|
||||
"sub_path": "filament/Blocks PLA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA-CF @Blocks",
|
||||
"sub_path": "filament/Generic PLA-CF @Blocks.json"
|
||||
"name": "Blocks PLA-CF @base",
|
||||
"sub_path": "filament/Blocks PLA-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PVA @Blocks",
|
||||
"sub_path": "filament/Generic PVA @Blocks.json"
|
||||
"name": "Blocks PVA @base",
|
||||
"sub_path": "filament/Blocks PVA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic TPU @Blocks",
|
||||
"sub_path": "filament/Generic TPU @Blocks.json"
|
||||
"name": "Blocks TPU @base",
|
||||
"sub_path": "filament/Blocks TPU @base.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": [
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-13
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic ABS @Blocks",
|
||||
"name": "Blocks ABS @base",
|
||||
"inherits": "fdm_filament_abs",
|
||||
"renamed_from": "Blocks Generic ABS",
|
||||
"from": "system",
|
||||
"setting_id": "TL1Q1kA4t36GGObG",
|
||||
"filament_id": "OFY9muEs",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OFBBhiX8",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.95"
|
||||
],
|
||||
@@ -81,13 +82,5 @@
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"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,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-13
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic ASA @Blocks",
|
||||
"name": "Blocks ASA @base",
|
||||
"inherits": "fdm_filament_asa",
|
||||
"renamed_from": "Blocks Generic ASA",
|
||||
"from": "system",
|
||||
"setting_id": "xP7cB4RHgbm4cYDD",
|
||||
"filament_id": "OFLPAxz3",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OFTz2YXa",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.95"
|
||||
],
|
||||
@@ -81,13 +82,5 @@
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"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,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-13
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic ASA-CF @Blocks",
|
||||
"name": "Blocks ASA-CF @base",
|
||||
"inherits": "fdm_filament_asa",
|
||||
"renamed_from": "Blocks Generic ASA-CF",
|
||||
"from": "system",
|
||||
"setting_id": "ju4ue7yJoz3ujny6",
|
||||
"filament_id": "OF53eLVD",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OF8b9I7o",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_type": [
|
||||
"ASA-CF"
|
||||
],
|
||||
@@ -84,13 +85,5 @@
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"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,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-13
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PA-CF @Blocks",
|
||||
"name": "Blocks PA-CF @base",
|
||||
"inherits": "fdm_filament_pa",
|
||||
"renamed_from": "Blocks Generic PA-CF",
|
||||
"from": "system",
|
||||
"setting_id": "T6SO0WRdnG6wcyG8",
|
||||
"filament_id": "OFQLcbps",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OFdWrXpL",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_type": [
|
||||
"PA-CF"
|
||||
],
|
||||
@@ -87,13 +88,5 @@
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"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,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-18
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PETG @Blocks",
|
||||
"name": "Blocks PETG @base",
|
||||
"inherits": "fdm_filament_petg",
|
||||
"renamed_from": "Blocks Generic PETG",
|
||||
"from": "system",
|
||||
"setting_id": "NgzPlYItKHbmGgv3",
|
||||
"filament_id": "OFYPdQJh",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OF9t1Ga0",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.94"
|
||||
],
|
||||
@@ -81,18 +82,5 @@
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-18
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic PLA @Blocks",
|
||||
"name": "Blocks PLA @base",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"renamed_from": "Blocks Generic PLA",
|
||||
"from": "system",
|
||||
"setting_id": "kjhuttx4T8OtTNmV",
|
||||
"filament_id": "OFDSrzZ8",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OFVGAC8g",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.95"
|
||||
],
|
||||
@@ -39,18 +40,5 @@
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"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,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
+6
-18
@@ -1,12 +1,13 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic TPU @Blocks",
|
||||
"name": "Blocks TPU @base",
|
||||
"inherits": "fdm_filament_tpu",
|
||||
"renamed_from": "Blocks Generic TPU",
|
||||
"from": "system",
|
||||
"setting_id": "6iVYOCZo8ugs4JA0",
|
||||
"filament_id": "OFgbpcy9",
|
||||
"instantiation": "true",
|
||||
"filament_id": "OFYnedOZ",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Blocks"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"4"
|
||||
],
|
||||
@@ -54,18 +55,5 @@
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"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,24 +0,0 @@
|
||||
{
|
||||
"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,30 +0,0 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
"setting_id": "G7HQgaspHXduDM8O",
|
||||
"instantiation": "true",
|
||||
"printer_model": "BLOCKS Pro S100",
|
||||
"default_print_profile": "0.20mm Standard 0.4 nozzle @Blocks",
|
||||
"default_print_profile": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100",
|
||||
"max_layer_height": [
|
||||
"0.30"
|
||||
],
|
||||
@@ -25,5 +25,8 @@
|
||||
"printable_height": "900",
|
||||
"upward_compatible_machine": [
|
||||
"BLOCKS Pro S100"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Blocks PLA @Blocks_Pro_S100"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"setting_id": "XkWdS210oUMQN17N",
|
||||
"instantiation": "true",
|
||||
"printer_model": "BLOCKS Pro S100",
|
||||
"default_print_profile": "0.30mm Standard 0.6 nozzle @Blocks",
|
||||
"default_print_profile": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100",
|
||||
"max_layer_height": [
|
||||
"0.50"
|
||||
],
|
||||
@@ -26,5 +26,8 @@
|
||||
"upward_compatible_machine": [
|
||||
"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",
|
||||
"instantiation": "true",
|
||||
"printer_model": "BLOCKS Pro S100",
|
||||
"default_print_profile": "0.40mm Standard 0.8 nozzle @Blocks",
|
||||
"default_print_profile": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100",
|
||||
"max_layer_height": [
|
||||
"0.56"
|
||||
],
|
||||
@@ -26,5 +26,8 @@
|
||||
"upward_compatible_machine": [
|
||||
"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",
|
||||
"instantiation": "true",
|
||||
"printer_model": "BLOCKS Pro S100",
|
||||
"default_print_profile": "0.50mm Standard 1.0 nozzle @Blocks",
|
||||
"default_print_profile": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100",
|
||||
"max_layer_height": [
|
||||
"0.7"
|
||||
],
|
||||
@@ -26,5 +26,8 @@
|
||||
"upward_compatible_machine": [
|
||||
"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",
|
||||
"instantiation": "true",
|
||||
"printer_model": "BLOCKS Pro S100",
|
||||
"default_print_profile": "0.60mm Standard 1.2 nozzle @Blocks",
|
||||
"default_print_profile": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100",
|
||||
"max_layer_height": [
|
||||
"0.8"
|
||||
],
|
||||
@@ -26,5 +26,8 @@
|
||||
"upward_compatible_machine": [
|
||||
"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_texture": "PRO S100 HotBed texture.svg",
|
||||
"hotend_model": "BLOCKS PrintCore.stl",
|
||||
"default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
|
||||
"default_materials": "Blocks PLA @Blocks_Pro_S100;Blocks PETG @Blocks_Pro_S100;Blocks TPU @Blocks_Pro_S100"
|
||||
}
|
||||
|
||||
@@ -34,5 +34,9 @@
|
||||
"printable_height": "500",
|
||||
"upward_compatible_machine": [
|
||||
"BLOCKS RD50 V2"
|
||||
],
|
||||
"printer_variant": "0.4",
|
||||
"default_filament_profile": [
|
||||
"Blocks PLA @Blocks_RD50_V2"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -35,5 +35,8 @@
|
||||
"deretraction_speed": [
|
||||
"80"
|
||||
],
|
||||
"printer_variant": "0.6"
|
||||
"printer_variant": "0.6",
|
||||
"default_filament_profile": [
|
||||
"Blocks PLA @Blocks_RD50_V2"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -35,5 +35,8 @@
|
||||
"deretraction_speed": [
|
||||
"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_texture": "RD50 V2 HotBed texture.svg",
|
||||
"hotend_model": "BLOCKS PrintCore.stl",
|
||||
"default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
|
||||
"default_materials": "Blocks PLA @Blocks_RD50_V2;Blocks PETG @Blocks_RD50_V2;Blocks TPU @Blocks_RD50_V2"
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"12"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1"
|
||||
"1.2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"60"
|
||||
@@ -79,5 +79,10 @@
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Blocks PLA @Blocks_RF50"
|
||||
],
|
||||
"support_multi_bed_types": "1",
|
||||
"default_bed_type": "Textured PEI Plate"
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"12"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1"
|
||||
"1.2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"60"
|
||||
@@ -75,8 +75,8 @@
|
||||
"BLOCKS RF50"
|
||||
],
|
||||
"machine_start_gcode": [
|
||||
"PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer]",
|
||||
"SET_PRESSURE_ADVANCE ADVANCE=0.046"
|
||||
"PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer]\n",
|
||||
"SET_PRESSURE_ADVANCE ADVANCE=0.046\n"
|
||||
],
|
||||
"printer_variant": "0.6",
|
||||
"wipe_distance": [
|
||||
@@ -84,5 +84,10 @@
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Blocks PLA @Blocks_RF50"
|
||||
],
|
||||
"support_multi_bed_types": "1",
|
||||
"default_bed_type": "Textured PEI Plate"
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"12"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1"
|
||||
"1.2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"60"
|
||||
@@ -80,5 +80,10 @@
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Blocks PLA @Blocks_RF50"
|
||||
],
|
||||
"support_multi_bed_types": "1",
|
||||
"default_bed_type": "Textured PEI Plate"
|
||||
}
|
||||
|
||||
@@ -8,5 +8,6 @@
|
||||
"bed_model": "RF50 HotBed model.stl",
|
||||
"bed_texture": "RF50 HotBed texture.svg",
|
||||
"hotend_model": "BLOCKS PrintCore.stl",
|
||||
"default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
|
||||
"default_materials": "Blocks PLA @Blocks_RF50;Blocks PETG @Blocks_RF50;Blocks TPU @Blocks_RF50",
|
||||
"not_support_bed_type": "Smooth Cool Plate;Engineering Plate;Textured Cool Plate;Cool Plate (SuperTack)"
|
||||
}
|
||||
|
||||
@@ -123,9 +123,6 @@
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Blocks"
|
||||
],
|
||||
"bed_exclude_area": [
|
||||
"0x0"
|
||||
],
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"top_solid_infill_flow_ratio": "0.97",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard 0.4 nozzle @Blocks",
|
||||
"name": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_blocks_common",
|
||||
"from": "system",
|
||||
"setting_id": "47aDtVL6E5DVr7Mt",
|
||||
"setting_id": "QSEguMMChNFZsK5H",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.2",
|
||||
"bottom_shell_layers": "4",
|
||||
"top_shell_layers": "5",
|
||||
"compatible_printers": [
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -61,5 +61,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.24mm Draft 0.4 nozzle @Blocks",
|
||||
"name": "0.24mm Draft 0.4 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_blocks_common",
|
||||
"from": "system",
|
||||
"setting_id": "ETADjxV6ViJQdnHA",
|
||||
"setting_id": "uALfEFHGmup6vBYI",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.24",
|
||||
"bottom_shell_layers": "4",
|
||||
"top_shell_layers": "5",
|
||||
"compatible_printers": [
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks",
|
||||
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_blocks_common",
|
||||
"from": "system",
|
||||
"setting_id": "UbuICsmppKDsaaZ4",
|
||||
"setting_id": "HYKF5l2OGvpugSQy",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "4",
|
||||
"layer_height": "0.30",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 0.4 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.30mm Extra Draft 0.4 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks",
|
||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 0.8 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "YqkYzp5zdH4R5upm",
|
||||
"setting_id": "OUfZvizM5MGnvHfp",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.3",
|
||||
"compatible_printers": [
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.30mm Optimal 1.0 nozzle @Blocks",
|
||||
"name": "0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.0 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "8pBawPScHkyQu0SW",
|
||||
"setting_id": "HGG9WxKVr89qNFDx",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "4",
|
||||
"top_shell_layers": "4",
|
||||
"layer_height": "0.30",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.0 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.30mm Optimal 1.0 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.30mm Standard 0.6 nozzle @Blocks",
|
||||
"name": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 0.6 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "EPI3PAVK9LpJOZWO",
|
||||
"setting_id": "gO2I1YjBl4nf8yzr",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.30",
|
||||
"compatible_printers": [
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.40mm Draft 0.6 nozzle @Blocks",
|
||||
"name": "0.40mm Draft 0.6 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 0.6 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "CShVKoGspbMJNPw8",
|
||||
"setting_id": "OjsLUl1heqv1cevs",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "2",
|
||||
"layer_height": "0.40",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 0.6 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.40mm Draft 0.6 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.40mm Standard 0.8 nozzle @Blocks",
|
||||
"name": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 0.8 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "TSRjmfWaatY7oLJB",
|
||||
"setting_id": "laOTioBGySeudJpl",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "4",
|
||||
"layer_height": "0.40",
|
||||
"compatible_printers": [
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.50mm Draft 0.8 nozzle @Blocks",
|
||||
"name": "0.50mm Draft 0.8 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 0.8 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "vOtZHrDS88Shmf2m",
|
||||
"setting_id": "oAhgUZdADR7kP87e",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "4",
|
||||
"layer_height": "0.50",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 0.8 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.50mm Draft 0.8 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.50mm Optimal 1.2 nozzle @Blocks",
|
||||
"name": "0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.2 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "BKrEAKqDYzdH43wc",
|
||||
"setting_id": "0eqNgX26jemsBfV5",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.50",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.2 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.50mm Optimal 1.2 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.50mm Standard 1.0 nozzle @Blocks",
|
||||
"name": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.0 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "D40iksDm7mFjhSKn",
|
||||
"setting_id": "z1qCW1cEMc4QvBbV",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.50",
|
||||
"compatible_printers": [
|
||||
"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",
|
||||
"bottom_solid_infill_flow_ratio": "1.08",
|
||||
"seam_position": "aligned",
|
||||
"sparse_infill_patter": "grid",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"initial_layer_speed": "60",
|
||||
"initial_layer_infill_speed": "80",
|
||||
"initial_travel_speed": "100%",
|
||||
@@ -57,5 +57,7 @@
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"elefant_foot_compensation": "0.25",
|
||||
"elefant_foot_compensation_layers": "1"
|
||||
"elefant_foot_compensation_layers": "1",
|
||||
"skirt_loops": "2",
|
||||
"skirt_type": "perobject"
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.60mm Draft 1.0 nozzle @Blocks",
|
||||
"name": "0.60mm Draft 1.0 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.0 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "UJUe8XCBzZf8NyCL",
|
||||
"setting_id": "gTTgtfG8qb9My3hH",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.60",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.0 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.60mm Draft 1.0 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.60mm Standard 1.2 nozzle @Blocks",
|
||||
"name": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.2 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "PSBFrTykpkytPI2Q",
|
||||
"setting_id": "ApcyToENCIANrI71",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.60",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.2 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.60mm Standard 1.2 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.70mm Draft 1.2 nozzle @Blocks",
|
||||
"name": "0.70mm Draft 1.2 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.2 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "0ZQ0USGX9SwAKr29",
|
||||
"setting_id": "DEv7X7zaTfxRQmjo",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.70",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.2 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.70mm Draft 1.2 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks",
|
||||
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.0 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "69PFmjOVFBOIp3Qg",
|
||||
"setting_id": "nUW7N9dJmTyQT4AG",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "3",
|
||||
"layer_height": "0.70",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.0 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.70mm Extra Draft 1.0 nozzle @Blocks"
|
||||
}
|
||||
+4
-3
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks",
|
||||
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100",
|
||||
"inherits": "fdm_process_common 1.2 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "iBwRI5JJewW5HJSv",
|
||||
"setting_id": "JMy62SonRfK0cAdL",
|
||||
"instantiation": "true",
|
||||
"bottom_shell_layers": "2",
|
||||
"top_shell_layers": "2",
|
||||
"layer_height": "0.80",
|
||||
"compatible_printers": [
|
||||
"BLOCKS Pro S100 1.2 nozzle"
|
||||
]
|
||||
],
|
||||
"renamed_from": "0.80mm Extra Draft 1.2 nozzle @Blocks"
|
||||
}
|
||||
@@ -575,7 +575,7 @@ function CapabilityCanRun(plugin, capability) {
|
||||
}
|
||||
|
||||
function IsPluginChecked(plugin) {
|
||||
return GetStatus(plugin) === "Activated";
|
||||
return plugin.is_loaded;
|
||||
}
|
||||
|
||||
function HasMixedCapabilityState(plugin) {
|
||||
@@ -1347,6 +1347,8 @@ function StatusDescription(plugin) {
|
||||
return "This plugin is still loading.";
|
||||
case "Error":
|
||||
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":
|
||||
default:
|
||||
return "This plugin is inactive. Activate it to install or load it.";
|
||||
|
||||
@@ -424,6 +424,11 @@ body.pane-resizing {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.status-cell.status-runtimeerror {
|
||||
color: var(--plugin-status-warn);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.status-cell.status-loading {
|
||||
color: var(--plugin-status-warn);
|
||||
font-weight: 600;
|
||||
@@ -680,6 +685,11 @@ body.pane-resizing {
|
||||
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 {
|
||||
background: var(--plugin-status-warn-bg);
|
||||
color: var(--plugin-status-warn);
|
||||
|
||||
@@ -331,6 +331,15 @@ modules:
|
||||
sha256: deedcabe339165214a3637df4c86a507aef0d793cf8774ff68735f4737e8ddbc
|
||||
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.
|
||||
# These are only used if find_package() fails to locate them.
|
||||
|
||||
+28
-23
@@ -7969,6 +7969,20 @@ double GCode::calc_max_volumetric_speed(const double layer_height, const double
|
||||
return res;
|
||||
}
|
||||
|
||||
// ORCA: Overlap at or below which the overhang fan switches on; negative when it does not depend on overlap
|
||||
// (Overhang_threshold_none cools every external perimeter).
|
||||
static float overhang_fan_overlap_threshold(int overhang_fan_threshold)
|
||||
{
|
||||
switch (overhang_fan_threshold) {
|
||||
case (int) Overhang_threshold_1_4: return 0.9f;
|
||||
case (int) Overhang_threshold_2_4: return 0.75f;
|
||||
case (int) Overhang_threshold_3_4: return 0.5f;
|
||||
case (int) Overhang_threshold_4_4: return 0.25f;
|
||||
case (int) Overhang_threshold_bridge: return 0.05f;
|
||||
default: return -1.f;
|
||||
}
|
||||
}
|
||||
|
||||
std::string GCode::_extrude(const ExtrusionPath &path, std::string description, double speed)
|
||||
{
|
||||
std::string gcode;
|
||||
@@ -8311,6 +8325,13 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
||||
|
||||
ConfigOptionPercents overhang_overlap_levels({90, 75, 50, 25, 13, 0});
|
||||
|
||||
// ORCA: Lets the path be split where the overhang fan switches, not only where the speed changes.
|
||||
// Bridges and overhang perimeters are cooled regardless of overlap.
|
||||
float fan_overlap_threshold = -1.f;
|
||||
if (FILAMENT_CONFIG(enable_overhang_bridge_fan) && m_enable_cooling_markers && path.role() != erBridgeInfill &&
|
||||
path.role() != erOverhangPerimeter)
|
||||
fan_overlap_threshold = overhang_fan_overlap_threshold(FILAMENT_CONFIG(overhang_fan_threshold));
|
||||
|
||||
if (NOZZLE_CONFIG(slowdown_for_curled_perimeters)){
|
||||
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
||||
{FloatOrPercent{100, true},
|
||||
@@ -8331,7 +8352,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
||||
FloatOrPercent{NOZZLE_CONFIG(overhang_4_4_speed).get_abs_value(ref_speed) * 100 / ref_speed, true}});
|
||||
|
||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
||||
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters));
|
||||
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters),
|
||||
fan_overlap_threshold);
|
||||
}else{
|
||||
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
||||
{FloatOrPercent{100, true},
|
||||
@@ -8350,7 +8372,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
||||
FloatOrPercent{NOZZLE_CONFIG(bridge_speed) * 100 / ref_speed, true}});
|
||||
|
||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
||||
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters));
|
||||
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters),
|
||||
fan_overlap_threshold);
|
||||
}
|
||||
variable_speed = std::any_of(new_points.begin(), new_points.end(),
|
||||
[speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > 1; }); // Ignore small speed variations (under 1mm/sec)
|
||||
@@ -8502,28 +8525,10 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
||||
if (role == erBridgeInfill || role == erOverhangPerimeter) { // ORCA: Split out bridge infill to internal and external to apply separate fan settings
|
||||
return true;
|
||||
}
|
||||
switch (overhang_fan_threshold) {
|
||||
case (int)Overhang_threshold_1_4:
|
||||
return overlap <= 0.9f;
|
||||
break;
|
||||
case (int)Overhang_threshold_2_4:
|
||||
return overlap <= 0.75f;
|
||||
break;
|
||||
case (int)Overhang_threshold_3_4:
|
||||
return overlap <= 0.5f;
|
||||
break;
|
||||
case (int)Overhang_threshold_4_4:
|
||||
return overlap <= 0.25f;
|
||||
break;
|
||||
case (int)Overhang_threshold_bridge:
|
||||
return overlap <= 0.05f;
|
||||
break;
|
||||
case (int)Overhang_threshold_none:
|
||||
if (overhang_fan_threshold == Overhang_threshold_none)
|
||||
return is_external_perimeter(role);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
const float overlap_threshold = overhang_fan_overlap_threshold(overhang_fan_threshold);
|
||||
return overlap_threshold >= 0.f && overlap <= overlap_threshold;
|
||||
};
|
||||
|
||||
std::string comment;
|
||||
|
||||
@@ -41,10 +41,12 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
||||
float flow_width,
|
||||
float max_line_length = -1.0f,
|
||||
float min_distance = -1.0f,
|
||||
// Maps an overhang distance onto the speed it will be printed at. Interior sampling
|
||||
// needs it to tell which of the points it could add would change the G-code, and is
|
||||
// skipped without it.
|
||||
const std::function<float(float)>& distance_to_speed = {})
|
||||
// Speed an overhang distance prints at. Without it, interior sampling
|
||||
// is skipped and every line over 4mm is split.
|
||||
const std::function<float(float)>& distance_to_speed = {},
|
||||
// Overlap (1 - distance / flow_width) at or below which the overhang
|
||||
// fan switches on; negative when the fan does not depend on overlap.
|
||||
float fan_overlap_threshold = -1.0f)
|
||||
{
|
||||
bool looped = input_points.front() == input_points.back();
|
||||
std::function<size_t(size_t,size_t)> get_prev_index = [](size_t idx, size_t count) {
|
||||
@@ -125,29 +127,43 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
||||
points.push_back(next_point);
|
||||
}
|
||||
|
||||
// ORCA: How an overhang distance prints, which is what the passes below compare. A segment is printed at the lower
|
||||
// of the speeds at its two ends, and with the overhang fan on if the overlap at either end turns it on. A point
|
||||
// added to a path can therefore only change the G-code where it prints at a different speed or fan state from the
|
||||
// points either side of it, and the passes below add points there and nowhere else.
|
||||
const float width_inv = 1.f / flow_width;
|
||||
// Whether an overhang distance turns the overhang fan on. The overlap test check_overhang_fan applies in GCode.cpp.
|
||||
auto fan_on = [fan_overlap_threshold, width_inv](float distance) {
|
||||
return fan_overlap_threshold >= 0.f && 1.f - distance * width_inv <= fan_overlap_threshold;
|
||||
};
|
||||
// Whether two overhang distances are interchangeable ie have the same speed (beyond a 1mm/sec threshold that gcode.cpp filters out on)
|
||||
// and the same fan state.
|
||||
auto same_speed_and_fan = [&distance_to_speed, &fan_on](float a, float b) {
|
||||
return std::abs(distance_to_speed(a) - distance_to_speed(b)) <= 1.f && fan_on(a) == fan_on(b);
|
||||
};
|
||||
// Whether the first overhang distance prints slower than the second, beyond the 1mm/sec gcode.cpp tolerance, or turns the overhang
|
||||
// fan on where the second does not. Against a supported point (overhang distance 0) it tells whether an end is
|
||||
// affected by the overhang.
|
||||
auto slower_or_cooled = [&distance_to_speed, &fan_on](float a, float b) {
|
||||
return distance_to_speed(a) < distance_to_speed(b) - 1.f || (fan_on(a) && !fan_on(b));
|
||||
};
|
||||
|
||||
// ORCA: Interior sampling
|
||||
// The passes below infer the support under a span from its endpoints alone, so an interior that is supported
|
||||
// differently from both ends is invisible to them: the outer perimeter of an overhang whose ends are caged by
|
||||
// full height walls reads as supported along its whole length. Probe the interior, keep the samples the
|
||||
// endpoint interpolation fails to predict, and bisect either side of each one, so a span that is only partly
|
||||
// unsupported gets points where its support actually changes instead of one reading spread across all of it.
|
||||
if (PREV_LAYER_BOUNDARY_OFFSET && ADD_INTERSECTIONS && min_distance > 0 && distance_to_speed) {
|
||||
// The passes below infer the support under a span from its endpoints alone, so a part that is supported
|
||||
// differently from both ends is invisible to them. The outer perimeter of an overhang whose ends are supported by
|
||||
// reads as supported along its whole length. Probe the interior, keep the samples the endpoint interpolation fails to predict,
|
||||
// and bisect either side of each one, so a span that is only partly unsupported gets points where its support actually changes
|
||||
// instead of one reading being spread across all of it.
|
||||
// Skipped where there is nothing to find: min_distance <= 0 when no overhang can slow this path down, and
|
||||
// fan_overlap_threshold < 0 when no overhang switches the fan on. It also needs distance_to_speed to tell which of
|
||||
// the points it could add would change the G-code.
|
||||
if (PREV_LAYER_BOUNDARY_OFFSET && ADD_INTERSECTIONS && distance_to_speed && (min_distance > 0 || fan_overlap_threshold >= 0.f)) {
|
||||
// Probe at least this densely before treating matching samples as evidence that a span is uniform. The
|
||||
// segmentation pass below only splits lines of 2mm or more, and every pass here drops points closer
|
||||
// together than min_spacing, so finer discovery would not produce a more precise speed transition.
|
||||
// together than min_spacing, so finer discovery would not produce a more precise transition.
|
||||
const double max_probe_spacing = std::max(2., 4. * min_spacing);
|
||||
// A backstop for that length test, which on a non-finite length would never be met.
|
||||
constexpr int max_bisection_depth = 10;
|
||||
// Whether two readings are interchangeable. A segment is printed at the lower of the speeds its ends
|
||||
// read, so a sample that agrees on speed with what is already known cannot change the G-code, whatever
|
||||
// its distance says. The distances themselves are far too coarse a stand-in for this: the speed sections
|
||||
// interpolate, so readings a small fraction of min_distance apart can still be tens of mm/s apart.
|
||||
// The tolerance matches the one GCode.cpp applies when it decides a path has a variable speed at all.
|
||||
auto same_speed = [&distance_to_speed](float a, float b) {
|
||||
return std::abs(distance_to_speed(a) - distance_to_speed(b)) <= 1.f;
|
||||
};
|
||||
// Whether the first reading is printed slower than the second, once they are known to differ.
|
||||
auto prints_slower = [&distance_to_speed](float a, float b) { return distance_to_speed(a) < distance_to_speed(b); };
|
||||
|
||||
// Part of a segment still to bisect: its positions along the segment and bisections left.
|
||||
struct Subspan { double t0, t1; int depth; };
|
||||
@@ -185,8 +201,8 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
||||
if (!interior.empty()) {
|
||||
std::sort(interior.begin(), interior.end(),
|
||||
[](const std::pair<double, float>& l, const std::pair<double, float>& r) { return l.first < r.first; });
|
||||
// Coarse probing keeps every sample it took until this pass can see which ones bracket a speed
|
||||
// transition. Matching samples cannot be discarded during discovery: one may be the last
|
||||
// Coarse probing keeps every sample it took until this pass can see which ones bracket a speed or
|
||||
// fan transition. Matching samples cannot be discarded during discovery: one may be the last
|
||||
// supported point before a narrow unsupported pocket found by a later probe.
|
||||
size_t kept = 0;
|
||||
for (size_t i = 0; i < interior.size(); ++i) {
|
||||
@@ -195,15 +211,15 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
||||
const bool at_end = i + 1 == interior.size(); // And nothing follows the last sample but the segment's end
|
||||
const float before = at_start ? curr.distance : interior[kept - 1].second;
|
||||
const float after = at_end ? next.distance : interior[i + 1].second;
|
||||
// A sample is worth a point in the path only where it prints at a different speed from the
|
||||
// readings either side of it. Differing from one of the segment's own ends is not enough on
|
||||
// its own where the sample is the faster of the two: the segmentation pass below already
|
||||
// ends the slowdown an end reads, at a distance taken from how far out that end is rather
|
||||
// than from wherever bisection happened to stop, and a point here would leave the span
|
||||
// beside the end too short for that pass to run at all. Support an end cannot account for,
|
||||
// where the interior is the slower reading, is exactly what this pass is here to find.
|
||||
const bool worth_before = !same_speed(sample, before) && (!at_start || prints_slower(sample, before));
|
||||
const bool worth_after = !same_speed(sample, after) && (!at_end || prints_slower(sample, after));
|
||||
// A sample is worth a point in the path only where it prints differently, in speed or fan state,
|
||||
// from the points either side of it. Differing from one of the segment's own ends is not enough on
|
||||
// its own where the sample is not the slower or cooled of the two: the segmentation pass below
|
||||
// already confines the slowdown and cooling at an end, at a distance taken from how far out that
|
||||
// end is rather than from wherever bisection happened to stop, and a point here would leave the
|
||||
// span beside the end too short for that pass to run at all. Support an end cannot account for,
|
||||
// where the interior is the slower or cooled of the two, is exactly what this pass is here to find.
|
||||
const bool worth_before = !same_speed_and_fan(sample, before) && (!at_start || slower_or_cooled(sample, before));
|
||||
const bool worth_after = !same_speed_and_fan(sample, after) && (!at_end || slower_or_cooled(sample, after));
|
||||
if (worth_before || worth_after)
|
||||
interior[kept++] = interior[i];
|
||||
}
|
||||
@@ -238,52 +254,60 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
||||
if ((curr.distance > -boundary_offset && curr.distance < boundary_offset + 2.0f) ||
|
||||
(next.distance > -boundary_offset && next.distance < boundary_offset + 2.0f)) {
|
||||
double line_len = (next.position - curr.position).norm();
|
||||
|
||||
// ORCA: Segment path to smaller lines by adding additional points only if the path has an overhang that
|
||||
// will trigger a slowdown and the path is also reasonably large, i.e. 2mm in length or more
|
||||
// If there is no overhang in the start/end point, dont segment it.
|
||||
// Ignore this check if the control of segmentation for overhangs is disabled (min_distance=-1)
|
||||
if ((min_distance > 0 && ((std::abs(curr.distance) > min_distance) || (std::abs(next.distance) > min_distance)) && line_len >= 2.f) ||
|
||||
(min_distance <= 0 && line_len > 4.0f)) {
|
||||
|
||||
// ORCA: A line prints as slow as its slower end and is cooled if either end is, so an overhang at one
|
||||
// end would otherwise slow down or cool the whole line. Split the line so that only the part beside
|
||||
// that end prints that way, if the line is reasonably long (2mm or more) and at least one end prints
|
||||
// slower or cooled compared with a supported point (overhang distance 0). Deciding on how the end
|
||||
// prints, rather than on its overhang distance against min_distance, also catches an end whose overhang
|
||||
// distance is exactly where the slowdown begins, such as an outline crossing at half a line width.
|
||||
// Without distance_to_speed, split every line over 4mm.
|
||||
const bool split_line = distance_to_speed ?
|
||||
line_len >= 2.f && (slower_or_cooled(curr.distance, 0.f) || slower_or_cooled(next.distance, 0.f)) :
|
||||
line_len > 4.0f;
|
||||
if (split_line) {
|
||||
// Each end's piece is that end's overhang distance plus 1.5 line widths (3 * boundary_offset) long:
|
||||
// a0 ends the piece beside curr, a1 starts the piece beside next.
|
||||
double a0 = std::clamp((curr.distance + 3 * boundary_offset) / line_len, 0.0, 1.0);
|
||||
double a1 = std::clamp(1.0f - (next.distance + 3 * boundary_offset) / line_len, 0.0, 1.0);
|
||||
double t0 = std::min(a0, a1);
|
||||
double t1 = std::max(a0, a1);
|
||||
|
||||
if (t0 < 1.0) {
|
||||
Vec p0 = curr.position + t0 * (next.position - curr.position);
|
||||
auto [p0_dist, p0_near_l, p0_x] = unscaled_prev_layer.template distance_from_lines_extra<SIGNED_DISTANCE>(
|
||||
p0.template cast<AABBScalar>());
|
||||
ExtendedPoint<L::Dim> new_p{};
|
||||
new_p.position = p0;
|
||||
new_p.distance = float(p0_dist + boundary_offset);
|
||||
// ORCA: only create a new point in the path if the new point overhang distance will be used to generate a speed change
|
||||
// or if this option is disabled (min_distance<=0)
|
||||
if( (std::abs(p0_dist) > min_distance) || (min_distance<=0)){
|
||||
// ORCA: also filter out points that are introduced to the start of the path when their distance from the start point is
|
||||
// not meaningful
|
||||
if ((p0 - curr.position).norm() > min_spacing && (next.position - p0).norm() > min_spacing) {
|
||||
new_points.push_back(new_p);
|
||||
}
|
||||
}
|
||||
// Up to two cut points, in order along the line. Each takes its own overhang distance, so every
|
||||
// piece prints by the overhang distances at its own two ends. t0 >= 1 or t1 <= 0 falls on the
|
||||
// line's own end, so there is no cut. A cut closer than min_spacing to either end of the line is
|
||||
// not meaningful and is filtered out (#6714).
|
||||
ExtendedPoint<L::Dim> cut[2]{};
|
||||
bool keep[2] = {false, false};
|
||||
for (int k = 0; k < 2; ++k) {
|
||||
const double t = k == 0 ? t0 : t1;
|
||||
if (k == 0 ? t >= 1.0 : t <= 0.0)
|
||||
continue;
|
||||
const Vec p = curr.position + t * (next.position - curr.position);
|
||||
auto [p_dist, p_near_l, p_x] = unscaled_prev_layer.template distance_from_lines_extra<SIGNED_DISTANCE>(
|
||||
p.template cast<AABBScalar>());
|
||||
cut[k].position = p;
|
||||
cut[k].distance = float(p_dist + boundary_offset);
|
||||
keep[k] = (p - curr.position).norm() > min_spacing && (next.position - p).norm() > min_spacing;
|
||||
}
|
||||
if (t1 > 0.0) {
|
||||
Vec p1 = curr.position + t1 * (next.position - curr.position);
|
||||
auto [p1_dist, p1_near_l, p1_x] = unscaled_prev_layer.template distance_from_lines_extra<SIGNED_DISTANCE>(
|
||||
p1.template cast<AABBScalar>());
|
||||
ExtendedPoint<L::Dim> new_p{};
|
||||
new_p.position = p1;
|
||||
new_p.distance = float(p1_dist + boundary_offset);
|
||||
// ORCA: only create a new point in the path if the new point overhang distance will be used to generate a speed change
|
||||
// or if this option is disabled (min_distance<=0)
|
||||
if( (std::abs(p1_dist) > min_distance) || (min_distance<=0)){
|
||||
// ORCA: filter out points that are introduced to the end of the path when their distance from the end point is
|
||||
// not meaningful
|
||||
if ((p1 - curr.position).norm() > min_spacing && (next.position - p1).norm() > min_spacing) {
|
||||
new_points.push_back(new_p);
|
||||
}
|
||||
}
|
||||
if (distance_to_speed) {
|
||||
// Only keep a cut that changes the G-code: one that prints differently from at least one of the
|
||||
// points either side of it, which are the line's ends or the other cut where that is kept. A cut
|
||||
// that prints like both would only split a move into two identical ones.
|
||||
if (keep[0])
|
||||
keep[0] = !same_speed_and_fan(cut[0].distance, curr.distance) ||
|
||||
!same_speed_and_fan(cut[0].distance, keep[1] ? cut[1].distance : next.distance);
|
||||
if (keep[1])
|
||||
keep[1] = !same_speed_and_fan(cut[1].distance, keep[0] ? cut[0].distance : curr.distance) ||
|
||||
!same_speed_and_fan(cut[1].distance, next.distance);
|
||||
// Two cuts closer together than min_spacing would leave a micro segment between them, so only the
|
||||
// first is kept.
|
||||
if (keep[0] && keep[1] && (cut[1].position - cut[0].position).norm() <= min_spacing)
|
||||
keep[1] = false;
|
||||
}
|
||||
for (int k = 0; k < 2; ++k)
|
||||
if (keep[k])
|
||||
new_points.push_back(cut[k]);
|
||||
}
|
||||
}
|
||||
new_points.push_back(next);
|
||||
@@ -423,7 +447,10 @@ public:
|
||||
const ConfigOptionFloatsOrPercents &speeds,
|
||||
float ext_perimeter_speed,
|
||||
float original_speed,
|
||||
bool slowdown_for_curled_edges)
|
||||
bool slowdown_for_curled_edges,
|
||||
// Overlap at or below which the overhang fan switches on; negative when the fan
|
||||
// does not depend on overlap.
|
||||
float fan_overlap_threshold = -1.0f)
|
||||
{
|
||||
size_t speed_sections_count = std::min(overlaps.values.size(), speeds.values.size());
|
||||
std::vector<std::pair<float, float>> speed_sections;
|
||||
@@ -463,7 +490,8 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// If a meaningful (i.e. needing slowdown) overhang distance was not found, then we shouldn't split the lines
|
||||
// If no overhang distance slows this path down, -1 turns interior sampling off unless the overhang fan can switch.
|
||||
// Lines are only split where an end prints slower or cooled, so here only a fan switch splits them.
|
||||
if (!found)
|
||||
smallest_distance_with_lower_speed=-1.f;
|
||||
|
||||
@@ -487,9 +515,17 @@ public:
|
||||
return round(final_speed);
|
||||
};
|
||||
|
||||
// ORCA: The speed sections are built from ext_perimeter_speed, which can be above the speed this path prints at
|
||||
// (original_speed, e.g. held down by resonance avoidance). Every segment is capped at original_speed below, so
|
||||
// overhang distances whose speeds differ only above it print the same and must not count as a speed change when
|
||||
// the path is split.
|
||||
auto effective_speed = [&calculate_speed, original_speed](float distance) {
|
||||
return std::min(calculate_speed(distance), original_speed);
|
||||
};
|
||||
|
||||
std::vector<ExtendedPoint<3>> extended_points =
|
||||
estimate_points_properties<true, true, true, true>(path.polyline.points, prev_layer_boundaries[current_object], path.width, -1,
|
||||
smallest_distance_with_lower_speed, calculate_speed);
|
||||
smallest_distance_with_lower_speed, effective_speed, fan_overlap_threshold);
|
||||
const auto width_inv = 1.0f / path.width;
|
||||
std::vector<ProcessedPoint> processed_points;
|
||||
processed_points.reserve(extended_points.size());
|
||||
|
||||
@@ -3824,7 +3824,6 @@ unsigned int PresetBundle::sync_ams_list(std::vector<std::pair<DynamicPrintConfi
|
||||
ConfigOptionStrings *filament_color_type = project_config.option<ConfigOptionStrings>("filament_colour_type");
|
||||
ConfigOptionInts * filament_map = project_config.option<ConfigOptionInts>("filament_map");
|
||||
ConfigOptionInts * filament_volume_map = project_config.option<ConfigOptionInts>("filament_volume_map");
|
||||
|
||||
// Snapshot and temporarily strip mixed filament slots so AMS sync operates on physical
|
||||
// filaments only. A mixed slot is virtual and has no tray to sync against; leaving it in
|
||||
// would let AMS mapping overwrite it and would break the physical-first slot ordering the
|
||||
|
||||
@@ -34,6 +34,10 @@ static const char* Segments_Vertex_Shader =
|
||||
// ORCA: 0 during the shadow caster pass - the bias below shifts eye_position but not
|
||||
// world_position, so the caster would write a depth the receiver never looks up.
|
||||
"uniform float bias_scale;\n"
|
||||
// draw the instances last to first, top layers before the ones they hide, so that early depth
|
||||
// rejection discards most of the hidden fragments; set when the camera looks down on the print
|
||||
"uniform int reverse_order;\n"
|
||||
"uniform int instance_count;\n"
|
||||
"in int vertex_id;\n"
|
||||
"out vec3 color;\n"
|
||||
"// ORCA: realistic view - the light the shadow map is able to block, kept apart from the\n"
|
||||
@@ -59,7 +63,8 @@ static const char* Segments_Vertex_Shader =
|
||||
" return top_diffuse + front_diffuse + top_specular;\n"
|
||||
"}\n"
|
||||
"void main() {\n"
|
||||
" int id_a = int(texelFetch(segment_index_tex, gl_InstanceID).r);\n"
|
||||
" int instance = (reverse_order != 0) ? instance_count - 1 - gl_InstanceID : gl_InstanceID;\n"
|
||||
" int id_a = int(texelFetch(segment_index_tex, instance).r);\n"
|
||||
" int id_b = id_a + 1;\n"
|
||||
" vec3 pos_a = texelFetch(position_tex, id_a).xyz;\n"
|
||||
" vec3 pos_b = texelFetch(position_tex, id_b).xyz;\n"
|
||||
|
||||
@@ -763,6 +763,8 @@ void ViewerImpl::init(const std::string& opengl_context_version)
|
||||
m_uni_segments_height_width_angle_tex_id = glGetUniformLocation(m_segments_shader_id, "height_width_angle_tex");
|
||||
m_uni_segments_colors_tex_id = glGetUniformLocation(m_segments_shader_id, "color_tex");
|
||||
m_uni_segments_segment_index_tex_id = glGetUniformLocation(m_segments_shader_id, "segment_index_tex");
|
||||
m_uni_segments_reverse_order_id = glGetUniformLocation(m_segments_shader_id, "reverse_order");
|
||||
m_uni_segments_instance_count_id = glGetUniformLocation(m_segments_shader_id, "instance_count");
|
||||
// ORCA: realistic view
|
||||
m_uni_segments_shadow_map_id = glGetUniformLocation(m_segments_shader_id, "shadow_map");
|
||||
m_uni_segments_shadow_light_vp_id = glGetUniformLocation(m_segments_shader_id, "shadow_light_vp");
|
||||
@@ -2090,6 +2092,15 @@ void ViewerImpl::render_segments(const Mat4x4& view_matrix, const Mat4x4& projec
|
||||
glsafe(glUniformMatrix4fv(m_uni_segments_view_matrix_id, 1, GL_FALSE, view_matrix.data()));
|
||||
glsafe(glUniformMatrix4fv(m_uni_segments_projection_matrix_id, 1, GL_FALSE, projection_matrix.data()));
|
||||
glsafe(glUniform3fv(m_uni_segments_camera_position_id, 1, camera_position.data()));
|
||||
// The segments come in print order, bottom layer first. Seen from above, that is back to front,
|
||||
// and every hidden fragment is shaded before the one that covers it. Drawing them last to first
|
||||
// lets the depth test reject the hidden ones instead. The camera looks down when the world's
|
||||
// up axis points towards it, which is the view matrix's (2, 2) entry being positive.
|
||||
const bool top_down = !m_rendering_shadow_casters && view_matrix[10] > 0.0f;
|
||||
glsafe(glUniform1i(m_uni_segments_reverse_order_id, top_down ? 1 : 0));
|
||||
#ifndef ENABLE_OPENGL_ES
|
||||
glsafe(glUniform1i(m_uni_segments_instance_count_id, static_cast<int>(m_enabled_segments_count)));
|
||||
#endif // ENABLE_OPENGL_ES
|
||||
// ORCA: realistic view. The depth pass writes the map it would otherwise read, so it shades
|
||||
// with the lookup off.
|
||||
glsafe(glUniform1i(m_uni_segments_shadow_map_id, m_shadow_map_texture_unit));
|
||||
|
||||
@@ -362,6 +362,8 @@ private:
|
||||
int m_uni_segments_height_width_angle_tex_id{ -1 };
|
||||
int m_uni_segments_colors_tex_id{ -1 };
|
||||
int m_uni_segments_segment_index_tex_id{ -1 };
|
||||
int m_uni_segments_reverse_order_id{ -1 };
|
||||
int m_uni_segments_instance_count_id{ -1 };
|
||||
int m_uni_segments_shadow_map_id{ -1 };
|
||||
int m_uni_segments_shadow_light_vp_id{ -1 };
|
||||
int m_uni_segments_shadow_intensity_id{ -1 };
|
||||
|
||||
@@ -236,6 +236,7 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/GLToolbar.hpp
|
||||
GUI/ImageDPIFrame.cpp
|
||||
GUI/ImageDPIFrame.hpp
|
||||
GUI/IMediaController.hpp
|
||||
GUI/GUI_App.cpp
|
||||
GUI/GUI_App.hpp
|
||||
GUI/GUI_AuxiliaryList.cpp
|
||||
@@ -365,6 +366,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/MediaFilePanel.h
|
||||
GUI/MediaPlayCtrl.cpp
|
||||
GUI/MediaPlayCtrl.h
|
||||
GUI/WebRtcMediaController.cpp
|
||||
GUI/WebRtcMediaController.hpp
|
||||
GUI/MeshUtils.cpp
|
||||
GUI/MeshUtils.hpp
|
||||
GUI/ModelMall.cpp
|
||||
@@ -560,6 +563,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/WebUserLoginDialog.hpp
|
||||
GUI/WebViewDialog.cpp
|
||||
GUI/WebViewDialog.hpp
|
||||
GUI/WebMediaController.hpp
|
||||
GUI/WebMediaController.cpp
|
||||
GUI/Widgets/AMSControl.cpp
|
||||
GUI/Widgets/AMSControl.hpp
|
||||
GUI/Widgets/AMSItem.cpp
|
||||
@@ -754,10 +759,15 @@ set(SLIC3R_GUI_SOURCES
|
||||
Utils/NetworkAgentFactory.cpp
|
||||
Utils/ICloudServiceAgent.hpp
|
||||
Utils/IPrinterAgent.hpp
|
||||
Utils/ICameraSignalingChannel.hpp
|
||||
Utils/OrcaCloudServiceAgent.cpp
|
||||
Utils/OrcaCloudServiceAgent.hpp
|
||||
Utils/OrcaMqttConnection.cpp
|
||||
Utils/OrcaMqttConnection.hpp
|
||||
Utils/OrcaPrinterAgent.cpp
|
||||
Utils/OrcaPrinterAgent.hpp
|
||||
Utils/OrcaCloudSignalingChannel.cpp
|
||||
Utils/OrcaCloudSignalingChannel.hpp
|
||||
Utils/QidiPrinterAgent.cpp
|
||||
Utils/QidiPrinterAgent.hpp
|
||||
Utils/SnapmakerPrinterAgent.cpp
|
||||
@@ -898,7 +908,7 @@ target_include_directories(libslic3r_gui PRIVATE Utils ${CMAKE_CURRENT_BINARY_DI
|
||||
|
||||
if (WIN32)
|
||||
target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../deps/WebView2/include)
|
||||
target_link_libraries(libslic3r_gui Advapi32)
|
||||
target_link_libraries(libslic3r_gui Advapi32 Crypt32)
|
||||
endif()
|
||||
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES})
|
||||
@@ -924,7 +934,7 @@ else()
|
||||
set(_opengl_link_lib OpenGL::GL)
|
||||
endif()
|
||||
|
||||
target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo libvgcode md4c-html glad ${_opengl_link_lib} hidapi mdns ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto noise::noise pybind11::embed)
|
||||
target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo libvgcode md4c-html glad ${_opengl_link_lib} hidapi mdns ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto LibDataChannel::LibDataChannel noise::noise pybind11::embed)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
# Linux finds wxWidgets in module mode, whose include dirs and definitions
|
||||
@@ -981,29 +991,32 @@ endif ()
|
||||
|
||||
if (APPLE)
|
||||
# Static FFmpeg from the deps install: nothing to bundle into the .app,
|
||||
# no rpath/install_name handling. Order matters: avcodec -> swscale -> avutil.
|
||||
# no rpath/install_name handling. Order matters: avformat -> avcodec -> swscale -> avutil.
|
||||
find_library(LIBAVFORMAT_LIBRARY NAMES libavformat.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
find_library(LIBAVCODEC_LIBRARY NAMES libavcodec.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
find_library(LIBSWSCALE_LIBRARY NAMES libswscale.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
find_library(LIBAVUTIL_LIBRARY NAMES libavutil.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
if (NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY)
|
||||
message(FATAL_ERROR "Static FFmpeg (libavcodec.a/libswscale.a/libavutil.a) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps — FFMPEG builds static-only on macOS.")
|
||||
if (NOT LIBAVFORMAT_LIBRARY OR NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY)
|
||||
message(FATAL_ERROR "Static FFmpeg (libavformat.a/libavcodec.a/libswscale.a/libavutil.a) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps — FFMPEG builds static-only on macOS.")
|
||||
endif ()
|
||||
target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY})
|
||||
target_link_libraries(libslic3r_gui ${LIBAVFORMAT_LIBRARY} ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY})
|
||||
target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include)
|
||||
elseif (WIN32)
|
||||
# Prebuilt shared FFmpeg from the deps install. Windows has no pkg-config,
|
||||
# so resolve the import libraries out of the deps prefix directly; the DLLs
|
||||
# are copied next to the executable by the top level CMakeLists.
|
||||
find_library(LIBAVFORMAT_LIBRARY NAMES avformat PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
find_library(LIBAVCODEC_LIBRARY NAMES avcodec PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
find_library(LIBSWSCALE_LIBRARY NAMES swscale PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
find_library(LIBAVUTIL_LIBRARY NAMES avutil PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH)
|
||||
if (NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY)
|
||||
message(FATAL_ERROR "FFmpeg (avcodec/swscale/avutil) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps.")
|
||||
if (NOT LIBAVFORMAT_LIBRARY OR NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY)
|
||||
message(FATAL_ERROR "FFmpeg (avformat/avcodec/swscale/avutil) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps.")
|
||||
endif ()
|
||||
target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY})
|
||||
target_link_libraries(libslic3r_gui ${LIBAVFORMAT_LIBRARY} ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY})
|
||||
target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include)
|
||||
else ()
|
||||
pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET
|
||||
libavformat
|
||||
libavcodec
|
||||
libswscale
|
||||
libavutil
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user