mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-24 09:23:27 +00:00
Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ee529e283 | ||
|
|
7ae76e44b1 | ||
|
|
54c32a54b4 | ||
|
|
037b859447 | ||
|
|
02746cd0f5 | ||
|
|
66b300987b | ||
|
|
9bae19fcb3 | ||
|
|
fcd8131998 | ||
|
|
a8f1061a02 | ||
|
|
b46916a8be | ||
|
|
bf024ed34e | ||
|
|
0211277976 | ||
|
|
7758332406 | ||
|
|
cc883e458d |
+1
-42
@@ -826,37 +826,6 @@ 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)
|
||||
@@ -1137,7 +1106,6 @@ 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
|
||||
@@ -1150,7 +1118,6 @@ 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
|
||||
@@ -1174,10 +1141,7 @@ function(orcaslicer_copy_sos target config postfix output_sos)
|
||||
set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
endif ()
|
||||
|
||||
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
|
||||
file(COPY ${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
|
||||
@@ -1192,9 +1156,6 @@ 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
|
||||
@@ -1324,8 +1285,6 @@ 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
+11
-23
@@ -156,7 +156,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;SOURCE_DIR" "CMAKE_ARGS" ${ARGN})
|
||||
cmake_parse_arguments(P_ARGS "FORWARD_CONFIG" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
|
||||
|
||||
# MSVC is true for clang-cl as well, so the sub-build toolchain has to key on the
|
||||
# generator. A non-Visual-Studio superbuild passes its own generator down, and with
|
||||
@@ -202,18 +202,12 @@ 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
|
||||
@@ -246,14 +240,12 @@ 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
|
||||
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_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}
|
||||
)
|
||||
ExternalProject_Add_Step(dep_${projectname} free_build_space
|
||||
DEPENDEES install # do after install
|
||||
COMMENT "Freeing Space: Removing source and build files"
|
||||
@@ -267,7 +259,6 @@ 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
|
||||
@@ -395,6 +386,10 @@ 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
|
||||
@@ -405,12 +400,6 @@ 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
|
||||
@@ -484,7 +473,6 @@ set(_dep_list
|
||||
dep_wxInspector
|
||||
dep_FFMPEG
|
||||
dep_Assimp
|
||||
${DATACHANNEL_PKG}
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
|
||||
Vendored
-37
@@ -1,37 +0,0 @@
|
||||
# libdatachannel is the native ICE/DTLS/SCTP implementation used by the
|
||||
# GUI WebRTC camera controller. Keep the source revision fixed: the signaling
|
||||
# protocol is evolving independently of this transport dependency.
|
||||
#
|
||||
# It vendors plog, usrsctp and libjuice as git submodules, which a plain
|
||||
# GitHub tag tarball does not include. The flatpak sandbox has no network
|
||||
# access during the build, so there the manifest itself clones the repo
|
||||
# (submodules and all) into the dependency download directory before the
|
||||
# sandbox closes. ExternalProject_Add is pointed at that existing checkout
|
||||
# instead of being given its own network-dependent download method.
|
||||
if (FLATPAK)
|
||||
set(_datachannel_source
|
||||
SOURCE_DIR ${DEP_DOWNLOAD_DIR}/DataChannel
|
||||
)
|
||||
else()
|
||||
set(_datachannel_source
|
||||
GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
|
||||
GIT_TAG v0.24.5
|
||||
GIT_SHALLOW ON
|
||||
GIT_SUBMODULES_RECURSE ON
|
||||
)
|
||||
endif()
|
||||
|
||||
orcaslicer_add_cmake_project(DataChannel
|
||||
DEPENDS ${OPENSSL_PKG}
|
||||
CMAKE_ARGS
|
||||
-DNO_EXAMPLES=ON
|
||||
-DNO_TESTS=ON
|
||||
-DNO_WEBSOCKET=ON
|
||||
-DNO_MEDIA=ON
|
||||
-DUSE_NICE=OFF
|
||||
-DUSE_SYSTEM_JUICE=OFF
|
||||
-DUSE_SYSTEM_USRSCTP=OFF
|
||||
-DOPENSSL_ROOT_DIR:PATH=${DESTDIR}
|
||||
-DOPENSSL_USE_STATIC_LIBS=ON
|
||||
${_datachannel_source}
|
||||
)
|
||||
Vendored
+7
-23
@@ -1,26 +1,14 @@
|
||||
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-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")
|
||||
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")
|
||||
|
||||
ExternalProject_Add(dep_FFMPEG
|
||||
${_ffmpeg_depends}
|
||||
URL ${PREBUILD_URL_${DEPS_ARCH}}
|
||||
URL_HASH SHA256=${PREBUILD_HASH_${DEPS_ARCH}}
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
|
||||
@@ -33,8 +21,6 @@ if (MSVC)
|
||||
)
|
||||
|
||||
else ()
|
||||
set(_openssl_cmd --enable-openssl)
|
||||
|
||||
if (APPLE)
|
||||
set(_minos_cmd
|
||||
"--extra-cflags=-mmacosx-version-min=${DEP_OSX_TARGET}"
|
||||
@@ -66,11 +52,10 @@ 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 ${_ffmpeg_configure_command}
|
||||
CONFIGURE_COMMAND ${_conf_cmd}
|
||||
${_cross_cmd}
|
||||
${_pic_cmd}
|
||||
${_arch_cmd}
|
||||
@@ -78,21 +63,20 @@ 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,http,https,rtp,tcp,udp
|
||||
--enable-protocol=file,fd,pipe,rtp,udp
|
||||
--disable-muxers
|
||||
--enable-muxer=rtp
|
||||
--disable-encoders
|
||||
--disable-decoders
|
||||
--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*
|
||||
--disable-demuxers
|
||||
--enable-demuxer=h264,mp3,mov,mpjpeg,rtsp,sdp
|
||||
--enable-demuxer=h264,mp3,mov
|
||||
--disable-zlib
|
||||
--disable-avdevice
|
||||
BUILD_IN_SOURCE ON
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
# Deferred Page Construction: High Level Design
|
||||
|
||||
## Why it exists
|
||||
|
||||
The main window is a notebook of tabs. When the first frame appears, one tab is on
|
||||
screen and the others are not; some of them are opened later in the session, some
|
||||
never, and some only exist for certain printers. Building a tab before the first frame
|
||||
adds its cost to every startup, whether or not the tab is used.
|
||||
|
||||
This subsystem builds a tab's panel the first time the tab is shown. It also builds the
|
||||
remaining tabs while the user is idle after startup, in units of tens of milliseconds,
|
||||
so a click that lands in the middle of one waits for that unit and no longer. Startup
|
||||
pays only for what the first frame shows, and the other tabs are usually built before
|
||||
anyone opens them.
|
||||
|
||||
## The parts
|
||||
|
||||
`src/slic3r/GUI/Lazy.hpp`, `LazyPage.hpp`, `StagedBuild.hpp` and `IdleScheduler.hpp/.cpp`
|
||||
(with its wx-free `PrebuildQueue.hpp`) are independent. A holder can hold anything a
|
||||
factory makes, a page is a holder with a placeholder widget, a staged object can live
|
||||
outside a holder, and the scheduler knows none of them; it runs tasks, which `MainFrame`
|
||||
makes from the holders.
|
||||
|
||||
### Lazy<T>: the holder
|
||||
|
||||
Holds an object that a factory makes on first use, under a name for the log and a place
|
||||
in the idle queue, both given by the owner. The header has no wx dependency; the busy
|
||||
cursor for an on-demand build lives in `Lazy.cpp` and is skipped when there is no app,
|
||||
so the holder is unit-tested.
|
||||
|
||||
- `get()` is null until the object is completely built; `built()` says the same.
|
||||
- `ensure()` builds whatever is left now, under a busy cursor, and returns the object, or
|
||||
null in the two cases below. A click on an unbuilt tab or a first open of a dialog goes
|
||||
through this, and it logs the units and time it took.
|
||||
- `build_step()` runs one unit of construction and returns true while more remain. The
|
||||
first unit is the factory call, and each later unit is one `StagedBuild` step if the
|
||||
type has them.
|
||||
- `when_built(fn)` runs `fn(object)` now if it exists, otherwise once it is built.
|
||||
- `pending()` says whether the idle prebuild has work here: not built, and the factory
|
||||
has not returned null. A null factory result is logged and the holder stays unbuilt.
|
||||
- A unit that pumps the event loop cannot re-enter the holder; a nested `build_step()`
|
||||
does nothing and a nested `ensure()` returns null.
|
||||
- After a unit throws, the holder and the scheduler still run the next one.
|
||||
|
||||
The holder does not own the object; its wx parent does, as for any window. A type with
|
||||
one instance in the app derives from `LazyInstance<T>`, which points at that instance's
|
||||
holder (the holder registers itself, and a recreated `MainFrame`'s holder replaces the
|
||||
old frame's) and gives the type the static entry points the rest of the app uses,
|
||||
`T::if_built()`, `T::ensure()` and `T::when_built(fn)`. They return null, or do
|
||||
nothing, while no holder exists, so a caller needs no `mainframe` check.
|
||||
|
||||
`built()` is an atomic flag, since a job worker reads it through the statics
|
||||
(`MainFrame::get_calibration_curr_tab()`); it is set after the object is complete.
|
||||
|
||||
`LazyBase` is the holder's type-free interface (`name()`, `built()`, `pending()`,
|
||||
`build_step()`, `prebuild_order()`) and is what the scheduler side sees.
|
||||
|
||||
### LazyPage<Panel>: the placeholder
|
||||
|
||||
A `wxPanel` placed in the parent in place of the real panel, and a `Lazy<Panel>` whose
|
||||
factory makes the panel inside it (by default `new Panel(parent)`). The notebook needs a
|
||||
page object for the tab to exist and for `show_device()` to insert and remove tabs by
|
||||
pointer, and the placeholder is that object. `MainFrame` creates every page once, named
|
||||
after its `TAB_ID_*`, and keeps it for the frame's life; `show_device()` only moves
|
||||
pages in and out of the book.
|
||||
|
||||
- `Show()` is forwarded to the panel, so a panel's own `Show()` override stays its
|
||||
activation hook (refresh timers, machine sync) and `SelectPageByName()` works
|
||||
unchanged. A show builds the panel unless the frame itself is still hidden, because
|
||||
the book selects its first page as it is inserted; `MainFrame::Show()` shows the
|
||||
current page again when the frame becomes visible, which builds it.
|
||||
- `in_book()` says whether the parent notebook currently lists the page, and
|
||||
`pending()` is that and not built, so a tab `show_device()` has taken out of the book
|
||||
is not prebuilt.
|
||||
- A panel built while its page is hidden stays hidden, and a completed panel gets the
|
||||
dark-mode pass the frame ran before it existed.
|
||||
|
||||
The Compare presets dialog is a holder without a page. `MainFrame` keeps a
|
||||
`Lazy<DiffPresetDialog>` whose factory constructs the dialog and binds its events, the
|
||||
dialog derives from `LazyInstance`, and its callers use
|
||||
`DiffPresetDialog::ensure()->show()` and `DiffPresetDialog::if_built()` like a tab's
|
||||
callers do. Saving a preset refreshes the dialog only while it is shown, since `show()`
|
||||
reloads the presets.
|
||||
|
||||
### StagedBuild: construction in units
|
||||
|
||||
A mixin for a panel whose constructor is too big to be one unit. The constructor builds
|
||||
the skeleton (sizers, and the parts other code may touch) and queues the rest with
|
||||
`add_build_step()`. `build_step()` runs one step, and `add_build_steps_of(child)`
|
||||
forwards a child's steps so a nested panel is spread the same way; the parent is built
|
||||
only once the child is, including steps the child queues later. Steps run in order, on
|
||||
the main thread. A `Lazy<T>` recognises a staged type at compile time and runs its steps
|
||||
one per unit.
|
||||
|
||||
Nothing may touch what a step builds before the last step has run. In practice:
|
||||
|
||||
- nothing paints the panel before it is complete, since a panel built at idle is hidden
|
||||
with its page and one built on demand finishes inside `ensure()` before the event loop
|
||||
runs again;
|
||||
- members created in steps are initialised to null in the header, so a partially built
|
||||
panel can be destroyed;
|
||||
- timers and event handlers that use step content check `built()` first
|
||||
(`MonitorPanel::update_all()`, `CalibrationPanel::update_all()`), and a child's steps
|
||||
are queued before anything in the constructor can fire such a handler;
|
||||
- a destructor that disconnects from step content checks `built()` first;
|
||||
- a constructor or step does not take focus while the panel is off screen
|
||||
(`IsShownOnScreen()` before `SetFocus()`), since it may run while the user is typing
|
||||
elsewhere;
|
||||
- where a step's widgets must keep their place in a sizer that later steps also fill, the
|
||||
constructor adds an empty slot sizer in that position and the step fills the slot
|
||||
(`StatusBasePanel`).
|
||||
|
||||
### IdleScheduler: when to build
|
||||
|
||||
A task is any `LazyBase`: a name for the log, `pending()`, `build_step()` and
|
||||
`prebuild_order()`. `PrebuildQueue` holds the tasks by order (equal order in the order
|
||||
added) and runs a slice, the units of the first pending task until it completes, the
|
||||
budget is spent on the clock it is given, or the interrupt predicate says input arrived.
|
||||
It has no wx dependency and is unit-tested with a fake clock. A task whose work is gone
|
||||
is passed over and stays in the queue, so a tab that `show_device()` removes and later
|
||||
re-inserts is pending again.
|
||||
|
||||
`IdleScheduler` drives the queue with the real clock, the app's input timestamp and the
|
||||
Windows queue check, and logs each unit and slice. Each slice is a timer message: a
|
||||
period of 250 ms while waiting for the user to go quiet, and a one-shot of zero after a
|
||||
slice that left work, so the event loop dispatches whatever it has queued (paint,
|
||||
timers, input) before the next slice runs. Chaining slices with `CallAfter` would not do
|
||||
this: wx drains pending events fully before the next native message, on every platform.
|
||||
On GTK the one-shot is 5 ms, because a due GLib timeout runs ahead of the redraw and
|
||||
idle sources that paint and deliver posted events.
|
||||
A slice runs only once the user has been idle for the quiet time, and the timer stops
|
||||
itself once no task is pending. The tick period, quiet time and slice length are
|
||||
constants in `IdleScheduler.cpp`. A unit cannot be interrupted once started, so the
|
||||
largest unit bounds click latency on Windows; on the other platforms a click also waits
|
||||
for the rest of the slice. A unit that pumps the event loop lets the timer fire inside
|
||||
its own slice, and that tick does nothing.
|
||||
|
||||
The tasks are made by their owners. `MainFrame::prebuild_pages_when_idle()` registers
|
||||
every `LazyPage` the frame created, in or out of the book (`pending()` is false for a
|
||||
page out of the book), the Compare presets holder, and the Prepare sidebar's settings
|
||||
page from `ParamsPanel::settings_page_prebuild()`, whose first unit selects the default
|
||||
tab if none is selected yet and whose later units build one option group each.
|
||||
`show_device()` only restarts the timer. `MainFrame` owns the scheduler because it owns
|
||||
everything the tasks build, and clearing the queue with the frame is what keeps a task
|
||||
from outliving its object.
|
||||
|
||||
Idle time comes from `GUI_App::FilterEvent`, which timestamps mouse and keyboard events
|
||||
(`wxEVT_CATEGORY_USER_INPUT` minus command events, which all claim that category), and
|
||||
`GUI_App::input_idle_ms()` reports it. On Windows a slice additionally refuses to start
|
||||
when the message queue holds keyboard, button, touch or pen input. Mouse moves are
|
||||
excluded because Windows synthesises one whenever a window appears under the cursor,
|
||||
which every unit does. Other platforms use the timestamp alone.
|
||||
|
||||
Once every registered page is built the timer is stopped and the subsystem costs
|
||||
nothing.
|
||||
|
||||
## Rules
|
||||
|
||||
**What builds before the first frame.** The Prepare tab's plater, because `post_init()`
|
||||
needs its GL canvas on screen to initialise OpenGL in every startup state, and the start
|
||||
page the user configured. Home is built by the first `MainFrame::Show()`, Prepare's
|
||||
settings page by selecting the tab. `post_init()` passes through the Prepare tab for GL
|
||||
init under `Freeze()` with `MainFrame::select_prepare_for_gl_init()`, which changes the
|
||||
selection without the page-changed event, so nothing else is built for that pass.
|
||||
|
||||
**Reaching a lazy object.** A caller uses the type's own statics. `T::if_built()` may
|
||||
return null and is for telling the object something it can live without (a rescale, a
|
||||
colour change, a status update). `T::ensure()` builds the object and is for navigating
|
||||
to it or for a caller that is about to show it. A caller that tells the object something
|
||||
it would not fetch for itself on construction uses `T::when_built()`, which keeps the
|
||||
message until the object exists. A panel that pulls its state when constructed (the Home
|
||||
page requests the recent list on load, the Device tab reads the device manager on show)
|
||||
is reached with `if_built()`; one that cannot pull gets `when_built()`.
|
||||
|
||||
**Unit size.** A unit cannot be interrupted, so it should stay within the slice length on
|
||||
a fast machine. A constructor above that is staged. A single widget above it is the
|
||||
floor unless the widget itself is split.
|
||||
|
||||
**Order.** Cheapest and most likely to be opened first, given where `MainFrame` creates
|
||||
each holder. The settings page is 0 (the Prepare tab's own content), Home 10, Device 20
|
||||
(a Bambu user's usual second stop), Calibration 30, Multi-device 40, the web Device
|
||||
view 50, Project 60 (a second WebView2 instance) and the Compare presets dialog 100;
|
||||
steps of ten so a new tab takes a value between its neighbours without renumbering
|
||||
them. `MainFrame::prebuild_pages_when_idle()` registers the tasks once, from
|
||||
`post_init()`.
|
||||
|
||||
**Never prebuilt.** A holder with a negative order, for a tab that few sessions open
|
||||
and that costs more to build unasked than it saves (the Design tab), and plugin-provided
|
||||
tabs, which are Python-side and not lazy pages.
|
||||
|
||||
## Adopting it
|
||||
|
||||
A lazy tab needs:
|
||||
|
||||
1. The panel derived from `LazyInstance<Panel>`, since a tab's panel has one instance.
|
||||
2. A `LazyPage<Panel>*` member in `MainFrame`, created once in `init_tabpanel()` with
|
||||
its `TAB_ID_*` as the name, its place by the order rule (and a factory if
|
||||
`new Panel(parent)` is not enough), added to `m_lazy_pages`, and used wherever the
|
||||
tab is added to or looked up in the notebook.
|
||||
3. Every use of the panel outside `MainFrame` going through one of the panel's statics,
|
||||
chosen by the rule above. When converting an existing member, `grep` for it; the
|
||||
compiler finds the rest.
|
||||
4. A constructor that copes with the frame already existing and the user being busy
|
||||
elsewhere, since `wxGetApp().mainframe` is set, the frame may be shown, and the user
|
||||
may be typing when a lazy panel is built: no `SetFocus()` while off screen, and
|
||||
whatever the constructor did through a `MainFrame` accessor before (a mode update, a
|
||||
deferred URL) done in the constructor itself.
|
||||
|
||||
To stage a heavy constructor, inherit `StagedBuild`, keep the skeleton in the constructor,
|
||||
move the rest into `add_build_step()` lambdas in the original order, and follow the
|
||||
staged-panel rules above. Measure the units. A step that is still one big widget has to
|
||||
be split inside that widget or accepted as the floor.
|
||||
|
||||
Verification is by log. `MainFrame::prebuild_pages_when_idle` lists the queue it
|
||||
registered, `IdleScheduler::tick` reports each completed task by name at info level and
|
||||
each slice and unit at debug level, and `Lazy::ensure` reports an object a user built
|
||||
on demand with the units and time it took. A run from the configured start
|
||||
page shows every registered page complete, in order, with no unit longer than intended.
|
||||
A click on a tab mid-prebuild shows the finished panel with an `ensure` line for what was
|
||||
left, and the slices resume for the remaining tasks once the user is idle again.
|
||||
@@ -1,279 +0,0 @@
|
||||
# Printer agents
|
||||
|
||||
Printer agents isolate printer-specific communication from the rest of OrcaSlicer. The GUI and
|
||||
`DeviceManager` operate on a shared set of printer operations and device state; a selected printer
|
||||
agent implements those operations for a particular printer ecosystem. The agent boundary allows
|
||||
Bambu, Moonraker-based printers, built-in integrations, and Python-provided integrations to use the
|
||||
same application workflow without making the GUI understand every printer protocol.
|
||||
|
||||
The current boundary is an adapter boundary around the existing application contract. In particular,
|
||||
some request fields and message payloads still use the Bambu-shaped representation that existing
|
||||
`MachineObject` and `DeviceManager` code consumes. The printer agent is responsible for translating
|
||||
that representation into the protocol spoken by its printer. This is an intentional compatibility
|
||||
constraint of the current design; the interface is not yet a neutral printer protocol.
|
||||
|
||||
The v1 dialect migration path is deliberately narrow. `DeviceManager` currently speaks the Bambu JSON
|
||||
dialect because that is the payload shape already used throughout the command and state workflow. The
|
||||
v1 `OrcaPrinterAgent` also accepts that Bambu dialect. Its transport path places the small translation
|
||||
needed for the target printer at `deliver_to_sink`, keeping the compatibility code at the edge rather
|
||||
than spreading it through `DeviceManager` or the agent interface.
|
||||
|
||||
The eventual direction is for `DeviceManager` to produce an Orca JSON dialect. The Bambu agent will then
|
||||
own the translation from Orca JSON to Bambu's protocol, while `OrcaPrinterAgent` can forward the Orca
|
||||
payload directly to its sink. The v1 translation at `deliver_to_sink` can then be removed without
|
||||
changing `DeviceManager`, the command callers, or the rest of the agent workflow.
|
||||
|
||||
## Components
|
||||
|
||||
The system has four relevant layers:
|
||||
|
||||
```text
|
||||
GUI / DeviceManager / MachineObject
|
||||
|
|
||||
NetworkAgent
|
||||
/ \
|
||||
IPrinterAgent ICloudServiceAgent
|
||||
| |
|
||||
printer protocol authentication and cloud services
|
||||
```
|
||||
|
||||
### `DeviceManager` and `MachineObject`
|
||||
|
||||
`DeviceManager` owns the application-facing printer workflow. It maintains `MachineObject` instances,
|
||||
updates their state, filters devices for the active printer agent, and initiates operations such as
|
||||
homing, temperature changes, printing, subscriptions, and camera playback.
|
||||
|
||||
`MachineObject` remains the shared state model used by the GUI. It does not contain the implementation
|
||||
of a printer protocol. When a device is discovered or returned by a cloud query, the device is tagged
|
||||
with the active `printer_agent_id`. Device lists and selected-machine operations use that tag to avoid
|
||||
sending an operation through an agent that does not own the device.
|
||||
|
||||
### `NetworkAgent`
|
||||
|
||||
`NetworkAgent` is the façade used by the GUI and `DeviceManager`. It owns:
|
||||
|
||||
- the currently selected `IPrinterAgent`;
|
||||
- the registered cloud-service instances, indexed by provider;
|
||||
- callbacks shared by the active printer agent and the application;
|
||||
- the forwarding methods for printer commands and cloud operations.
|
||||
|
||||
There is one active printer agent for the currently selected printer preset. Switching the preset
|
||||
increments the machine-list generation, disconnects the old printer agent, removes its callbacks, and
|
||||
installs the newly selected agent. The façade then forwards printer operations to that agent.
|
||||
|
||||
Cloud operations are selected separately using a provider key. `NetworkAgent` forwards a cloud request
|
||||
to the matching `ICloudServiceAgent`, and forwards cloud camera operations with a device ID. The
|
||||
printer agent receives a cloud-agent pointer through `set_cloud_agent()` when it is created, allowing
|
||||
printer communication to obtain cloud tokens without depending on a concrete cloud implementation.
|
||||
|
||||
### `IPrinterAgent`
|
||||
|
||||
`IPrinterAgent` is the printer-facing contract. It covers:
|
||||
|
||||
- cloud-relay and direct-LAN message delivery;
|
||||
- LAN connection, discovery, binding, and certificates;
|
||||
- printer subscriptions and callbacks;
|
||||
- print operations;
|
||||
- filament synchronization;
|
||||
- camera capability and local camera URL reporting;
|
||||
- printer command methods.
|
||||
|
||||
Concrete built-in implementations include the Bambu wrapper, the native Orca/Moonraker path, and
|
||||
other printer-agent implementations registered by the application. A printer agent may use either
|
||||
the cloud agent, a direct LAN connection, or both.
|
||||
|
||||
### `ICloudServiceAgent`
|
||||
|
||||
`ICloudServiceAgent` owns authentication and services provided by a cloud backend. It covers login
|
||||
state, tokens, user and printer lists, settings synchronization, model services, cloud messages, and
|
||||
cloud camera operations.
|
||||
|
||||
Cloud camera operations are device-scoped:
|
||||
|
||||
- `get_camera_url(dev_id, callback)` obtains a stream URL for one device;
|
||||
- `create_camera_signaling_channel(dev_id)` creates signaling for one device where the provider
|
||||
supports it.
|
||||
|
||||
This is separate from the local camera URL exposed by `IPrinterAgent`, which is currently scoped to
|
||||
the active printer agent because a normal LAN agent represents one physical printer connection.
|
||||
|
||||
## Agent registration and selection
|
||||
|
||||
`NetworkAgentFactory` maintains the printer-agent registry. Each registry entry contains an agent ID,
|
||||
a display name, and a factory function. Built-in agents register during application initialization.
|
||||
Python printer-agent capabilities register dynamically and contribute an agent ID and factory entry.
|
||||
|
||||
The selected printer preset contains the printer-agent choice. If no explicit choice is stored, the
|
||||
application preserves the existing default behavior: Bambu presets select the Bambu agent and other
|
||||
presets select the native Orca agent. When a preset is changed, `GUI_App` resolves the effective agent
|
||||
ID, obtains the corresponding cloud agent, creates the printer agent through the registry, and installs
|
||||
it in `NetworkAgent`.
|
||||
|
||||
The registry rejects conflicting agent IDs. This matters for Python plugins because an agent ID is the
|
||||
stable identity used by presets and device ownership; two enabled plugin capabilities must not claim
|
||||
the same ID.
|
||||
|
||||
## Message and command flow
|
||||
|
||||
There are two low-level message paths:
|
||||
|
||||
- `send_message()` publishes a command through the printer's cloud relay;
|
||||
- `send_message_to_printer()` sends a command directly to the printer over the LAN path.
|
||||
|
||||
Both paths accept a JSON string, quality-of-service and flag values, and return the existing network
|
||||
status code domain. The agent owns the conversion from that JSON contract to its native transport.
|
||||
|
||||
The typed `command_*` methods are the application-facing convenience layer. The five generic defaults
|
||||
currently implemented by `IPrinterAgent` construct the existing JSON dialect and route through the
|
||||
same message path:
|
||||
|
||||
| Method | Default operation |
|
||||
| --- | --- |
|
||||
| `command_xyz_abs()` | Send `G90` for absolute positioning |
|
||||
| `command_auto_leveling()` | Send `G29` for bed leveling |
|
||||
| `command_go_home()` | Use the supported homing operation or send `G28` |
|
||||
| `command_set_bed()` | Use the supported bed control or send `M140` |
|
||||
| `command_set_nozzle()` | Send `M104` for nozzle temperature |
|
||||
|
||||
These are compatibility defaults for common printer workflows, not a guarantee that every firmware
|
||||
implements every command identically. An agent can override a method when its protocol needs another
|
||||
operation. For example, a Klipper configuration may use `BED_MESH_CALIBRATE` instead of `G29`.
|
||||
|
||||
The remaining common command methods default to `ORCA_NETWORK_ERR_CMD_NOT_SUPPORTED` because their
|
||||
existing behavior is vendor-specific or has no portable implementation:
|
||||
|
||||
- AMS RFID refresh;
|
||||
- AMS calibration;
|
||||
- AMS tray selection;
|
||||
- camera start;
|
||||
- axis control.
|
||||
|
||||
The methods remain on the common interface so an agent that supports them can override them explicitly.
|
||||
`sequence_id` remains part of the command contract because `DeviceManager` creates and tracks it as
|
||||
the command ID.
|
||||
|
||||
## Filament and AMS synchronization
|
||||
|
||||
The `OrcaPrinterAgent` bridges OrcaSonar's filament/AMS state. Its capability reply
|
||||
carries two independent signals: `protocol.features.fms` means a material system resolves,
|
||||
and `protocol.features.filament_slots` means the connector owns a filament-slot model that
|
||||
persists without any material hardware. Either one enables filament synchronization, so a
|
||||
printer with slots but no AMS still exposes the slot workflow. The agent also caches
|
||||
`protocol.ams_ops`, the canonical material write operations the resolved drivers implement,
|
||||
and uses it to gate AMS writes; `print.ams_filament_setting` is exempt because it persists
|
||||
connector state and is advertised by `filament_slots` alone. A write whose operation is not
|
||||
declared is refused with `CAP_NOT_AVAILABLE` before it reaches the wire.
|
||||
|
||||
Printer state arrives as the pushed `ams`/`vir_slot` projection inside `push_status`; the
|
||||
Orca agent does not poll the Moonraker `lane_data` namespace, which exists for
|
||||
Moonraker-channel consumers. Slot presence is the user's declaration, not sensed material:
|
||||
`tray_exist_bits` and the presence of a `vir_slot` entry mark a slot as present even with an
|
||||
empty `tray_type`, which is the `is_exists` state the filament UI reads. A full status frame
|
||||
(`msg=0`, or a LAN frame with no `msg`) is authoritative for removals, so a virtual tray id
|
||||
absent from a populated `vir_slot` is dropped; a delta frame (`msg=1`) only updates the
|
||||
entries it names and leaves omitted entries held.
|
||||
|
||||
Writes follow the same edge-translation rule as the rest of the agent. The shared
|
||||
`MachineObject` command builders emit Bambu-shaped `print.ams_*` payloads, and the agent's
|
||||
single send funnel decodes them into OrcaSonar's canonical bodies — `selector` with a flat
|
||||
lane or `ams_id`/`slot_id` coordinates for `ams_change_filament`, coordinates for
|
||||
`ams_filament_setting` — before publishing. The server resolves and rejects with its own
|
||||
`errno` backstop; the agent only withholds operations the device did not declare.
|
||||
|
||||
A filament frame can arrive before the capability reply that decides synchronization mode,
|
||||
for example when the topology bootstraps after connect or Klipper restarts. While a device's
|
||||
capabilities are still unknown, the agent re-requests `get_capabilities` and a full status on
|
||||
a filament frame, throttled per device, and stops once an answer arrives. Dedicated
|
||||
capability state is cleared when a cloud device is deselected, while an independently active
|
||||
LAN session for the same device id keeps its declaration.
|
||||
|
||||
## 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
|
||||
- [`OrcaPrinterAgent`](../../src/slic3r/Utils/OrcaPrinterAgent.hpp) — OrcaSonar transport, capability
|
||||
discovery, and Bambu-to-canonical command translation
|
||||
- [`AmsPayload`](../../src/slic3r/Utils/AmsPayload.hpp) — shared filament payload rendering and the
|
||||
per-device AMS capability cache
|
||||
- [`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
|
||||
+121
-17
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Sovol",
|
||||
"url": "",
|
||||
"version": "02.04.00.04",
|
||||
"version": "02.04.00.07",
|
||||
"force_update": "0",
|
||||
"description": "Sovol configurations",
|
||||
"machine_model_list": [
|
||||
@@ -167,10 +167,6 @@
|
||||
"name": "0.20mm Standard @Sovol SV08 MAX 0.4 nozzle",
|
||||
"sub_path": "process/0.20mm Standard @Sovol SV08 MAX 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.20mm Standard @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Fast @Sovol SV06 ACE",
|
||||
"sub_path": "process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json"
|
||||
@@ -198,6 +194,74 @@
|
||||
{
|
||||
"name": "0.40mm Standard @Sovol SV08 MAX 0.8 nozzle",
|
||||
"sub_path": "process/0.40mm Standard @Sovol SV08 MAX 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_zero",
|
||||
"sub_path": "process/fdm_process_zero.json"
|
||||
},
|
||||
{
|
||||
"name": "0.06mm Quality @Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "process/0.06mm Quality @Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.10mm Standard @Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "process/0.10mm Standard @Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Quality @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.12mm Quality @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.14mm Fast @Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "process/0.14mm Fast @Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.15mm Quality @Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "process/0.15mm Quality @Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Quality @Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "process/0.20mm Quality @Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.20mm Standard @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.25mm Quality @Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "process/0.25mm Quality @Sovol Zero 1.0 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.25mm SPEEDBENCHY @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.25mm SPEEDBENCHY @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Fast @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.28mm Fast @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Standard @Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "process/0.30mm Standard @Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.40mm Standard @Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "process/0.40mm Standard @Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.42mm Fast @Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "process/0.42mm Fast @Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.50mm Standard @Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "process/0.50mm Standard @Sovol Zero 1.0 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.56mm Fast @Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "process/0.56mm Fast @Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.70mm Fast @Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "process/0.70mm Fast @Sovol Zero 1.0 nozzle.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [
|
||||
@@ -249,6 +313,10 @@
|
||||
"name": "Generic PETG @Sovol Zero",
|
||||
"sub_path": "filament/Generic PETG @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PETG @Sovol Zero Hardened Steel nozzle",
|
||||
"sub_path": "filament/Generic PETG @Sovol Zero Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA @Sovol SV06 ACE",
|
||||
"sub_path": "filament/Generic PLA @Sovol SV06 ACE.json"
|
||||
@@ -277,6 +345,14 @@
|
||||
"name": "Generic PLA @Sovol Zero",
|
||||
"sub_path": "filament/Generic PLA @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA @Sovol Zero Hardened Steel nozzle",
|
||||
"sub_path": "filament/Generic PLA @Sovol Zero Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA SPEEDBENCHY @Sovol Zero",
|
||||
"sub_path": "filament/Generic PLA SPEEDBENCHY @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA Silk @Sovol SV08 MAX",
|
||||
"sub_path": "filament/Generic PLA Silk @Sovol SV08 MAX.json"
|
||||
@@ -285,6 +361,10 @@
|
||||
"name": "Generic PLA Silk @Sovol Zero",
|
||||
"sub_path": "filament/Generic PLA Silk @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA Silk @Sovol Zero Hardened Steel nozzle",
|
||||
"sub_path": "filament/Generic PLA Silk @Sovol Zero Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic TPU @Sovol SV06 ACE",
|
||||
"sub_path": "filament/Generic TPU @Sovol SV06 ACE.json"
|
||||
@@ -312,18 +392,6 @@
|
||||
{
|
||||
"name": "SUNLU PETG @Sovol SV08 MAX",
|
||||
"sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero PETG HS Nozzle",
|
||||
"sub_path": "filament/Sovol Zero PETG HS Nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero PLA Basic HS Nozzle",
|
||||
"sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero PLA Silk HS Nozzle",
|
||||
"sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.json"
|
||||
}
|
||||
],
|
||||
"machine_list": [
|
||||
@@ -415,9 +483,45 @@
|
||||
"name": "Sovol SV08 MAX 0.8 nozzle",
|
||||
"sub_path": "machine/Sovol SV08 MAX 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 1.0 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.2 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.4 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.6 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.8 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 1.0 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 1.0 Hardened Steel nozzle.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic ABS @Sovol Zero",
|
||||
"inherits": "Generic ABS @System",
|
||||
"renamed_from": "Sovol Zero ABS",
|
||||
"inherits": "fdm_filament_abs",
|
||||
"from": "system",
|
||||
"setting_id": "g6sSyyIFYJUzlXsp",
|
||||
"filament_id": "OFY9muEs",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
@@ -73,6 +74,39 @@
|
||||
"0"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_density": [
|
||||
"1.10"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFLakOUI",
|
||||
"setting_id": "yRKCiPMN6fxibcyg",
|
||||
"name": "Generic PC @Sovol Zero",
|
||||
"inherits": "Generic PC @System",
|
||||
"renamed_from": "Sovol Zero PC",
|
||||
"from": "system",
|
||||
"setting_id": "yRKCiPMN6fxibcyg",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pc",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
@@ -13,7 +14,16 @@
|
||||
"21"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"290"
|
||||
@@ -51,7 +61,9 @@
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"20"
|
||||
],
|
||||
@@ -61,8 +73,19 @@
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "0",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "50",
|
||||
"complete_print_exhaust_fan_speed": "50"
|
||||
"additional_cooling_fan_speed": [
|
||||
"0"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
]
|
||||
}
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFYPdQJh",
|
||||
"setting_id": "d9QbCESNz3ZLU6eu",
|
||||
"name": "Generic PETG @Sovol Zero Hardened Steel nozzle",
|
||||
"renamed_from": "Sovol Zero PETG HS Nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pet",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.048"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"265"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"250"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"280"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"40"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"50"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"10"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"70"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"10%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"close_fan_the_first_x_layers": [
|
||||
"1"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
@@ -1,16 +1,21 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFYPdQJh",
|
||||
"setting_id": "i4OW2eAtXOKdtVNj",
|
||||
"name": "Generic PETG @Sovol Zero",
|
||||
"inherits": "Generic PETG @System",
|
||||
"renamed_from": "Sovol Zero PETG",
|
||||
"from": "system",
|
||||
"setting_id": "i4OW2eAtXOKdtVNj",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pet",
|
||||
"filament_flow_ratio": [
|
||||
"1.0348"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.046",
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.046"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
@@ -68,10 +73,44 @@
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "50",
|
||||
"complete_print_exhaust_fan_speed": "50",
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFDSrzZ8",
|
||||
"setting_id": "nZgETe4CTpicEjQX",
|
||||
"name": "Generic PLA @Sovol Zero Hardened Steel nozzle",
|
||||
"renamed_from": "Sovol Zero PLA Basic HS Nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"1.0348"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"21"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.03"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"75%"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
@@ -1,21 +1,24 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFDSrzZ8",
|
||||
"setting_id": "NNDerIjh7qtuh1I3",
|
||||
"name": "Generic PLA @Sovol Zero",
|
||||
"inherits": "Generic PLA @System",
|
||||
"renamed_from": "Sovol Zero PLA Basic",
|
||||
"from": "system",
|
||||
"setting_id": "NNDerIjh7qtuh1I3",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"21"
|
||||
"25"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.032",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"230"
|
||||
@@ -24,28 +27,28 @@
|
||||
"210"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
"180"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
"240"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
"60"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
"60"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
"100"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
"60"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
"2"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
@@ -53,18 +56,43 @@
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
"10%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"50"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.4"
|
||||
],
|
||||
"filament_diameter": [
|
||||
"1.75"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFIUkWYN",
|
||||
"setting_id": "MC2InZ7iKDjIGike",
|
||||
"name": "Generic PLA SPEEDBENCHY @Sovol Zero",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"1"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"225"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.032"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"30"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"1.7"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"40"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"75%"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.35"
|
||||
],
|
||||
"filament_retraction_speed": [
|
||||
"90"
|
||||
],
|
||||
"filament_deretraction_speed": [
|
||||
"90"
|
||||
],
|
||||
"filament_retract_before_wipe": [
|
||||
"0%"
|
||||
],
|
||||
"filament_wipe_distance": [
|
||||
"2"
|
||||
],
|
||||
"filament_retract_when_changing_layer": [
|
||||
"0"
|
||||
],
|
||||
"filament_diameter": [
|
||||
"1.75"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"100"
|
||||
]
|
||||
}
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFesA6rF",
|
||||
"setting_id": "LA8X1RsMdV2xNT1o",
|
||||
"name": "Generic PLA Silk @Sovol Zero Hardened Steel nozzle",
|
||||
"renamed_from": "Sovol Zero PLA Silk HS Nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.027"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"75%"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
@@ -1,27 +1,30 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFesA6rF",
|
||||
"setting_id": "Se2yKerHRStYtWf5",
|
||||
"name": "Generic PLA Silk @Sovol Zero",
|
||||
"inherits": "Generic PLA Silk @System",
|
||||
"renamed_from": "Sovol Zero PLA Silk",
|
||||
"from": "system",
|
||||
"setting_id": "Se2yKerHRStYtWf5",
|
||||
"instantiation": "true",
|
||||
"filament_multitool_ramming_flow": [
|
||||
"20"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"nil"
|
||||
],
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.029",
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.029"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
@@ -59,7 +62,9 @@
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
@@ -69,8 +74,43 @@
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
"additional_cooling_fan_speed": [
|
||||
"75%"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"filament_multitool_ramming_flow": [
|
||||
"20"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"nil"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFgbpcy9",
|
||||
"setting_id": "MlY6WQ41FE8zDPSV",
|
||||
"name": "Generic TPU @Sovol Zero",
|
||||
"inherits": "Generic TPU @System",
|
||||
"renamed_from": "Sovol Zero TPU",
|
||||
"from": "system",
|
||||
"setting_id": "MlY6WQ41FE8zDPSV",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_tpu",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
@@ -60,11 +61,55 @@
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"additional_cooling_fan_speed": "50",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "100",
|
||||
"complete_print_exhaust_fan_speed": "50",
|
||||
"additional_cooling_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"nil"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Sovol Zero PETG HS Nozzle",
|
||||
"inherits": "Generic PETG @System",
|
||||
"from": "system",
|
||||
"setting_id": "AfxHmpdOkMDJa2fk",
|
||||
"filament_id": "OFymnal9",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.048",
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"265"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"250"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"280"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"40"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"50"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"10"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"70"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"10%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"close_fan_the_first_x_layers": [
|
||||
"1"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "50",
|
||||
"complete_print_exhaust_fan_speed": "50",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Sovol Zero PLA Basic HS Nozzle",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"setting_id": "i9wDnSEIrOBPbOZl",
|
||||
"filament_id": "OFzB4uOs",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"1.0348"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"21"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.03",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Sovol Zero PLA Silk HS Nozzle",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"setting_id": "XxEJBNFLRltR2Xwn",
|
||||
"filament_id": "OFAO9A7J",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.027",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.2 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "OkvEInEyzUUJzw9K",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.2HS",
|
||||
"nozzle_diameter": [
|
||||
"0.2"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "RqwHKS8MYRdoeJPi",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.4HS",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.6 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "s3N3FJkWrzOylFm8",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.6HS",
|
||||
"nozzle_diameter": [
|
||||
"0.6"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.8 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "houacf8sQ3bLozqD",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.8HS",
|
||||
"nozzle_diameter": [
|
||||
"0.8"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 1.0 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 1.0 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "sqlEiL0in8LSjmmn",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "1.0HS",
|
||||
"nozzle_diameter": [
|
||||
"1.0"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -2,11 +2,11 @@
|
||||
"type": "machine_model",
|
||||
"name": "Sovol Zero",
|
||||
"model_id": "Sovol-Zero",
|
||||
"nozzle_diameter": "0.4",
|
||||
"nozzle_diameter": "0.2;0.4;0.6;0.8;1.0;0.2HS;0.4HS;0.6HS;0.8HS;1.0HS",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Sovol",
|
||||
"bed_model": "sovol_zero_buildplate_model.stl",
|
||||
"bed_texture": "sovol_zero_buildplate_texture.svg",
|
||||
"hotend_model": "",
|
||||
"default_materials": "Generic PLA @Sovol Zero;Sovol Zero PLA Basic HS Nozzle;Generic PLA Silk @Sovol Zero;Sovol Zero PLA Silk HS Nozzle;Generic ABS @Sovol Zero;Generic PETG @Sovol Zero;Sovol Zero PETG HS Nozzle;Generic TPU @Sovol Zero;Generic PC @Sovol Zero"
|
||||
"default_materials": "Generic PLA @Sovol Zero;Generic PLA SPEEDBENCHY @Sovol Zero;Generic PLA @Sovol Zero Hardened Steel nozzle;Generic PLA Silk @Sovol Zero;Generic PLA Silk @Sovol Zero Hardened Steel nozzle;Generic ABS @Sovol Zero;Generic PETG @Sovol Zero;Generic PETG @Sovol Zero Hardened Steel nozzle;Generic TPU @Sovol Zero;Generic PC @Sovol Zero"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.06mm Quality @Sovol Zero 0.2 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "fWP7jaL7sJmmZ6QN",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.06",
|
||||
"bottom_shell_layers": "8",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.21",
|
||||
"line_width": "0.21",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.06",
|
||||
"initial_layer_line_width": "0.3",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.22",
|
||||
"wall_loops": "3",
|
||||
"internal_solid_infill_line_width": "0.21",
|
||||
"sparse_infill_line_width": "0.21",
|
||||
"support_top_z_distance": "0.10",
|
||||
"support_line_width": "0.21",
|
||||
"tree_support_tip_diameter": "0.21",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.21",
|
||||
"top_shell_layers": "8",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.10mm Standard @Sovol Zero 0.2 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "Gql3487jsaTXyuYZ",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.10",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.22",
|
||||
"line_width": "0.22",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.12",
|
||||
"initial_layer_line_width": "0.3",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.22",
|
||||
"wall_loops": "2",
|
||||
"internal_solid_infill_line_width": "0.22",
|
||||
"sparse_infill_line_width": "0.22",
|
||||
"support_top_z_distance": "0.20",
|
||||
"support_line_width": "0.22",
|
||||
"tree_support_tip_diameter": "0.22",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.22",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "CaEopiv2Wg6pQJjH",
|
||||
"name": "0.12mm Quality @Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"bottom_shell_layers": "8",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.42",
|
||||
"line_width": "0.42",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.12",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"sparse_infill_line_width": "0.42",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.44",
|
||||
"wall_loops": "3",
|
||||
"support_top_z_distance": "0.10",
|
||||
"support_line_width": "0.42",
|
||||
"tree_support_tip_diameter": "0.42",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.42",
|
||||
"internal_solid_infill_line_width": "0.42",
|
||||
"top_shell_layers": "8",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.14mm Fast @Sovol Zero 0.2 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "I9yoyCcGGTRrDoKu",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.14",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.24",
|
||||
"line_width": "0.24",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.14",
|
||||
"initial_layer_line_width": "0.3",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.24",
|
||||
"wall_loops": "2",
|
||||
"internal_solid_infill_line_width": "0.24",
|
||||
"sparse_infill_line_width": "0.24",
|
||||
"support_top_z_distance": "0.30",
|
||||
"support_line_width": "0.24",
|
||||
"tree_support_tip_diameter": "0.24",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "0.24",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "IfDpa3vM99D4ytny",
|
||||
"name": "0.15mm Quality @Sovol Zero 0.6 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.15",
|
||||
"bottom_shell_layers": "5",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.63",
|
||||
"line_width": "0.63",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_line_width": "0.9",
|
||||
"sparse_infill_line_width": "0.63",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.66",
|
||||
"wall_loops": "3",
|
||||
"support_top_z_distance": "0.15",
|
||||
"support_line_width": "0.63",
|
||||
"tree_support_tip_diameter": "0.63",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.63",
|
||||
"top_shell_layers": "5",
|
||||
"internal_solid_infill_line_width": "0.63",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Quality @Sovol Zero 0.8 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "MSxikpQZNYdoBynZ",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.20",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.84",
|
||||
"line_width": "0.84",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.36",
|
||||
"initial_layer_line_width": "1.2",
|
||||
"sparse_infill_line_width": "0.84",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.88",
|
||||
"wall_loops": "3",
|
||||
"support_top_z_distance": "0.20",
|
||||
"support_line_width": "0.84",
|
||||
"tree_support_tip_diameter": "0.84",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.84",
|
||||
"top_shell_layers": "4",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"internal_solid_infill_line_width": "0.84",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -1,141 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"setting_id": "ShJTVnJ492No1j2j",
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"reduce_crossing_wall": "1",
|
||||
"max_travel_detour_distance": "100%",
|
||||
"layer_height": "0.20",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_flow": "1.2",
|
||||
"internal_bridge_flow": "1.2",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"internal_bridge_speed": "200",
|
||||
"brim_type": "auto_brim",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "40000",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
"enable_arc_fitting": "0",
|
||||
"exclude_object": "1",
|
||||
"outer_wall_line_width": "0.4",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"line_width": "0.4",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "10%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"internal_solid_infill_acceleration": "50%",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"initial_solid_infill_acceleration": "3000",
|
||||
"travel_acceleration": "40000",
|
||||
"outer_wall_line_width": "0.44",
|
||||
"line_width": "0.44",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"outer_wall_jerk": "5",
|
||||
"inner_wall_jerk": "5",
|
||||
"infill_jerk": "5",
|
||||
"top_surface_jerk": "5",
|
||||
"initial_layer_jerk": "5",
|
||||
"travel_jerk": "5",
|
||||
"initial_layer_line_width": "0.42",
|
||||
"initial_layer_print_height": "0.25",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "0.45",
|
||||
"infill_wall_overlap": "15%",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"reduce_infill_retraction": "1",
|
||||
"filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "20",
|
||||
"inner_wall_line_width": "0.4",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"sparse_infill_line_width": "0.44",
|
||||
"infill_wall_overlap": "20",
|
||||
"ironing_speed": "100",
|
||||
"inner_wall_line_width": "0.44",
|
||||
"wall_loops": "2",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "0.8",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "0.45",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "tree(auto)",
|
||||
"support_style": "default",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.235",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "0.45",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "5",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.2",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "grid",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "3.5",
|
||||
"support_speed": "100",
|
||||
"support_threshold_angle": "20",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "40",
|
||||
"tree_support_wall_count": "0",
|
||||
"detect_thin_wall": "1",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"top_surface_line_width": "0.38",
|
||||
"support_top_z_distance": "0.20",
|
||||
"support_line_width": "0.44",
|
||||
"tree_support_tip_diameter": "0.44",
|
||||
"support_speed": "60",
|
||||
"top_surface_line_width": "0.44",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"initial_layer_speed": "55",
|
||||
"initial_layer_infill_speed": "105",
|
||||
"initial_layer_travel_speed": "60%",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "25%",
|
||||
"travel_speed": "1000",
|
||||
"enable_prime_tower": "1",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0",
|
||||
"bridge_acceleration": "50%",
|
||||
"seam_gap": "10%",
|
||||
"precise_outer_wall": "1",
|
||||
"wall_generator": "classic",
|
||||
"gcode_label_objects": "1",
|
||||
"slow_down_layers": "3",
|
||||
"top_solid_infill_flow_ratio": "0.9",
|
||||
"only_one_wall_top": "1",
|
||||
"wall_loop_direction": "clockwise",
|
||||
"top_bottom_infill_wall_overlap": "25%",
|
||||
"filter_out_gap_fill": "0",
|
||||
"detect_narrow_internal_solid_infill": "1",
|
||||
"thick_bridges": "1",
|
||||
"bridge_angle": "0",
|
||||
"internal_solid_infill_line_width": "0.44",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.25mm Quality @Sovol Zero 1.0 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "JUmnFOoEMJrbWCN9",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.25",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"internal_bridge_speed": "200",
|
||||
"default_acceleration": "40000",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "1.05",
|
||||
"line_width": "1.05",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.45",
|
||||
"initial_layer_line_width": "1.5",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "1.05",
|
||||
"infill_wall_overlap": "18",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"filename_format": "{input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "20",
|
||||
"inner_wall_line_width": "1.1",
|
||||
"wall_loops": "3",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "0.8",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "1.05",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "tree(auto)",
|
||||
"support_style": "snug",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.25",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "1.05",
|
||||
"tree_support_tip_diameter": "1.05",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "5",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.2",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "grid",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "3.5",
|
||||
"support_speed": "100",
|
||||
"support_threshold_angle": "50",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "40",
|
||||
"top_surface_line_width": "1.05",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "oFrWcSxmad1b6sD4",
|
||||
"name": "0.25mm SPEEDBENCHY @Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.25",
|
||||
"initial_layer_print_height": "0.25",
|
||||
"line_width": "0.5",
|
||||
"initial_layer_line_width": "0.5",
|
||||
"outer_wall_line_width": "0.5",
|
||||
"inner_wall_line_width": "0.5",
|
||||
"top_surface_line_width": "0.55",
|
||||
"internal_solid_infill_line_width": "0.55",
|
||||
"sparse_infill_line_width": "0.55",
|
||||
"support_line_width": "0.5",
|
||||
"tree_support_tip_diameter": "0.5",
|
||||
"wall_loops": "2",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"sparse_infill_density": "10%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"bottom_solid_infill_flow_ratio": "1.2",
|
||||
"top_solid_infill_flow_ratio": "1.4",
|
||||
"bridge_flow": "1",
|
||||
"internal_bridge_flow": "1",
|
||||
"bridge_speed": "250",
|
||||
"internal_bridge_speed": "250",
|
||||
"bridge_acceleration": "100%",
|
||||
"thick_bridges": "0",
|
||||
"thick_internal_bridges": "0",
|
||||
"brim_type": "outer_only",
|
||||
"brim_width": "1",
|
||||
"brim_object_gap": "0",
|
||||
"filter_out_gap_fill": "13",
|
||||
"gap_fill_target": "nowhere",
|
||||
"min_width_top_surface": "200%",
|
||||
"minimum_sparse_infill_area": "0",
|
||||
"infill_direction": "0",
|
||||
"solid_infill_direction": "0",
|
||||
"infill_wall_overlap": "15%",
|
||||
"reduce_crossing_wall": "0",
|
||||
"skirt_loops": "0",
|
||||
"only_one_wall_top": "1",
|
||||
"slow_down_layers": "1",
|
||||
"wall_direction": "cw",
|
||||
"initial_layer_speed": "300",
|
||||
"initial_layer_infill_speed": "300",
|
||||
"initial_layer_travel_speed": "100%",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "100%",
|
||||
"internal_solid_infill_speed": "400",
|
||||
"top_surface_speed": "300",
|
||||
"gap_infill_speed": "350",
|
||||
"sparse_infill_speed": "500",
|
||||
"support_speed": "100",
|
||||
"travel_speed": "1200",
|
||||
"default_acceleration": "40000",
|
||||
"initial_layer_acceleration": "20000",
|
||||
"outer_wall_acceleration": "40000",
|
||||
"inner_wall_acceleration": "40000",
|
||||
"top_surface_acceleration": "20000",
|
||||
"internal_solid_infill_acceleration": "100%",
|
||||
"travel_acceleration": "40000",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"outer_wall_jerk": "20",
|
||||
"inner_wall_jerk": "20",
|
||||
"infill_jerk": "20",
|
||||
"top_surface_jerk": "20",
|
||||
"initial_layer_jerk": "20",
|
||||
"travel_jerk": "20",
|
||||
"overhang_1_4_speed": "160",
|
||||
"overhang_2_4_speed": "100",
|
||||
"overhang_3_4_speed": "60",
|
||||
"overhang_4_4_speed": "40",
|
||||
"support_top_z_distance": "0.235",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.28mm Fast @Sovol Zero 0.4 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "1VoML2LGDk4TJgLI",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.28",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.48",
|
||||
"line_width": "0.48",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.28",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"sparse_infill_line_width": "0.48",
|
||||
"inner_wall_line_width": "0.48",
|
||||
"internal_solid_infill_line_width": "0.48",
|
||||
"support_top_z_distance": "0.30",
|
||||
"support_line_width": "0.48",
|
||||
"tree_support_tip_diameter": "0.48",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "0.48",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "lTAs2USEP8D749K7",
|
||||
"name": "0.30mm Standard @Sovol Zero 0.6 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.30",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.66",
|
||||
"line_width": "0.66",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.36",
|
||||
"initial_layer_line_width": "0.9",
|
||||
"sparse_infill_line_width": "0.66",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.66",
|
||||
"wall_loops": "2",
|
||||
"support_top_z_distance": "0.30",
|
||||
"support_line_width": "0.66",
|
||||
"tree_support_tip_diameter": "0.66",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.66",
|
||||
"top_shell_layers": "4",
|
||||
"internal_solid_infill_line_width": "0.66",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.40mm Standard @Sovol Zero 0.8 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "8x4CsuqroC9HOdAN",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.40",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.88",
|
||||
"line_width": "0.88",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.48",
|
||||
"initial_layer_line_width": "1.2",
|
||||
"sparse_infill_line_width": "0.88",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.88",
|
||||
"wall_loops": "2",
|
||||
"support_top_z_distance": "0.40",
|
||||
"support_line_width": "0.88",
|
||||
"tree_support_tip_diameter": "0.88",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.88",
|
||||
"top_shell_layers": "4",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"internal_solid_infill_line_width": "0.88",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.42mm Fast @Sovol Zero 0.6 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "illqJAnGiA2pY0hw",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.42",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.72",
|
||||
"line_width": "0.72",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.42",
|
||||
"initial_layer_line_width": "0.9",
|
||||
"sparse_infill_line_width": "0.72",
|
||||
"inner_wall_line_width": "0.72",
|
||||
"internal_solid_infill_line_width": "0.72",
|
||||
"support_top_z_distance": "0.45",
|
||||
"support_line_width": "0.72",
|
||||
"tree_support_tip_diameter": "0.72",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "0.72",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.50mm Standard @Sovol Zero 1.0 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "E5K55O4RkMyYCAlt",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.50",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "45",
|
||||
"internal_bridge_speed": "200",
|
||||
"default_acceleration": "22000",
|
||||
"outer_wall_acceleration": "16000",
|
||||
"top_surface_acceleration": "16000",
|
||||
"outer_wall_line_width": "1.1",
|
||||
"line_width": "1.1",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "22000",
|
||||
"initial_layer_print_height": "0.60",
|
||||
"initial_layer_line_width": "1.5",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "1.1",
|
||||
"infill_wall_overlap": "20",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"filename_format": "{input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "20",
|
||||
"inner_wall_line_width": "1.1",
|
||||
"wall_loops": "2",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "0.8",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "1.1",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "tree(auto)",
|
||||
"support_style": "snug",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.50",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "1.1",
|
||||
"tree_support_tip_diameter": "1.1",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "5",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.2",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "grid",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "3.5",
|
||||
"support_speed": "60",
|
||||
"support_threshold_angle": "50",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "40",
|
||||
"top_surface_line_width": "1.1",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"outer_wall_speed": "30",
|
||||
"inner_wall_speed": "45",
|
||||
"small_perimeter_speed": "45",
|
||||
"internal_solid_infill_speed": "45",
|
||||
"top_surface_speed": "35",
|
||||
"gap_infill_speed": "35",
|
||||
"sparse_infill_speed": "70",
|
||||
"travel_acceleration": "38000",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.56mm Fast @Sovol Zero 0.8 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "g9PPRM4FLMwjMUfy",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.56",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"default_acceleration": "28000",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.96",
|
||||
"line_width": "0.96",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.56",
|
||||
"initial_layer_line_width": "1.2",
|
||||
"sparse_infill_line_width": "0.96",
|
||||
"inner_wall_line_width": "0.96",
|
||||
"internal_solid_infill_line_width": "0.96",
|
||||
"support_top_z_distance": "0.60",
|
||||
"support_line_width": "0.96",
|
||||
"tree_support_tip_diameter": "0.96",
|
||||
"top_surface_line_width": "0.96",
|
||||
"top_shell_layers": "4",
|
||||
"outer_wall_speed": "35",
|
||||
"inner_wall_speed": "55",
|
||||
"small_perimeter_speed": "60",
|
||||
"internal_solid_infill_speed": "55",
|
||||
"top_surface_speed": "40",
|
||||
"gap_infill_speed": "40",
|
||||
"sparse_infill_speed": "80",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.70mm Fast @Sovol Zero 1.0 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "fW5KJBVndgQE868q",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.70",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "1.2",
|
||||
"line_width": "1.2",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.70",
|
||||
"initial_layer_line_width": "1.5",
|
||||
"sparse_infill_line_width": "1.2",
|
||||
"inner_wall_line_width": "1.2",
|
||||
"internal_solid_infill_line_width": "1.2",
|
||||
"support_top_z_distance": "0.75",
|
||||
"support_line_width": "1.2",
|
||||
"tree_support_tip_diameter": "1.2",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "1.2",
|
||||
"top_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_zero",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"reduce_crossing_wall": "1",
|
||||
"max_travel_detour_distance": "10",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bridge_flow": "1.2",
|
||||
"internal_bridge_flow": "1.2",
|
||||
"brim_type": "auto_brim",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0",
|
||||
"print_sequence": "by layer",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
"enable_arc_fitting": "0",
|
||||
"exclude_object": "1",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"internal_solid_infill_acceleration": "50%",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "40000",
|
||||
"outer_wall_jerk": "5",
|
||||
"inner_wall_jerk": "5",
|
||||
"infill_jerk": "5",
|
||||
"top_surface_jerk": "5",
|
||||
"initial_layer_jerk": "5",
|
||||
"travel_jerk": "5",
|
||||
"tree_support_wall_count": "0",
|
||||
"reduce_infill_retraction": "1",
|
||||
"detect_thin_wall": "1",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"initial_layer_speed": "55",
|
||||
"initial_layer_infill_speed": "105",
|
||||
"initial_layer_travel_speed": "60%",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "25%",
|
||||
"travel_speed": "1000",
|
||||
"enable_prime_tower": "0",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0",
|
||||
"bridge_acceleration": "50%",
|
||||
"seam_gap": "10%",
|
||||
"precise_outer_wall": "1",
|
||||
"wall_generator": "classic",
|
||||
"gcode_label_objects": "1",
|
||||
"slow_down_layers": "3",
|
||||
"top_solid_infill_flow_ratio": "0.9",
|
||||
"only_one_wall_top": "1",
|
||||
"top_bottom_infill_wall_overlap": "25%",
|
||||
"filter_out_gap_fill": "0",
|
||||
"detect_narrow_internal_solid_infill": "1",
|
||||
"thick_bridges": "1",
|
||||
"bridge_angle": "0",
|
||||
"initial_layer_line_width": "150%",
|
||||
"default_acceleration": "40000",
|
||||
"compatible_printers": [],
|
||||
"internal_bridge_speed": "150",
|
||||
"filename_format": "{input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{layer_height}_{print_time}.gcode"
|
||||
}
|
||||
@@ -1,12 +1,60 @@
|
||||
{
|
||||
"name": "Wanhao",
|
||||
"version": "02.04.00.02",
|
||||
"version": "02.04.00.03",
|
||||
"force_update": "0",
|
||||
"description": "Wanhao configurations",
|
||||
"machine_model_list": [
|
||||
{
|
||||
"name": "Wanhao D12-300",
|
||||
"sub_path": "machine/Wanhao D12-300.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1 BLTouch kit.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK2",
|
||||
"sub_path": "machine/Wanhao D9-300 MK2.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK3",
|
||||
"sub_path": "machine/Wanhao D9-300 MK3.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1 BLTouch kit.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK2",
|
||||
"sub_path": "machine/Wanhao D9-400 MK2.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK3",
|
||||
"sub_path": "machine/Wanhao D9-400 MK3.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1 BLTouch kit.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK2",
|
||||
"sub_path": "machine/Wanhao D9-500 MK2.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK3",
|
||||
"sub_path": "machine/Wanhao D9-500 MK3.json"
|
||||
}
|
||||
],
|
||||
"process_list": [
|
||||
@@ -33,6 +81,38 @@
|
||||
{
|
||||
"name": "0.24mm Draft @Wanhao D12-300",
|
||||
"sub_path": "process/0.24mm Draft @Wanhao D12-300.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_wanhao_d9_common",
|
||||
"sub_path": "process/fdm_process_wanhao_d9_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Fine @Wanhao D9",
|
||||
"sub_path": "process/0.12mm Fine @Wanhao D9.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Wanhao D9",
|
||||
"sub_path": "process/0.20mm Standard @Wanhao D9.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Draft @Wanhao D9",
|
||||
"sub_path": "process/0.28mm Draft @Wanhao D9.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_wanhao_d9_mk1_common",
|
||||
"sub_path": "process/fdm_process_wanhao_d9_mk1_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Fine @Wanhao D9 MK1",
|
||||
"sub_path": "process/0.12mm Fine @Wanhao D9 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Wanhao D9 MK1",
|
||||
"sub_path": "process/0.20mm Standard @Wanhao D9 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Draft @Wanhao D9 MK1",
|
||||
"sub_path": "process/0.28mm Draft @Wanhao D9 MK1.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [],
|
||||
@@ -48,6 +128,62 @@
|
||||
{
|
||||
"name": "Wanhao D12-300 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D12-300 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_wanhao_d9_common",
|
||||
"sub_path": "machine/fdm_wanhao_d9_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK2 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK3 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK2 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK3 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK2 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK3 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK3 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_wanhao_d9_mk1_common",
|
||||
"sub_path": "machine/fdm_wanhao_d9_mk1_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1 0.4 nozzle.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "MXNRpMDaVXj2xUx0",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK1",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9 MK1"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "rq6cPs92KgrUyZrn",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK1 BLTouch kit",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit",
|
||||
"model_id": "Wanhao-D9-300-MK1u2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK1",
|
||||
"model_id": "Wanhao-D9-300-MK1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "w3Cin9es1Jfx0dmR",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK2",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK2",
|
||||
"model_id": "Wanhao-D9-300-MK2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "acFQWZqlt4QSgBPv",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK3",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK3",
|
||||
"model_id": "Wanhao-D9-300-MK3",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "DGSNE3AbmlBBG5PY",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK1",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9 MK1"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "WcKY7v24ewtzPfnU",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK1 BLTouch kit",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit",
|
||||
"model_id": "Wanhao-D9-400-MK1u2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK1",
|
||||
"model_id": "Wanhao-D9-400-MK1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "jn1FEJFeN7S2gEbD",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK2",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK2",
|
||||
"model_id": "Wanhao-D9-400-MK2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "2kFyH1E3tqMWtDmG",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK3",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK3",
|
||||
"model_id": "Wanhao-D9-400-MK3",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK1 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "nj0TfnDKHb4wFX1R",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK1",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9 MK1"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "Hmrnlh6pJzdO2dIJ",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK1 BLTouch kit",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit",
|
||||
"model_id": "Wanhao-D9-500-MK1u2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK1",
|
||||
"model_id": "Wanhao-D9-500-MK1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "g2GSmhWJLFDwqzFI",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK2",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK2",
|
||||
"model_id": "Wanhao-D9-500-MK2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK3 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "F7l90Rgr8Ni0sQva",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK3",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK3",
|
||||
"model_id": "Wanhao-D9-500-MK3",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_wanhao_d9_common",
|
||||
"inherits": "fdm_wanhao_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "marlin2",
|
||||
"use_relative_e_distances": "1",
|
||||
"emit_machine_limits_to_gcode": "0",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printer_variant": "0.4",
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"300",
|
||||
"300"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"300",
|
||||
"300"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"5",
|
||||
"5"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"25",
|
||||
"25"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"100"
|
||||
],
|
||||
"machine_max_acceleration_e": [
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"1000",
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"1000",
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"800",
|
||||
"800"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.4",
|
||||
"0.4"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"1",
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"2.0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"25"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"25"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"wipe": [
|
||||
"0"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"machine_start_gcode": "; Wanhao Duplicator 9 start G-code, for the Marlin 2.1 firmwares at github.com/Le-Syl21/WANHAO-Duplicator-9\nG21 ; millimetres\nG90 ; absolute coordinates\nM83 ; relative extrusion\nM140 S[bed_temperature_initial_layer_single] ; heat the bed\nM104 S150 ; warm the nozzle without letting it ooze\nG91 ; a print stopped by hand can leave the nozzle down on the bed\nG1 Z10 F300 ; so raise it before homing: a BLTouch needs 10 mm to deploy\nG90\nM280 P0 S160 ; BLTouch: clear an alarm and stow the pin\nG28 ; home all axes (this turns bed levelling off)\nM420 S1 ; turn the bed mesh saved from the screen back on\nG1 Z10 F300\nM104 S[nozzle_temperature_initial_layer] ; start the nozzle now, the bed is still heating\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed\nM109 S[nozzle_temperature_initial_layer] ; and confirm the nozzle\nG92 E0\nG1 X15 Y20 Z0.3 F3000 ; start of the priming line\nG1 Y140 E9.0 F1200 ; draw a line of filament\nG1 X15.5 F3000\nG1 Y20 E9.0 F1200 ; and back, next to it\nG92 E0\nG1 X22 F6000 ; wipe sideways to snap the string\nG1 Z2 F300 ; lift, so the line does not stick to the nozzle",
|
||||
"machine_end_gcode": "; Wanhao Duplicator 9 end G-code\nM104 S0 ; nozzle heater off\nM140 S0 ; bed heater off\nM107 ; fan off\nG91 ; relative moves\nG1 E-2 F1500 ; release the pressure in the nozzle\nG1 Z10 F300 ; lift the nozzle\nG90 ; absolute moves\nG1 X5 Y{print_bed_max[1] - 10} F3000 ; bring the bed to the front\nM84 X Y E ; motors off, Z keeps its position",
|
||||
"layer_change_gcode": "G92 E0",
|
||||
"machine_pause_gcode": "M600",
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_wanhao_d9_mk1_common",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"machine_start_gcode": "; Wanhao Duplicator 9 start G-code, for the Marlin 2.1 firmwares at github.com/Le-Syl21/WANHAO-Duplicator-9\nG21 ; millimetres\nG90 ; absolute coordinates\nM83 ; relative extrusion\nM140 S[bed_temperature_initial_layer_single] ; heat the bed\nM104 S150 ; warm the nozzle without letting it ooze\nG91 ; a print stopped by hand can leave the nozzle down on the bed\nG1 Z10 F300 ; clear the bed before homing\nG90\nG28 ; home all axes (this turns bed levelling off)\nM420 S1 ; turn the bed mesh saved from the screen back on\nG1 Z10 F300\nM104 S[nozzle_temperature_initial_layer] ; start the nozzle now, the bed is still heating\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed\nM109 S[nozzle_temperature_initial_layer] ; and confirm the nozzle\nG92 E0\nG1 X15 Y20 Z0.3 F3000 ; start of the priming line\nG1 Y140 E9.0 F1200 ; draw a line of filament\nG1 X15.5 F3000\nG1 Y20 E9.0 F1200 ; and back, next to it\nG92 E0\nG1 X22 F6000 ; wipe sideways to snap the string\nG1 Z2 F300 ; lift, so the line does not stick to the nozzle",
|
||||
"machine_max_acceleration_x": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_e": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"500",
|
||||
"500"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.12mm Fine @Wanhao D9 MK1",
|
||||
"inherits": "fdm_process_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "EClNN5UDWbLACTuz",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"initial_layer_print_height": "0.14",
|
||||
"top_shell_layers": "4",
|
||||
"bottom_shell_layers": "4",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.12mm Fine @Wanhao D9",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "0hvsKsPO55TlduZR",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"initial_layer_print_height": "0.14",
|
||||
"top_shell_layers": "4",
|
||||
"bottom_shell_layers": "4",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"Wanhao D9-500 MK3 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Wanhao D9 MK1",
|
||||
"inherits": "fdm_process_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "CXNOj3tPeTUXx81B",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.20",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Wanhao D9",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "UVXxknNxJswqaURQ",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.20",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"Wanhao D9-500 MK3 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.28mm Draft @Wanhao D9 MK1",
|
||||
"inherits": "fdm_process_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "omfIWwVnQVVxPrtb",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.28",
|
||||
"initial_layer_print_height": "0.34",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.28mm Draft @Wanhao D9",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "FEJqq1ylXWqaBPR6",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.28",
|
||||
"initial_layer_print_height": "0.34",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"Wanhao D9-500 MK3 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_wanhao_d9_common",
|
||||
"inherits": "fdm_process_wanhao_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"line_width": "0.4",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"wall_loops": "2",
|
||||
"infill_wall_overlap": "15%",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "gyroid",
|
||||
"outer_wall_speed": "25",
|
||||
"inner_wall_speed": "40",
|
||||
"sparse_infill_speed": "50",
|
||||
"internal_solid_infill_speed": "50",
|
||||
"top_surface_speed": "40",
|
||||
"gap_infill_speed": "40",
|
||||
"bridge_speed": "50",
|
||||
"support_speed": "35",
|
||||
"initial_layer_speed": "25",
|
||||
"initial_layer_infill_speed": "25",
|
||||
"travel_speed": "100",
|
||||
"default_acceleration": "1000",
|
||||
"outer_wall_acceleration": "1000",
|
||||
"inner_wall_acceleration": "1000",
|
||||
"top_surface_acceleration": "1000",
|
||||
"sparse_infill_acceleration": "1000",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"bridge_acceleration": "1000",
|
||||
"travel_acceleration": "1000",
|
||||
"default_jerk": "0",
|
||||
"skirt_loops": "2",
|
||||
"skirt_distance": "4",
|
||||
"brim_type": "no_brim",
|
||||
"enable_support": "0",
|
||||
"enable_arc_fitting": "0"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_wanhao_d9_mk1_common",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"default_acceleration": "500",
|
||||
"outer_wall_acceleration": "500",
|
||||
"inner_wall_acceleration": "500",
|
||||
"top_surface_acceleration": "500",
|
||||
"sparse_infill_acceleration": "500",
|
||||
"initial_layer_acceleration": "500",
|
||||
"bridge_acceleration": "500",
|
||||
"travel_acceleration": "500"
|
||||
}
|
||||
@@ -575,7 +575,7 @@ function CapabilityCanRun(plugin, capability) {
|
||||
}
|
||||
|
||||
function IsPluginChecked(plugin) {
|
||||
return plugin.is_loaded;
|
||||
return GetStatus(plugin) === "Activated";
|
||||
}
|
||||
|
||||
function HasMixedCapabilityState(plugin) {
|
||||
@@ -1347,8 +1347,6 @@ 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,11 +424,6 @@ 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;
|
||||
@@ -685,11 +680,6 @@ 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);
|
||||
|
||||
@@ -30,7 +30,7 @@ var USER_MODE = "simple";
|
||||
var MODE_RANK = { simple: 0, advanced: 1, expert: 2, develop: 3 };
|
||||
|
||||
// Search ranking weights: every contiguous match must outrank every fuzzy one regardless of field,
|
||||
// and title must outrank group, which outranks source.
|
||||
// and title must outrank group/category, which outranks source.
|
||||
var SCORE_CONTIGUOUS = 100000;
|
||||
var SCORE_TITLE = 2000;
|
||||
var SCORE_GROUP = 1000;
|
||||
@@ -118,6 +118,18 @@ function sourceNorm(a) {
|
||||
a._sn = NormText(a.source || "", false);
|
||||
return a._sn;
|
||||
}
|
||||
function pluginCategoryNorm(a) {
|
||||
if (a._pcn === undefined)
|
||||
a._pcn = a.kind === "plugin" ? NormText(T("sd_plugins", "Plugins"), false) : "";
|
||||
return a._pcn;
|
||||
}
|
||||
// Plugin type is searchable metadata, so typing "plugin" can find runnable plugin actions even
|
||||
// when neither their capability nor plugin name contains that word. Keep both category forms.
|
||||
function pluginTypeNorm(a) {
|
||||
if (a._pn === undefined)
|
||||
a._pn = a.kind === "plugin" ? NormText("plugin plugins", false) : "";
|
||||
return a._pn;
|
||||
}
|
||||
// Search-only alias for the descriptive name when the title differs (e.g. "Reverse on even" vs
|
||||
// "Overhang reversal"). Never rendered, so no highlight ranges.
|
||||
function fullNorm(a) {
|
||||
@@ -152,7 +164,7 @@ function fieldMatchScore(norm, needle, wwRe) {
|
||||
|
||||
// Split a query into normalized (folded+lowercased) whitespace-separated tokens. Empty for a blank
|
||||
// query. These drive the multi-token path: every token must match some field, but different tokens
|
||||
// may match different fields (the title, the group, or the source breadcrumb).
|
||||
// may match different fields (the title, group, source breadcrumb, or plugin kind).
|
||||
function queryTokens(query) {
|
||||
var norm = NormText(String(query || "").trim(), false);
|
||||
return norm ? norm.split(/\s+/).filter(Boolean) : [];
|
||||
@@ -170,14 +182,19 @@ function tokenMatch(a, token, wwRe) {
|
||||
var g = fieldMatchScore(groupNorm(a), token, wwRe);
|
||||
var s = fieldMatchScore(sourceNorm(a), token, wwRe);
|
||||
var f = fieldMatchScore(fullNorm(a), token, wwRe);
|
||||
if (!t && !g && !s && !f) return null;
|
||||
var p = fieldMatchScore(pluginCategoryNorm(a), token, wwRe);
|
||||
var typeMatch = fieldMatchScore(pluginTypeNorm(a), token, wwRe);
|
||||
if (!t && !g && !s && !f && !p && !typeMatch) return null;
|
||||
var score = Math.max(
|
||||
t ? (t.contiguous ? SCORE_CONTIGUOUS : 0) + SCORE_TITLE + t.score : -Infinity,
|
||||
g ? (g.contiguous ? SCORE_CONTIGUOUS : 0) + SCORE_GROUP + g.score : -Infinity,
|
||||
s ? (s.contiguous ? SCORE_CONTIGUOUS : 0) + s.score : -Infinity,
|
||||
f ? (f.contiguous ? SCORE_CONTIGUOUS : 0) + f.score : -Infinity
|
||||
f ? (f.contiguous ? SCORE_CONTIGUOUS : 0) + f.score : -Infinity,
|
||||
p ? (p.contiguous ? SCORE_CONTIGUOUS : 0) + SCORE_GROUP + p.score : -Infinity,
|
||||
typeMatch ? (typeMatch.contiguous ? SCORE_CONTIGUOUS : 0) + SCORE_GROUP + typeMatch.score : -Infinity
|
||||
);
|
||||
return { score: score, title: t ? t.ranges : null, group: g ? g.ranges : null, source: s ? s.ranges : null };
|
||||
return { score: score, title: t ? t.ranges : null, group: g ? g.ranges : null, source: s ? s.ranges : null,
|
||||
plugin: p ? p.ranges : null };
|
||||
}
|
||||
|
||||
// Merge per-field token ranges into sorted, coalesced ranges for highlighting. Overlapping or adjacent
|
||||
@@ -201,8 +218,8 @@ function mergeRanges(ranges) {
|
||||
}
|
||||
|
||||
// Combine per-field scores into one value, or null when nothing matched.
|
||||
// Ranking: contiguous > fuzzy, then title > group > source/full alias, then start/gaps.
|
||||
function scoreFields(t, g, s, f) {
|
||||
// Ranking: contiguous > fuzzy, then title > group/category > source/full alias, then start/gaps.
|
||||
function scoreFields(t, g, s, f, p, typeMatch) {
|
||||
var best = null;
|
||||
function consider(m, weight) {
|
||||
if (!m) return;
|
||||
@@ -213,6 +230,8 @@ function scoreFields(t, g, s, f) {
|
||||
consider(g, SCORE_GROUP);
|
||||
consider(s, 0);
|
||||
consider(f, 0);
|
||||
consider(p, SCORE_GROUP);
|
||||
consider(typeMatch, SCORE_GROUP);
|
||||
return best;
|
||||
}
|
||||
|
||||
@@ -226,7 +245,8 @@ function scoreFields(t, g, s, f) {
|
||||
// - tokens: every whitespace-separated word must match SOME field, but different words may match
|
||||
// different fields. This is what lets "speed acceleration inner" find "Inner wall" whose path is
|
||||
// "Process : Speed : Acceleration" (title + source breadcrumb together).
|
||||
// full_label is searchable too but never highlighted, since it is not rendered.
|
||||
// full_label and canonical plugin kind are searchable aliases. The visible category is also searchable
|
||||
// so its own match can be highlighted in plugin rows.
|
||||
// A phrase match always outranks a distributed token match.
|
||||
function searchActions(actions, query) {
|
||||
var q = (query || "").trim();
|
||||
@@ -251,26 +271,31 @@ function searchActions(actions, query) {
|
||||
var g = fieldMatchScore(groupNorm(a), searchNeedle, wwRe);
|
||||
var s = fieldMatchScore(sourceNorm(a), searchNeedle, wwRe);
|
||||
var f = fieldMatchScore(fullNorm(a), searchNeedle, wwRe);
|
||||
var phrase = scoreFields(t, g, s, f);
|
||||
var p = fieldMatchScore(pluginCategoryNorm(a), searchNeedle, wwRe);
|
||||
var typeMatch = fieldMatchScore(pluginTypeNorm(a), searchNeedle, wwRe);
|
||||
var phrase = scoreFields(t, g, s, f, p, typeMatch);
|
||||
var score, ranges;
|
||||
if (phrase !== null) {
|
||||
score = phrase + SCORE_PHRASE;
|
||||
ranges = { title: t ? t.ranges : null, group: g ? g.ranges : null, source: s ? s.ranges : null };
|
||||
ranges = { title: t ? t.ranges : null, group: g ? g.ranges : null, source: s ? s.ranges : null,
|
||||
plugin: p ? p.ranges : null };
|
||||
} else {
|
||||
// Require every token; a token that matches nothing drops the action immediately. Ranges
|
||||
// from all matching tokens are merged per field so each matched word highlights.
|
||||
var sum = 0, titleR = null, groupR = null, sourceR = null, all = true;
|
||||
for (var k = 0; k < searchTokens.length; k++) {
|
||||
var m = tokenMatch(a, searchTokens[k], searchTokenRes[k]);
|
||||
var sum = 0, titleR = null, groupR = null, sourceR = null, pluginR = null, all = true;
|
||||
for (var tokenIndex = 0; tokenIndex < searchTokens.length; tokenIndex++) {
|
||||
var m = tokenMatch(a, searchTokens[tokenIndex], searchTokenRes[tokenIndex]);
|
||||
if (!m) { all = false; break; }
|
||||
sum += m.score;
|
||||
if (m.title) (titleR || (titleR = [])).push(m.title);
|
||||
if (m.group) (groupR || (groupR = [])).push(m.group);
|
||||
if (m.source) (sourceR || (sourceR = [])).push(m.source);
|
||||
if (m.plugin) (pluginR || (pluginR = [])).push(m.plugin);
|
||||
}
|
||||
if (!all) continue;
|
||||
score = sum;
|
||||
ranges = { title: mergeRanges(titleR), group: mergeRanges(groupR), source: mergeRanges(sourceR) };
|
||||
ranges = { title: mergeRanges(titleR), group: mergeRanges(groupR), source: mergeRanges(sourceR),
|
||||
plugin: mergeRanges(pluginR) };
|
||||
}
|
||||
// Ranges are per-field against the ACTUAL text drawn: title for the row-name, and group (or
|
||||
// source when group is empty) for the eyebrow - so highlight offsets stay aligned to the label.
|
||||
@@ -278,6 +303,7 @@ function searchActions(actions, query) {
|
||||
title: ranges.title,
|
||||
group: ranges.group,
|
||||
source: ranges.source,
|
||||
plugin: ranges.plugin,
|
||||
useEyebrowGroup: !!(a.group)
|
||||
};
|
||||
scored.push({ a: a, s: score });
|
||||
@@ -390,7 +416,7 @@ function favDigitFromEvent(e) {
|
||||
|
||||
function resultCountText(total, shown, query) {
|
||||
return (query || "").trim() ?
|
||||
T("sd_result_count", "Showing %s of %s actions", shown, total) :
|
||||
T("sd_result_count", "Showing %s actions", shown) :
|
||||
T("sd_result_count_all", "%s actions", total);
|
||||
}
|
||||
|
||||
@@ -461,6 +487,12 @@ function actionCategory(a) {
|
||||
return cat || T("sd_other", "Other");
|
||||
}
|
||||
|
||||
function actionEyebrow(a, typedQuery, isRecent) {
|
||||
if (a && a.kind === "plugin" && (String(typedQuery || "").trim() || isRecent))
|
||||
return T("sd_plugins", "Plugins");
|
||||
return (a && (a.group || a.source)) || "";
|
||||
}
|
||||
|
||||
// Stable-bucket actions by category, then order the groups alphabetically. Within a group the incoming
|
||||
// (frecency) order is kept. Pure so the node-vm test can exercise grouping.
|
||||
function groupActions(list) {
|
||||
@@ -711,7 +743,7 @@ window.HandleStudio = function (payload) {
|
||||
builtKey = "";
|
||||
if (qEl) {
|
||||
qEl.value = "";
|
||||
qEl.placeholder = T("sd_search_n", "Search %s actions", ACTIONS.length);
|
||||
qEl.placeholder = T("sd_search", "Search actions");
|
||||
syncClearButton();
|
||||
}
|
||||
render({ resize: true, resetScroll: true });
|
||||
@@ -931,12 +963,14 @@ function beginRow(item, i, mono, ariaLabel) {
|
||||
function renderActionRow(a, i) {
|
||||
var on = FAVS.indexOf(a.id) !== -1;
|
||||
var shell = beginRow(a, i, false, actionLabel(a, ACTIONS));
|
||||
var mi = matchIndex[a.id];
|
||||
// The eyebrow shows group when present, else source. Highlight with the ranges of whichever of the
|
||||
// two the eyebrow actually renders (so a "Recent Projects"/"Object" header match lights up like a
|
||||
// setting path does - the offsets are computed against the same string we are marking).
|
||||
var eyebrow = a.group || a.source;
|
||||
var eyebrowMatch = mi ? (mi.useEyebrowGroup ? mi.group : mi.source) : null;
|
||||
var typedQuery = String(query || "").trim();
|
||||
var isRecent = !typedQuery && i < RECENTS.length && RECENTS[i].id === a.id;
|
||||
var mi = typedQuery ? matchIndex[a.id] : null;
|
||||
// Plugin search/recent rows show their category; other rows show their group or source breadcrumb.
|
||||
// Use match ranges from the visible field so category and breadcrumb highlights stay aligned.
|
||||
var showPluginCategory = a.kind === "plugin" && (typedQuery || isRecent);
|
||||
var eyebrow = actionEyebrow(a, query, isRecent);
|
||||
var eyebrowMatch = mi ? (showPluginCategory ? mi.plugin : (mi.useEyebrowGroup ? mi.group : mi.source)) : null;
|
||||
shell.left.insertBefore(markedText("row-eyebrow", eyebrow, eyebrowMatch), shell.line);
|
||||
shell.line.appendChild(markedText("row-name", a.title, mi ? mi.title : null));
|
||||
var badge = modeBadge(a, USER_MODE);
|
||||
@@ -1376,7 +1410,7 @@ function exitPhase() {
|
||||
// It survives a second-phase exit (which never goes through exitPhase from the commands view),
|
||||
// so without a reset the cached empty-query key would skip the rebuild and leave stale content.
|
||||
builtKey = "";
|
||||
qEl.placeholder = T("sd_search_n", "Search %s actions", ACTIONS.length);
|
||||
qEl.placeholder = T("sd_search", "Search actions");
|
||||
render({ resize: true, resetScroll: true });
|
||||
qEl.focus();
|
||||
}
|
||||
|
||||
@@ -82,6 +82,20 @@ assert.equal(ctx.searchActions(pool, "layer").length >= 2, true,
|
||||
assert.equal(ctx.searchActions(pool, "surface")[0].id, "c2",
|
||||
"a later-but-precise match still ranks by relevance, not by pool type");
|
||||
|
||||
const pluginPool = [
|
||||
{ id: "plugin-action", title: "Optimize G-code", source: "Gcode Optimizer", group: "", kind: "plugin" },
|
||||
{ id: "command-action", title: "Open Preferences", source: "OrcaSlicer", group: "Commands", kind: "command" }
|
||||
];
|
||||
assert.deepEqual(ctx.searchActions(pluginPool, "plugin").map(function (a) { return a.id; }), ["plugin-action"],
|
||||
"the plugin kind makes runnable plugin actions searchable by plugin");
|
||||
assert.deepEqual(ctx.searchActions(pluginPool, "plugins").map(function (a) { return a.id; }), ["plugin-action"],
|
||||
"the plural Plugins category also finds plugin actions");
|
||||
ctx.searchActions(pluginPool, "plugins");
|
||||
assert.deepEqual(ctx.matchIndex["plugin-action"].plugin, [[0, 7]],
|
||||
"a category match highlights the visible Plugins label");
|
||||
assert.deepEqual(ctx.searchActions(pluginPool, "plugin optimize").map(function (a) { return a.id; }), ["plugin-action"],
|
||||
"plugin kind can match one token while the action title matches another");
|
||||
|
||||
// A perfect match (the needle as one contiguous run) outranks a fuzzy match of the same field - and a
|
||||
// contiguous GROUP/header hit ("Recent Projects") beats a scattered fuzzy TITLE hit ("Retraction Length"),
|
||||
// which is what the old flat title-bonus ranking got backwards.
|
||||
@@ -188,6 +202,12 @@ assert.equal(ctx.actionCategory({ id: "s", group: "", source: "Filament : Coolin
|
||||
"a Filament setting groups under Filament");
|
||||
assert.equal(ctx.actionCategory({ id: "plugin_script_action:Foo:bar.py", group: "", source: "Gcode Optimizer", kind: "plugin" }), "Plugins",
|
||||
"every plugin shares one Plugins header");
|
||||
assert.equal(ctx.actionEyebrow({ group: "", source: "Gcode Optimizer", kind: "plugin" }, "plugin"), "Plugins",
|
||||
"typed results show only the Plugins category");
|
||||
assert.equal(ctx.actionEyebrow({ group: "", source: "Gcode Optimizer", kind: "plugin" }, "", true), "Plugins",
|
||||
"recent plugin actions show only the Plugins category");
|
||||
assert.equal(ctx.actionEyebrow({ group: "", source: "Gcode Optimizer", kind: "plugin" }, ""), "Gcode Optimizer",
|
||||
"the unfiltered plugin section keeps the source name on non-recent rows");
|
||||
assert.equal(ctx.actionCategory({ id: "x", group: "", source: "", kind: "command" }), "Other",
|
||||
"a category-less action falls back to Other");
|
||||
|
||||
@@ -436,4 +456,9 @@ assert.equal(ctx.stateFromPayload({}).tooltipExpanded, true, "expansion defaults
|
||||
assert.equal(ctx.stateFromPayload({ tooltip_expanded: false }).tooltipExpanded, false, "a collapsed payload is honored");
|
||||
assert.equal(ctx.stateFromPayload({ tooltip_expanded: true }).tooltipExpanded, true, "an expanded payload is honored");
|
||||
|
||||
// resultCountText: a search counts the shown matches only ("Showing N actions"); the total is used
|
||||
// solely for the empty-query count.
|
||||
assert.equal(ctx.resultCountText(100, 3, "lay"), "Showing 3 actions", "a search reports the shown match count only");
|
||||
assert.equal(ctx.resultCountText(100, 100, ""), "100 actions", "an empty query reports the total");
|
||||
|
||||
console.log("ok");
|
||||
|
||||
@@ -331,15 +331,6 @@ 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.
|
||||
|
||||
@@ -24,7 +24,7 @@ NAMESPACE = "lane_data"
|
||||
|
||||
# Repo-relative paths for the offline generic-map check
|
||||
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
AMS_PAYLOAD_CPP = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "AmsPayload.cpp")
|
||||
MOONRAKER_AGENT_CPP = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "MoonrakerPrinterAgent.cpp")
|
||||
OFL_FILAMENT_DIR = os.path.join(REPO_ROOT, "resources", "profiles", "OrcaFilamentLibrary", "filament")
|
||||
LANE_KEYS = [f"lane{i}" for i in range(1, 9)] # lane1-lane8
|
||||
MATERIALS = ["PLA", "ABS", "PETG", "ASA", "ASA Sparkle", "TPU", ""]
|
||||
@@ -41,16 +41,16 @@ MATERIAL_TEMPS = {
|
||||
}
|
||||
|
||||
def parse_cpp_type_map():
|
||||
"""Extract the normalized-type -> OFL generic family table from AmsPayload.cpp.
|
||||
"""Extract the normalized-type -> OFL generic family table from MoonrakerPrinterAgent.cpp.
|
||||
|
||||
Reads map_filament_type_to_generic_id's type_to_ofl_family initializer so the
|
||||
check tracks the C++ normalization without a duplicated list.
|
||||
Reads MoonrakerPrinterAgent::map_filament_type_to_generic_id's type_to_ofl_family
|
||||
initializer so the check tracks the C++ normalization without a duplicated list.
|
||||
"""
|
||||
with open(AMS_PAYLOAD_CPP, encoding="utf-8") as f:
|
||||
with open(MOONRAKER_AGENT_CPP, encoding="utf-8") as f:
|
||||
src = f.read()
|
||||
m = re.search(r"type_to_ofl_family\s*=\s*\{(.*?)\n\s*\};", src, re.DOTALL)
|
||||
if not m:
|
||||
raise RuntimeError(f"type_to_ofl_family table not found in {AMS_PAYLOAD_CPP}")
|
||||
raise RuntimeError(f"type_to_ofl_family table not found in {MOONRAKER_AGENT_CPP}")
|
||||
pairs = re.findall(r'\{\s*"([^"]+)"\s*,\s*"([^"]+)"\s*\}', m.group(1))
|
||||
if not pairs:
|
||||
raise RuntimeError("type_to_ofl_family table parsed empty")
|
||||
|
||||
@@ -405,6 +405,20 @@ class TestTripleResolution(unittest.TestCase):
|
||||
self.assertEqual(afi.resolve_triple("MyPLA @P1", fmap, {}),
|
||||
("MyVendor", "PLA", "MyPLA"))
|
||||
|
||||
def test_split_vendor_and_type_bases_resolve(self):
|
||||
# A partial base is normal, not an error: vendor and type may live on
|
||||
# different ancestors, with an intermediate supplying neither (the
|
||||
# Snapmaker shape). The pair is complete at the instantiated preset.
|
||||
recs = [
|
||||
self.rec("APLA @P1", inherits="mid"),
|
||||
self.rec("mid", inherits="typebase"),
|
||||
self.rec("typebase", filament_type=["PLA"], inherits="vendorbase"),
|
||||
self.rec("vendorbase", filament_vendor=["AV"]),
|
||||
]
|
||||
fmap = {r["name"]: r for r in recs}
|
||||
self.assertEqual(afi.resolve_triple("APLA @P1", fmap, {}),
|
||||
("AV", "PLA", "APLA"))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# checks on synthetic trees
|
||||
@@ -417,6 +431,24 @@ class TestChecks(OfCleanTreeCase):
|
||||
self.assertNotIn("[ERROR]", out)
|
||||
self.assertNotIn("[WARNING]", out)
|
||||
|
||||
def test_instantiated_preset_over_partial_bases_is_silent(self):
|
||||
# Vendor and type split across two non-instantiated bases, an
|
||||
# intermediate base with neither: base profiles are allowed to be
|
||||
# partial. Only the instantiated preset must resolve both.
|
||||
self.t.write_preset("VendorA", preset("XPLA vendorbase", instantiation=False,
|
||||
filament_vendor="XV"))
|
||||
self.t.write_preset("VendorA", preset("XPLA typebase", instantiation=False,
|
||||
filament_type="PLA",
|
||||
inherits="XPLA vendorbase"))
|
||||
self.t.write_preset("VendorA", preset("XPLA mid", instantiation=False,
|
||||
inherits="XPLA typebase"))
|
||||
self.t.write_preset("VendorA", preset(
|
||||
"XPLA @P1", inherits="XPLA mid",
|
||||
filament_id=afi.generate_filament_id("XV", "PLA", "XPLA"),
|
||||
compatible_printers=["P1"]))
|
||||
errors, out = self.t.check()
|
||||
self.assertEqual(errors, 0, out)
|
||||
|
||||
def test_check1_unknown_non_of_id(self):
|
||||
self.t.write_preset("VendorA", preset("BPLA @base", filament_id="BOGUS_9",
|
||||
instantiation=False,
|
||||
@@ -1523,6 +1555,19 @@ class TestRealTree(unittest.TestCase):
|
||||
self.assertEqual(analysis["missing_effective"], [])
|
||||
self.assertEqual(analysis["read_errors"], [])
|
||||
|
||||
def test_every_instantiated_filament_resolves_vendor_and_type(self):
|
||||
# The property the web guide resolves at load: a partial base is fine as
|
||||
# long as the instantiated preset ends up with both fields. Guards the
|
||||
# split-base bundles (Snapmaker, Anker, SeeMeCNC).
|
||||
analysis = afi.analyze_tree(REAL_PROFILES)
|
||||
unresolved = [
|
||||
(vendor, rec["name"], rec["triple"][0], rec["triple"][1])
|
||||
for vendor, filaments in analysis["vendors"].items()
|
||||
for rec in filaments.values()
|
||||
if rec["instantiation"] and not (rec["triple"][0] and rec["triple"][1])
|
||||
]
|
||||
self.assertEqual(unresolved, [])
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# review-fix regressions
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -3456,7 +3456,7 @@ size_t PresetCollection::first_visible_idx() const
|
||||
return first_visible;
|
||||
}
|
||||
|
||||
size_t PresetCollection::first_matching_filament_idx(const std::string& filament_type) const
|
||||
size_t PresetCollection::first_visible_idx_by_type(const std::string& filament_type) const
|
||||
{
|
||||
size_t start = m_default_suppressed ? m_num_default_presets : 0;
|
||||
|
||||
@@ -3481,17 +3481,14 @@ size_t PresetCollection::first_matching_filament_idx(const std::string& filament
|
||||
// e.g. "PLA High Speed" -> "PLA"
|
||||
// Dash-separated types like "PA-CF", "PET-CF" are distinct materials, not modifiers.
|
||||
auto sep = filament_type.find(' ');
|
||||
if (sep != std::string::npos)
|
||||
return find_by_type(filament_type.substr(0, sep));
|
||||
if (sep != std::string::npos) {
|
||||
idx = find_by_type(filament_type.substr(0, sep));
|
||||
if (idx != size_t(-1))
|
||||
return idx;
|
||||
}
|
||||
|
||||
return size_t(-1);
|
||||
}
|
||||
|
||||
size_t PresetCollection::first_visible_idx_by_type(const std::string& filament_type) const
|
||||
{
|
||||
size_t idx = first_matching_filament_idx(filament_type);
|
||||
// 3. Any visible preset
|
||||
return idx != size_t(-1) ? idx : first_visible_idx();
|
||||
return first_visible_idx();
|
||||
}
|
||||
|
||||
std::string PresetCollection::filament_id_by_type(const std::string& filament_type) const
|
||||
@@ -3499,15 +3496,6 @@ std::string PresetCollection::filament_id_by_type(const std::string& filament_ty
|
||||
return preset(first_visible_idx_by_type(filament_type)).filament_id;
|
||||
}
|
||||
|
||||
bool PresetCollection::filament_id_by_type(const std::string& filament_type, std::string& out) const
|
||||
{
|
||||
size_t idx = first_matching_filament_idx(filament_type);
|
||||
if (idx == size_t(-1))
|
||||
return false;
|
||||
out = preset(idx).filament_id;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<std::string> PresetCollection::diameters_of_selected_printer()
|
||||
{
|
||||
std::set<std::string> diameters;
|
||||
|
||||
@@ -756,11 +756,6 @@ public:
|
||||
size_t first_visible_idx_by_type(const std::string& filament_type) const;
|
||||
// Return the filament_id of the best-matching visible preset for the given filament type.
|
||||
std::string filament_id_by_type(const std::string& filament_type) const;
|
||||
// As above, but returns false (and leaves `out` untouched) when no preset
|
||||
// matches instead of falling back to first_visible_idx(). The fallback is a
|
||||
// plain first-visible/PLA preset, which would bind an unknown material to an
|
||||
// unrelated default.
|
||||
bool filament_id_by_type(const std::string& filament_type, std::string& out) const;
|
||||
// Return index of the first compatible preset. Certainly at least the '- default -' preset shall be compatible.
|
||||
// If one of the prefered_alternates is compatible, select it.
|
||||
template<typename PreferedCondition> size_t first_compatible_idx(PreferedCondition prefered_condition) const
|
||||
@@ -894,10 +889,6 @@ protected:
|
||||
void set_custom_preset_alias(Preset &preset);
|
||||
|
||||
private:
|
||||
// Index of the first visible, compatible, system base preset matching
|
||||
// filament_type (exact, then base type), or (size_t)-1 when none matches.
|
||||
size_t first_matching_filament_idx(const std::string& filament_type) const;
|
||||
|
||||
std::string canonical_preset_name(const std::string &name, const PresetOrigin &load_origin = PresetOrigin()) const;
|
||||
|
||||
// Comparator that sorts "Generic " prefixed presets before others, then alphabetically within each group.
|
||||
|
||||
@@ -3824,6 +3824,7 @@ 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
|
||||
|
||||
+17
-24
@@ -236,7 +236,6 @@ 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
|
||||
@@ -287,6 +286,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/FilamentMapDialog.hpp
|
||||
GUI/IconManager.cpp
|
||||
GUI/IconManager.hpp
|
||||
GUI/IdleScheduler.cpp
|
||||
GUI/IdleScheduler.hpp
|
||||
GUI/ImageGrid.cpp
|
||||
GUI/ImageGrid.h
|
||||
GUI/ImGuiWrapper.cpp
|
||||
@@ -348,6 +349,10 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/KBShortcutsDialog.hpp
|
||||
GUI/KeyChord.cpp
|
||||
GUI/KeyChord.hpp
|
||||
GUI/Lazy.cpp
|
||||
GUI/Lazy.hpp
|
||||
GUI/LazyPage.cpp
|
||||
GUI/LazyPage.hpp
|
||||
GUI/LibVGCode/LibVGCodeWrapper.hpp
|
||||
GUI/LibVGCode/LibVGCodeWrapper.cpp
|
||||
GUI/LinuxDisplayBackend.cpp
|
||||
@@ -360,8 +365,6 @@ 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
|
||||
@@ -436,6 +439,7 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/Plater.hpp
|
||||
GUI/PlateSettingsDialog.cpp
|
||||
GUI/PlateSettingsDialog.hpp
|
||||
GUI/PrebuildQueue.hpp
|
||||
GUI/Preferences.cpp
|
||||
GUI/Preferences.hpp
|
||||
GUI/PresetBundleDialog.cpp
|
||||
@@ -515,6 +519,7 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/SliceInfoPanel.hpp
|
||||
GUI/SlicingProgressNotification.cpp
|
||||
GUI/SlicingProgressNotification.hpp
|
||||
GUI/StagedBuild.hpp
|
||||
GUI/StatusPanel.cpp
|
||||
GUI/StatusPanel.hpp
|
||||
GUI/StepMeshDialog.cpp
|
||||
@@ -555,8 +560,6 @@ 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
|
||||
@@ -751,17 +754,10 @@ 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/AmsPayload.cpp
|
||||
Utils/AmsPayload.hpp
|
||||
Utils/OrcaCloudSignalingChannel.cpp
|
||||
Utils/OrcaCloudSignalingChannel.hpp
|
||||
Utils/QidiPrinterAgent.cpp
|
||||
Utils/QidiPrinterAgent.hpp
|
||||
Utils/SnapmakerPrinterAgent.cpp
|
||||
@@ -902,7 +898,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 Crypt32)
|
||||
target_link_libraries(libslic3r_gui Advapi32)
|
||||
endif()
|
||||
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES})
|
||||
@@ -928,7 +924,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 LibDataChannel::LibDataChannel 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 noise::noise pybind11::embed)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
# Linux finds wxWidgets in module mode, whose include dirs and definitions
|
||||
@@ -985,32 +981,29 @@ endif ()
|
||||
|
||||
if (APPLE)
|
||||
# Static FFmpeg from the deps install: nothing to bundle into the .app,
|
||||
# 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)
|
||||
# no rpath/install_name handling. Order matters: avcodec -> swscale -> avutil.
|
||||
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 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.")
|
||||
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.")
|
||||
endif ()
|
||||
target_link_libraries(libslic3r_gui ${LIBAVFORMAT_LIBRARY} ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY})
|
||||
target_link_libraries(libslic3r_gui ${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 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.")
|
||||
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.")
|
||||
endif ()
|
||||
target_link_libraries(libslic3r_gui ${LIBAVFORMAT_LIBRARY} ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY})
|
||||
target_link_libraries(libslic3r_gui ${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
|
||||
|
||||
@@ -45,25 +45,6 @@ int AVVideoDecoder::open(Bambu_StreamInfo const &info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int AVVideoDecoder::open(AVCodecParameters const ¶meters)
|
||||
{
|
||||
if (avcodec_parameters_to_context(codec_ctx_, ¶meters) < 0)
|
||||
return -1;
|
||||
|
||||
auto codec = avcodec_find_decoder(codec_ctx_->codec_id);
|
||||
if (codec == nullptr) {
|
||||
fprintf(stderr, "AVVideoDecoder: unsupported codec!\n");
|
||||
return -1;
|
||||
}
|
||||
if (avcodec_open2(codec_ctx_, codec, nullptr) < 0) {
|
||||
fprintf(stderr, "AVVideoDecoder: could not open codec\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
frame_ = av_frame_alloc();
|
||||
return frame_ == nullptr ? -1 : 0;
|
||||
}
|
||||
|
||||
int AVVideoDecoder::decode(const Bambu_Sample &sample)
|
||||
{
|
||||
int ret = -1;
|
||||
@@ -90,14 +71,6 @@ int AVVideoDecoder::decode(const Bambu_Sample &sample)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int AVVideoDecoder::decode(const AVPacket &packet)
|
||||
{
|
||||
int ret = avcodec_send_packet(codec_ctx_, &packet);
|
||||
if (ret == 0)
|
||||
got_frame_ = avcodec_receive_frame(codec_ctx_, frame_) == 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int AVVideoDecoder::flush()
|
||||
{
|
||||
int ret = avcodec_send_packet(codec_ctx_, nullptr);
|
||||
|
||||
@@ -23,10 +23,8 @@ public:
|
||||
|
||||
public:
|
||||
int open(Bambu_StreamInfo const &info);
|
||||
int open(AVCodecParameters const ¶meters);
|
||||
|
||||
int decode(Bambu_Sample const &sample);
|
||||
int decode(AVPacket const &packet);
|
||||
|
||||
int flush();
|
||||
|
||||
@@ -36,14 +34,6 @@ public:
|
||||
|
||||
bool toWxBitmap(wxBitmap &bitmap, wxSize const & size);
|
||||
|
||||
// Native size of the most recently decoded frame, or an unspecified size if
|
||||
// nothing has decoded yet. Lets a caller learn the video dimensions when the
|
||||
// container/probe could not report them up front.
|
||||
wxSize decoded_frame_size() const
|
||||
{
|
||||
return got_frame_ && frame_ ? wxSize{frame_->width, frame_->height} : wxSize{};
|
||||
}
|
||||
|
||||
private:
|
||||
AVCodecContext *codec_ctx_ = nullptr;
|
||||
AVFrame * frame_ = nullptr;
|
||||
|
||||
@@ -863,17 +863,27 @@ void AuxiliaryPanel::init_tabpanel()
|
||||
m_tabpanel->SetBackgroundColour(wxColour("#FEFFFF"));
|
||||
m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [](wxBookCtrlEvent &e) { /* Event handling */ });
|
||||
|
||||
m_designer_panel = new DesignerPanel(m_tabpanel, AuxiliaryFolderType::DESIGNER);
|
||||
m_pictures_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::MODEL_PICTURE);
|
||||
m_bill_of_materials_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::BILL_OF_MATERIALS);
|
||||
m_assembly_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::ASSEMBLY_GUIDE);
|
||||
m_others_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::OTHERS);
|
||||
|
||||
m_tabpanel->AddPage(m_designer_panel, _L("Basic Info"), true);
|
||||
m_tabpanel->AddPage(m_pictures_panel, _L("Pictures"), false);
|
||||
m_tabpanel->AddPage(m_bill_of_materials_panel, _L("Bill of Materials"), false);
|
||||
m_tabpanel->AddPage(m_assembly_panel, _L("Assembly Guide"), false);
|
||||
m_tabpanel->AddPage(m_others_panel, _L("Others"), false);
|
||||
add_build_step([this] {
|
||||
m_designer_panel = new DesignerPanel(m_tabpanel, AuxiliaryFolderType::DESIGNER);
|
||||
m_tabpanel->AddPage(m_designer_panel, _L("Basic Info"), true);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_pictures_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::MODEL_PICTURE);
|
||||
m_tabpanel->AddPage(m_pictures_panel, _L("Pictures"), false);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_bill_of_materials_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::BILL_OF_MATERIALS);
|
||||
m_tabpanel->AddPage(m_bill_of_materials_panel, _L("Bill of Materials"), false);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_assembly_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::ASSEMBLY_GUIDE);
|
||||
m_tabpanel->AddPage(m_assembly_panel, _L("Assembly Guide"), false);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_others_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::OTHERS);
|
||||
m_tabpanel->AddPage(m_others_panel, _L("Others"), false);
|
||||
Layout();
|
||||
});
|
||||
}
|
||||
|
||||
wxWindow *AuxiliaryPanel::create_side_tools()
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "slic3r/GUI/UpgradePanel.hpp"
|
||||
#include "slic3r/GUI/AmsWidgets.hpp"
|
||||
#include "Widgets/SideTools.hpp"
|
||||
#include "StagedBuild.hpp"
|
||||
|
||||
#define AUFILE_GREY700 wxColour(107, 107, 107)
|
||||
#define AUFILE_GREY500 wxColour(158, 158, 158)
|
||||
@@ -194,7 +195,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class AuxiliaryPanel : public wxPanel
|
||||
class AuxiliaryPanel : public wxPanel, public StagedBuild
|
||||
{
|
||||
private:
|
||||
Tabbook *m_tabpanel = {nullptr};
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
#include "libslic3r/CAD/CadDocument.hpp"
|
||||
#include "slic3r/GUI/CAD/DesignInteraction.hpp" // CadLevel: what one Esc press means
|
||||
#include "slic3r/GUI/Lazy.hpp"
|
||||
|
||||
class ComboBox; // Orca dropdown (Widgets/ComboBox.hpp) — replaces wxChoice everywhere here
|
||||
class StaticBox; // Orca rounded card frame (Widgets/StaticBox.hpp)
|
||||
@@ -46,7 +47,7 @@ class DesignCanvas;
|
||||
// Design (CAD) tab: a sketch-first, Onshape-style form-driven CAD panel.
|
||||
// Sketch and Extrude are independent tools: the user creates a Sketch first,
|
||||
// then selects it and Extrudes to produce a solid.
|
||||
class DesignPanel : public wxPanel
|
||||
class DesignPanel : public wxPanel, public LazyInstance<DesignPanel>
|
||||
{
|
||||
public:
|
||||
explicit DesignPanel(wxWindow* parent);
|
||||
|
||||
@@ -1989,11 +1989,10 @@ json action_set_feature_expr(DesignPanel* panel, const json& params)
|
||||
// Dispatch one parsed request ON THE MAIN THREAD. Returns a JSON-RPC reply string.
|
||||
std::string handle_on_main(const std::string& method, const json& params, const json& id)
|
||||
{
|
||||
MainFrame* mf = wxGetApp().mainframe;
|
||||
// The panel is built on first use, and in a headless session nobody clicks the tab that
|
||||
// would build it -- so build it here rather than refusing. Safe: this runs on the main
|
||||
// thread (see the CallAfter that dispatches us).
|
||||
DesignPanel* panel = mf ? mf->ensure_design_panel() : nullptr;
|
||||
DesignPanel* panel = DesignPanel::ensure();
|
||||
if (!panel)
|
||||
return rpc_error(id, -32001, "Design panel not ready");
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user