Merge branch 'main' into fix/ota-updates-workflow
@@ -70,6 +70,9 @@ if (POLICY CMP0092)
|
||||
cmake_policy(SET CMP0092 NEW)
|
||||
endif ()
|
||||
|
||||
# project() reads this, so set it first.
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/ClangClShowIncludes.cmake")
|
||||
|
||||
project(OrcaSlicer)
|
||||
|
||||
# Backward compatibility for old CMake versions
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# ccache does not parse the -clang: arguments CMake uses for clang-cl's gcc-style
|
||||
# depfile, so a cache hit writes the object and no depfile, and Ninja then records
|
||||
# no headers for that object. ccache reproduces /showIncludes output on a hit.
|
||||
foreach (_lang C CXX)
|
||||
if (CMAKE_${_lang}_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_${_lang}_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
|
||||
set(CMAKE_DEPFILE_FLAGS_${_lang} "/showIncludes")
|
||||
set(CMAKE_${_lang}_DEPFILE_FORMAT msvc)
|
||||
endif ()
|
||||
endforeach ()
|
||||
@@ -38,6 +38,14 @@ if(POLICY CMP0135) # DOWNLOAD_EXTRACT_TIMESTAMP
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
|
||||
# project() reads this, so set it first. scripts/flatpak/make_deps_tar.sh packs deps/
|
||||
# without cmake/, so the file is missing in a Flatpak build.
|
||||
set(_rules_override "${CMAKE_CURRENT_LIST_DIR}/../cmake/modules/ClangClShowIncludes.cmake")
|
||||
if (EXISTS "${_rules_override}")
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_rules_override}")
|
||||
endif ()
|
||||
unset(_rules_override)
|
||||
|
||||
project(OrcaSlicer-deps)
|
||||
|
||||
# Backward compatibility for old CMake versions
|
||||
@@ -220,6 +228,7 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
|
||||
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
|
||||
-DCMAKE_USER_MAKE_RULES_OVERRIDE:STRING=${CMAKE_USER_MAKE_RULES_OVERRIDE}
|
||||
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
|
||||
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
|
||||
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
|
||||
@@ -267,6 +276,7 @@ else()
|
||||
-DCMAKE_IGNORE_PREFIX_PATH:STRING=${CMAKE_IGNORE_PREFIX_PATH}
|
||||
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
|
||||
-DCMAKE_USER_MAKE_RULES_OVERRIDE:STRING=${CMAKE_USER_MAKE_RULES_OVERRIDE}
|
||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||
${_cmake_osx_arch}
|
||||
"${_configs_line}"
|
||||
|
||||
@@ -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.
|
||||
@@ -76,9 +76,10 @@ and the count of errors the original parse hit.
|
||||
|
||||
Each entry is one preset **in source form**: what its JSON sub-file states and nothing
|
||||
that resolving it derives — the preset's own config diff, the name of the preset it
|
||||
inherits, and the parse metadata (name, sub-path, description, instantiation, setting
|
||||
and filament ids, renames). Non-instantiated base presets are stored too; the children
|
||||
that inherit from them cannot resolve without them.
|
||||
inherits, the names of the presets it includes, and the parse metadata (name, sub-path,
|
||||
description, instantiation, setting and filament ids, renames). Non-instantiated base
|
||||
presets are stored too; the children that inherit from or include them cannot resolve
|
||||
without them.
|
||||
|
||||
**The payload names its own keys.** The dictionary holds the distinct `opt_key`s the
|
||||
file uses, the `ConfigOptionType` each was written as, and the distinct enum *value
|
||||
@@ -161,9 +162,9 @@ cache nothing can invalidate is worse than no cache.
|
||||
|
||||
Vendors load in a fixed order, because filament inheritance crosses exactly one
|
||||
boundary: any vendor's filament may inherit from the shared Orca filament library,
|
||||
and nothing else reaches across vendors. The library therefore goes first, alone;
|
||||
every other vendor follows in parallel, resolving against it; and the results are
|
||||
merged in a stable order:
|
||||
and nothing else reaches across vendors — an `include` is always vendor-local. The
|
||||
library therefore goes first, alone; every other vendor follows in parallel, resolving
|
||||
against it; and the results are merged in a stable order:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
@@ -211,13 +212,16 @@ and its cache was never written back.
|
||||
|
||||
Serving from a cache is not a memory-image restore. The entries are deserialized and
|
||||
then installed one by one — inheritance resolved against the presets installed before
|
||||
them and the currently loaded filament library, configs flattened onto the collection
|
||||
defaults, validated and registered — by the same function the JSON path calls straight
|
||||
after parsing a sub-file. The two paths share everything below the parse, which is what
|
||||
makes a cache-loaded bundle indistinguishable from a JSON-loaded one by construction
|
||||
rather than by test coverage. Installation also rebuilds each preset's file path from
|
||||
the local data directory, so a shipped cache never carries the generating machine's
|
||||
paths.
|
||||
them and the currently loaded filament library, includes layered in, configs flattened
|
||||
onto the collection defaults, validated and registered — by the same function the JSON
|
||||
path calls straight after parsing a sub-file. An `include` layers what the included
|
||||
base states, between the parent and the preset's own keys: the base's diff against the
|
||||
default, taken when the base itself was installed and before the per-variant padding
|
||||
`inherits` sees, so only what a template sets reaches the presets including it. The two
|
||||
paths share everything below the parse, which is what makes a cache-loaded bundle
|
||||
indistinguishable from a JSON-loaded one by construction rather than by test coverage.
|
||||
Installation also rebuilds each preset's file path from the local data directory, so a
|
||||
shipped cache never carries the generating machine's paths.
|
||||
|
||||
App upgrades work because a cache normally survives one. Only a deliberate
|
||||
`CACHE_VERSION` bump makes an installed cache unreadable, and that is handled at
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Bambulab",
|
||||
"url": "http://www.bambulab.com/Parameters/vendor/BBL.json",
|
||||
"version": "02.08.00.09",
|
||||
"version": "02.08.00.10",
|
||||
"force_update": "0",
|
||||
"description": "the initial version of BBL configurations",
|
||||
"machine_model_list": [
|
||||
@@ -67,6 +67,22 @@
|
||||
"name": "fdm_filament_common",
|
||||
"sub_path": "filament/fdm_filament_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_bowden",
|
||||
"sub_path": "filament/fdm_filament_template_direct_bowden.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_bowden_e3d",
|
||||
"sub_path": "filament/fdm_filament_template_direct_bowden_e3d.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_dual",
|
||||
"sub_path": "filament/fdm_filament_template_direct_dual.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_dual_e3d",
|
||||
"sub_path": "filament/fdm_filament_template_direct_dual_e3d.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_abs",
|
||||
"sub_path": "filament/fdm_filament_abs.json"
|
||||
@@ -8246,261 +8262,9 @@
|
||||
{
|
||||
"name": "Generic TPU @BBL H2S",
|
||||
"sub_path": "filament/Generic TPU @BBL H2S.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_bowden",
|
||||
"sub_path": "filament/fdm_filament_template_direct_bowden.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_bowden_e3d",
|
||||
"sub_path": "filament/fdm_filament_template_direct_bowden_e3d.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_dual",
|
||||
"sub_path": "filament/fdm_filament_template_direct_dual.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_filament_template_direct_dual_e3d",
|
||||
"sub_path": "filament/fdm_filament_template_direct_dual_e3d.json"
|
||||
}
|
||||
],
|
||||
"machine_list": [
|
||||
{
|
||||
"name": "fdm_machine_common",
|
||||
"sub_path": "machine/fdm_machine_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_bbl_3dp_001_common",
|
||||
"sub_path": "machine/fdm_bbl_3dp_001_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_bbl_3dp_002_common",
|
||||
"sub_path": "machine/fdm_bbl_3dp_002_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.4 nozzle template change_filament_gcode",
|
||||
"sub_path": "machine/Bambu Lab A1 0.4 nozzle template change_filament_gcode.json"
|
||||
@@ -8856,6 +8620,242 @@
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.4 nozzle template time_lapse_gcode",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.4 nozzle template time_lapse_gcode.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_machine_common",
|
||||
"sub_path": "machine/fdm_machine_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_bbl_3dp_001_common",
|
||||
"sub_path": "machine/fdm_bbl_3dp_001_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_bbl_3dp_002_common",
|
||||
"sub_path": "machine/fdm_bbl_3dp_002_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.4 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A1 mini 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A1 mini 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab A2L 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab A2L 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2S 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2S 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1P 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1P 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P1S 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P1S 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab P2S 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab P2S 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1 Carbon 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1 Carbon 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X1E 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X1E 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2C 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2C 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab H2D Pro 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab H2D Pro 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.2 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.6 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Bambu Lab X2D 0.8 nozzle",
|
||||
"sub_path": "machine/Bambu Lab X2D 0.8 nozzle.json"
|
||||
}
|
||||
],
|
||||
"process_list": [
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 27 KiB |
@@ -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"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -437,6 +437,7 @@ def resolve_filament_field(name, field, filaments, ofl_filaments, seen=None, in_
|
||||
the same hop semantics as resolve_filament_id: own value, else walk
|
||||
`inherits` in the vendor map with OFL base-bundle fallback. Values are list
|
||||
options — the first element counts; "" when the chain never defines one.
|
||||
Templates pulled in by `include` are not consulted: none states either field.
|
||||
"""
|
||||
if seen is None:
|
||||
seen = set()
|
||||
@@ -887,8 +888,8 @@ def _vendor_json_files(vendor_path):
|
||||
def check_preset_name_uniqueness(profiles_dir, vendor):
|
||||
"""No two profiles in a bundle may share a type and a name, indexed or not.
|
||||
|
||||
The loader resolves "inherits" through a per-type map of the bundle's profiles
|
||||
(PresetBundle.cpp load_subfiles), and std::map::emplace keeps the first
|
||||
The loader resolves "inherits" and "include" through per-type maps of the bundle's
|
||||
profiles (PresetBundle.cpp load_subfiles), and std::map::emplace keeps the first
|
||||
insertion: a second file claiming the name is silently dropped, and which one
|
||||
wins is nothing but index order. An unindexed twin counts too - it is one
|
||||
sub_path edit away from deciding that silently.
|
||||
@@ -1287,11 +1288,11 @@ def check_normalized(profiles_dir, vendor):
|
||||
|
||||
Those two commands define a profile file's canonical shape - identifying keys
|
||||
first, keys the slicer no longer reads gone, filament options that are vectors
|
||||
written as vectors - and a <vendor>.json's canonical lists, ordered parents-first
|
||||
so the loader resolves every "inherits" in one pass. Running them over a
|
||||
contributed bundle has to be a no-op; where it would not be, the file that was
|
||||
reviewed is not the file that ships, and the next maintainer to run normalize
|
||||
carries an unrelated diff into their own change.
|
||||
written as vectors - and a <vendor>.json's canonical lists, ordered
|
||||
dependencies-first so the loader resolves every "inherits" and "include" in one
|
||||
pass. Running them over a contributed bundle has to be a no-op; where it would
|
||||
not be, the file that was reviewed is not the file that ships, and the next
|
||||
maintainer to run normalize carries an unrelated diff into their own change.
|
||||
|
||||
It asks the normalize and update-index sections below rather than restating what
|
||||
they do, because a second definition of normal is free to drift from the one that
|
||||
@@ -2034,9 +2035,9 @@ def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None,
|
||||
cli_config.json carry no "type" - all of them stay. A file that cannot be parsed
|
||||
is reported and kept: never delete what could not be read.
|
||||
|
||||
An unindexed file that some surviving profile names in "inherits" is kept too,
|
||||
and reported, UNLESS an indexed profile already carries that name: "inherits" is
|
||||
resolved by preset name, so the indexed one is the parent every child actually
|
||||
An unindexed file that some surviving profile names in "inherits" or "include" is
|
||||
kept too, and reported, UNLESS an indexed profile already carries that name: both
|
||||
are resolved by preset name, so the indexed one is the parent every child actually
|
||||
gets, and the unindexed file is a stale copy the loader never reaches. Where no
|
||||
indexed profile provides the name the inheriting preset really is broken, and
|
||||
deleting the file would destroy the only record of the settings it was written
|
||||
@@ -2069,7 +2070,7 @@ def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None,
|
||||
listed.add(posixpath.normpath(sub_path.replace("\\", "/")))
|
||||
|
||||
candidates = {} # path -> profile, for every unindexed preset
|
||||
inherited = set() # every name the files that stay claim as a parent
|
||||
inherited = set() # every name the files that stay claim as a parent or include
|
||||
provided = {} # name -> sub_path, for the profiles the loader can see
|
||||
for sub in subs:
|
||||
for path in _walk_json(os.path.join(vendor_dir, sub)):
|
||||
@@ -2084,8 +2085,7 @@ def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None,
|
||||
if not isinstance(profile, dict):
|
||||
continue
|
||||
if sub_path in listed or profile.get("type") not in PROFILE_TYPES:
|
||||
if profile.get("inherits"):
|
||||
inherited.add(profile["inherits"])
|
||||
inherited.update(profile_dependencies(profile))
|
||||
if sub_path in listed and profile.get("name"):
|
||||
provided[profile["name"]] = sub_path
|
||||
continue
|
||||
@@ -2104,8 +2104,7 @@ def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None,
|
||||
for path, profile in rescued.items():
|
||||
del candidates[path]
|
||||
kept[path] = profile
|
||||
if profile.get("inherits"):
|
||||
inherited.add(profile["inherits"])
|
||||
inherited.update(profile_dependencies(profile))
|
||||
|
||||
for path in sorted(kept):
|
||||
print_warning(f"{_rel(path, profiles_dir)}: not indexed by {vendor}.json but "
|
||||
@@ -2142,40 +2141,48 @@ def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None,
|
||||
# update-index
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def topological_sort(profiles):
|
||||
"""Order index entries parents-first, so the loader resolves inherits in one pass.
|
||||
def profile_dependencies(profile):
|
||||
"""The names a profile needs loaded before it: its parent and every include."""
|
||||
include = profile.get("include") or []
|
||||
if isinstance(include, str):
|
||||
include = [include]
|
||||
return [name for name in [profile.get("inherits"), *include] if name]
|
||||
|
||||
Entries whose parent is not in the same section keep their own (sorted) order at
|
||||
the end; the loader finds those parents through the base bundle instead.
|
||||
|
||||
def topological_sort(profiles):
|
||||
"""Order index entries dependencies-first, so the loader resolves every
|
||||
"inherits" and "include" in one pass.
|
||||
|
||||
Entries that neither depend on nor are depended on by another in the same section
|
||||
go at the end in name order; the loader finds their parents, if any, through the
|
||||
base bundle instead. Every entry on a dependency cycle, which no order can satisfy,
|
||||
goes there too.
|
||||
"""
|
||||
graph = defaultdict(list)
|
||||
in_degree = defaultdict(int)
|
||||
by_name = {p["name"]: p for p in profiles}
|
||||
all_names = set(by_name)
|
||||
|
||||
placed = set()
|
||||
for profile in profiles:
|
||||
parent = profile.get("inherits")
|
||||
child = profile["name"]
|
||||
if parent in all_names:
|
||||
graph[parent].append(child)
|
||||
in_degree[child] += 1
|
||||
in_degree.setdefault(parent, 0)
|
||||
placed.add(child)
|
||||
placed.add(parent)
|
||||
for parent in profile_dependencies(profile):
|
||||
if parent in all_names:
|
||||
graph[parent].append(child)
|
||||
in_degree[child] += 1
|
||||
in_degree.setdefault(parent, 0)
|
||||
|
||||
queue = sorted(name for name, degree in in_degree.items() if degree == 0)
|
||||
result = []
|
||||
while queue:
|
||||
current = queue.pop(0)
|
||||
result.append(by_name[current])
|
||||
placed.add(current)
|
||||
for child in sorted(graph[current]):
|
||||
in_degree[child] -= 1
|
||||
if in_degree[child] == 0:
|
||||
queue.append(child)
|
||||
|
||||
result.extend(by_name[name] for name in sorted(all_names - placed))
|
||||
ordered = {p["name"] for p in result}
|
||||
result.extend(by_name[name] for name in sorted(all_names - ordered))
|
||||
return result
|
||||
|
||||
|
||||
@@ -2225,15 +2232,15 @@ def build_index_sections(profiles_dir, vendor, profile_types=None):
|
||||
"name": name,
|
||||
"sub_path": os.path.relpath(path, vendor_dir).replace(os.sep, "/"),
|
||||
}
|
||||
if profile.get("inherits"):
|
||||
entry["inherits"] = profile["inherits"]
|
||||
for key in ("inherits", "include"):
|
||||
if profile.get(key):
|
||||
entry[key] = profile[key]
|
||||
by_name[name].append(entry["sub_path"])
|
||||
entries.append(entry)
|
||||
|
||||
sorted_entries = topological_sort(entries)
|
||||
for entry in sorted_entries:
|
||||
entry.pop("inherits", None) # ordering input only, not part of the index
|
||||
sections[profile_type + "_list"] = sorted_entries
|
||||
# inherits/include were ordering input only; the index holds name and sub_path
|
||||
sections[profile_type + "_list"] = [{"name": e["name"], "sub_path": e["sub_path"]}
|
||||
for e in topological_sort(entries)]
|
||||
|
||||
for rel, found in sorted(unplaceable.items()):
|
||||
problems.append(f'{rel}: type {found!r} is not one of {list(PROFILE_TYPES)}, so it '
|
||||
@@ -2418,7 +2425,8 @@ def build_parser():
|
||||
add("update-index", [vendor_opt, type_opt, dry_run_opt, profiles_opt],
|
||||
"regenerate the *_list sections of <vendor>.json",
|
||||
"Rebuild the *_list sections of each <vendor>.json from the files on disk,\n"
|
||||
"ordered parents-first so the loader resolves inherits in one pass.\n"
|
||||
"ordered dependencies-first so the loader resolves inherits and include\n"
|
||||
"in one pass.\n"
|
||||
"\n"
|
||||
"A profile is indexed under the section its own \"type\" names, so run\n"
|
||||
"normalize first: it is what writes a missing type. Two files claiming one\n"
|
||||
|
||||
@@ -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
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -411,6 +411,26 @@ class TestUpdateIndex(TreeCase):
|
||||
for entry in self.t.read_index("V")["filament_list"]:
|
||||
self.assertEqual(sorted(entry), ["name", "sub_path"])
|
||||
|
||||
def test_include_targets_are_listed_before_their_users(self):
|
||||
# The loader resolves include like inherits: in one pass over the list, so
|
||||
# a template must be listed before every preset that includes it - even
|
||||
# though a template has no parent of its own to order it by.
|
||||
self.t.write("V", "machine/P.json", {"type": "machine", "name": "P",
|
||||
"include": ["T start", "T end"]})
|
||||
self.t.write("V", "machine/T start.json", {"type": "machine", "name": "T start"})
|
||||
self.t.write("V", "machine/T end.json", {"type": "machine", "name": "T end"})
|
||||
self.t.write("V", "filament/F.json", {"type": "filament", "name": "F",
|
||||
"inherits": "B", "include": "S"})
|
||||
self.t.write("V", "filament/B.json", {"type": "filament", "name": "B"})
|
||||
self.t.write("V", "filament/S.json", {"type": "filament", "name": "S"})
|
||||
rc, out = self.run_command("update-index")
|
||||
self.assertEqual(rc, 0, out)
|
||||
machines = [e["name"] for e in self.t.read_index("V")["machine_list"]]
|
||||
self.assertEqual(machines, ["T end", "T start", "P"])
|
||||
filaments = [e["name"] for e in self.t.read_index("V")["filament_list"]]
|
||||
self.assertLess(filaments.index("B"), filaments.index("F"))
|
||||
self.assertLess(filaments.index("S"), filaments.index("F"))
|
||||
|
||||
def test_a_profile_with_no_usable_type_is_reported_not_dropped(self):
|
||||
self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"})
|
||||
self.t.write("V", "filament/B.json", {"name": "B"})
|
||||
|
||||
@@ -5527,12 +5527,28 @@ int CLI::run(int argc, char **argv)
|
||||
//add the virtual object into unselect list if has
|
||||
partplate_list.preprocess_exclude_areas(unselected, enable_wrapping_detect);
|
||||
|
||||
if (used_filament_set.size() > 0)
|
||||
// Filament ids given on the command line size the tower for STL input. A project
|
||||
// records its filament use per plate, so count there and keep its tower positions.
|
||||
const int plate_count = partplate_list.get_plate_count();
|
||||
const bool from_project = used_filament_set.empty();
|
||||
std::vector<int> plate_filament_counts(plate_count, static_cast<int>(used_filament_set.size()));
|
||||
if (from_project)
|
||||
for (int plate_index = 0; plate_index < plate_count; ++plate_index)
|
||||
plate_filament_counts[plate_index] = static_cast<int>(partplate_list.get_plate(plate_index)->get_extruders_under_cli(true, m_print_config).size());
|
||||
// A project only gets a tower the slicer will print: the prime tower enabled, and not
|
||||
// a by-object print unless a smooth timelapse needs it, as the per-plate arrange decides.
|
||||
const bool project_tower_allowed = m_print_config.option<ConfigOptionBool>("enable_prime_tower", true)->value &&
|
||||
(is_smooth_timelapse || !arrange_cfg.is_seq_print);
|
||||
const auto plate_needs_wipe_tower = [from_project, project_tower_allowed, is_smooth_timelapse](int filament_count) {
|
||||
if (!from_project)
|
||||
return filament_count > 0;
|
||||
return project_tower_allowed && (filament_count > 1 || (filament_count > 0 && is_smooth_timelapse));
|
||||
};
|
||||
const int max_filament_count = plate_count > 0 ? *std::max_element(plate_filament_counts.begin(), plate_filament_counts.end()) : 0;
|
||||
|
||||
if (plate_needs_wipe_tower(max_filament_count))
|
||||
{
|
||||
//prepare the wipe tower
|
||||
int plate_count = partplate_list.get_plate_count();
|
||||
int extruder_size = used_filament_set.size();
|
||||
|
||||
auto printer_structure_opt = m_print_config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure");
|
||||
// This margin only pre-adjusts the default away from the near edges;
|
||||
// estimate_wipe_tower_polygon below computes the real clamped position.
|
||||
@@ -5568,7 +5584,11 @@ int CLI::run(int argc, char **argv)
|
||||
|
||||
for (int bedid = 0; bedid < MAX_PLATE_COUNT; bedid++) {
|
||||
int plate_index_valid = std::min(bedid, plate_count - 1);
|
||||
if (bedid < plate_count) {
|
||||
// Overflow beds may receive objects from any plate, so size them for the busiest one.
|
||||
const int extruder_size = bedid < plate_count ? plate_filament_counts[bedid] : max_filament_count;
|
||||
if (!plate_needs_wipe_tower(extruder_size))
|
||||
continue;
|
||||
if (bedid < plate_count && !from_project) {
|
||||
wipe_x_option->set_at(&wt_x_opt, plate_index_valid, 0);
|
||||
wipe_y_option->set_at(&wt_y_opt, plate_index_valid, 0);
|
||||
}
|
||||
@@ -7024,6 +7044,12 @@ int CLI::run(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
sliced_info.sliced_plates.push_back(sliced_plate_info);
|
||||
} catch (const Slic3r::SlicingErrors &exs) {
|
||||
const std::string message = print_fff ? print_fff->slicing_errors_message(exs) : std::string(exs.what());
|
||||
BOOST_LOG_TRIVIAL(error) << "found slicing or export error for partplate " << index+1 << ": " << message;
|
||||
boost::nowide::cerr << message << std::endl;
|
||||
record_exit_reson(outfile_dir, CLI_SLICING_ERROR, index+1, message, sliced_info);
|
||||
flush_and_exit(CLI_SLICING_ERROR);
|
||||
} catch (const std::exception &ex) {
|
||||
BOOST_LOG_TRIVIAL(error) << "found slicing or export error for partplate "<<index+1 << std::endl;
|
||||
boost::nowide::cerr << ex.what() << std::endl;
|
||||
|
||||
@@ -28,6 +28,12 @@ if (ORCA_TOOLS)
|
||||
target_link_libraries(generate_system_cache libslic3r boost_headeronly)
|
||||
target_compile_definitions(generate_system_cache PRIVATE ${_DEV_DEFS})
|
||||
|
||||
# profile_include_dump: prints what included templates contribute to a vendor's presets,
|
||||
# to diff against the same tool built in BambuStudio. Built only on request.
|
||||
add_executable(profile_include_dump EXCLUDE_FROM_ALL profile_include_dump.cpp)
|
||||
target_link_libraries(profile_include_dump libslic3r boost_headeronly)
|
||||
target_compile_definitions(profile_include_dump PRIVATE ${_DEV_DEFS})
|
||||
|
||||
endif()
|
||||
|
||||
# Function that adds source file encoding check to a target
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
// Prints what the profile `include` key contributes to one vendor's system
|
||||
// presets, so that the dump from OrcaSlicer and the one from BambuStudio can be
|
||||
// diffed: the two copies of this file differ only in how they load the vendor.
|
||||
// For every preset whose values pass through an included template, from its
|
||||
// own file or an ancestor's, it prints the templates those files name, in the
|
||||
// order they apply, then the loaded value of each key the templates set. Every
|
||||
// line starts with the preset, so a plain diff names the preset of each
|
||||
// difference.
|
||||
#include "libslic3r/PresetBundle.hpp"
|
||||
#include "libslic3r/Preset.hpp"
|
||||
#include "libslic3r/Utils.hpp"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/nowide/fstream.hpp>
|
||||
#include "nlohmann/json.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace Slic3r;
|
||||
namespace fs = boost::filesystem;
|
||||
using nlohmann::json;
|
||||
|
||||
namespace {
|
||||
|
||||
// What a sub-file states about where its values come from, and what it sets.
|
||||
struct Entry
|
||||
{
|
||||
std::string inherits;
|
||||
std::vector<std::string> includes;
|
||||
std::vector<std::string> keys;
|
||||
};
|
||||
|
||||
// Sub-files by name, per section of the vendor index: `inherits` and `include`
|
||||
// both resolve within a section.
|
||||
using Sections = std::map<std::string, std::map<std::string, Entry>>;
|
||||
|
||||
json read_json(const fs::path &path)
|
||||
{
|
||||
boost::nowide::ifstream in(path.string());
|
||||
if (!in)
|
||||
throw std::runtime_error("Cannot read " + path.string());
|
||||
return json::parse(in);
|
||||
}
|
||||
|
||||
Sections read_vendor(const fs::path &dir, const std::string &vendor)
|
||||
{
|
||||
// Keys that name and place a sub-file rather than set a value.
|
||||
static const std::set<std::string> metadata = {"name", "type", "from", "instantiation", "inherits", "include"};
|
||||
Sections sections;
|
||||
const json index = read_json(dir / (vendor + ".json"));
|
||||
for (const char *section : {"process_list", "filament_list", "machine_list"}) {
|
||||
const auto list = index.find(section);
|
||||
if (list == index.end())
|
||||
continue;
|
||||
for (const json &item : *list) {
|
||||
const json file = read_json(dir / vendor / item.at("sub_path").get<std::string>());
|
||||
// A file without a name goes by its name in the index.
|
||||
Entry &entry = sections[section][file.value("name", item.at("name").get<std::string>())];
|
||||
entry.inherits = file.value("inherits", "");
|
||||
if (const auto include = file.find("include"); include != file.end()) {
|
||||
if (include->is_string())
|
||||
entry.includes.push_back(include->get<std::string>());
|
||||
else
|
||||
for (const json &name : *include)
|
||||
entry.includes.push_back(name.get<std::string>());
|
||||
}
|
||||
for (auto it = file.begin(); it != file.end(); ++it)
|
||||
if (metadata.count(it.key()) == 0)
|
||||
entry.keys.push_back(it.key());
|
||||
}
|
||||
}
|
||||
return sections;
|
||||
}
|
||||
|
||||
const PresetCollection &presets_of(const PresetBundle &bundle, const std::string §ion)
|
||||
{
|
||||
if (section == "process_list")
|
||||
return bundle.prints;
|
||||
if (section == "filament_list")
|
||||
return bundle.filaments;
|
||||
return bundle.printers;
|
||||
}
|
||||
|
||||
size_t dump(const PresetBundle &bundle, const Sections §ions, std::ostream &out)
|
||||
{
|
||||
size_t dumped = 0;
|
||||
for (const auto &[section, entries] : sections) {
|
||||
std::vector<const Preset *> presets;
|
||||
for (const Preset &preset : presets_of(bundle, section).get_presets())
|
||||
if (preset.is_system)
|
||||
presets.push_back(&preset);
|
||||
std::sort(presets.begin(), presets.end(), [](const Preset *a, const Preset *b) { return a->name < b->name; });
|
||||
for (const Preset *preset : presets) {
|
||||
// The preset and its ancestors, root first: the order their includes apply in.
|
||||
std::vector<const Entry *> lineage;
|
||||
for (auto it = entries.find(preset->name); it != entries.end() && lineage.size() <= entries.size();
|
||||
it = entries.find(it->second.inherits))
|
||||
lineage.insert(lineage.begin(), &it->second);
|
||||
std::string templates;
|
||||
std::set<std::string> keys;
|
||||
for (const Entry *entry : lineage)
|
||||
for (const std::string &name : entry->includes) {
|
||||
templates += (templates.empty() ? "" : "; ") + name;
|
||||
if (const auto it = entries.find(name); it != entries.end())
|
||||
keys.insert(it->second.keys.begin(), it->second.keys.end());
|
||||
}
|
||||
if (templates.empty())
|
||||
continue;
|
||||
const std::string prefix = section.substr(0, section.find('_')) + " | " + preset->name + " | ";
|
||||
out << prefix << "include = " << templates << "\n";
|
||||
for (const std::string &key : keys)
|
||||
out << prefix << key << " = " << (preset->config.has(key) ? preset->config.opt_serialize(key) : "<absent>") << "\n";
|
||||
++dumped;
|
||||
}
|
||||
}
|
||||
return dumped;
|
||||
}
|
||||
|
||||
// Orca: load the vendor as the app does, against the filament library when the
|
||||
// directory has one: parsed from its JSON files or, with from_cache, from the
|
||||
// preset cache the app reads on every launch after the first.
|
||||
void load_vendor(PresetBundle &bundle, const std::string &dir, const std::string &vendor, bool from_cache)
|
||||
{
|
||||
const auto rule = ForwardCompatibilitySubstitutionRule::EnableSilent;
|
||||
PresetBundle library;
|
||||
const PresetBundle *base = nullptr;
|
||||
if (fs::is_regular_file(fs::path(dir) / (std::string(PresetBundle::ORCA_FILAMENT_LIBRARY) + ".json"))) {
|
||||
library.load_vendor_configs_from_json(dir, PresetBundle::ORCA_FILAMENT_LIBRARY, PresetBundle::LoadSystem, rule, nullptr, false);
|
||||
base = &library;
|
||||
}
|
||||
if (!from_cache) {
|
||||
bundle.load_vendor_configs_from_json(dir, vendor, PresetBundle::LoadSystem, rule, base, false);
|
||||
return;
|
||||
}
|
||||
// Parse once to write <vendor>.opc beside the profile, then load that
|
||||
// cache into a clean bundle. Any cache already there goes first, so that a
|
||||
// failed write cannot leave it to be loaded; one that was not there before
|
||||
// goes again afterwards.
|
||||
const fs::path cache = fs::path(dir) / (vendor + ".opc");
|
||||
const bool had_cache = fs::exists(cache);
|
||||
fs::remove(cache);
|
||||
PresetBundle parsed;
|
||||
parsed.set_is_validation_mode(true); // parse the JSON: validation never serves a cache
|
||||
parsed.set_generate_vendor_caches(true);
|
||||
parsed.load_vendor_configs_from_json(dir, vendor, PresetBundle::LoadSystem, rule, base);
|
||||
const bool loaded = bundle.load_vendor_cache(cache.string(), vendor, parsed.vendors.at(vendor).config_version, base);
|
||||
if (!had_cache)
|
||||
fs::remove(cache);
|
||||
if (!loaded)
|
||||
throw std::runtime_error("The preset cache " + cache.string() + " was not written or was rejected");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
const char *usage = "Usage: profile_include_dump -p <profiles dir> -o <dump file> [-v <vendor>] [-l <log level>] [-c]\n"
|
||||
" -v vendor to dump, BBL if omitted\n"
|
||||
" -l log level, 0 (fatal) to 5 (trace); 1 if omitted\n"
|
||||
" -c load the presets from the vendor's preset cache, generated first, not the JSON\n";
|
||||
std::string dir, output, vendor = "BBL";
|
||||
unsigned log_level = 1;
|
||||
bool from_cache = false;
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
const std::string arg = argv[i];
|
||||
if (arg == "-c") {
|
||||
from_cache = true;
|
||||
continue;
|
||||
}
|
||||
if (i + 1 == argc) {
|
||||
std::cerr << usage;
|
||||
return 1;
|
||||
}
|
||||
const std::string value = argv[++i];
|
||||
if (arg == "-p")
|
||||
dir = value;
|
||||
else if (arg == "-o")
|
||||
output = value;
|
||||
else if (arg == "-v")
|
||||
vendor = value;
|
||||
else if (arg == "-l" && value.size() == 1 && value[0] >= '0' && value[0] <= '5')
|
||||
log_level = unsigned(value[0] - '0');
|
||||
else {
|
||||
std::cerr << usage;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (dir.empty() || output.empty() || !fs::is_directory(dir)) {
|
||||
std::cerr << usage;
|
||||
return 1;
|
||||
}
|
||||
set_logging_level(log_level);
|
||||
|
||||
try {
|
||||
PresetBundle bundle;
|
||||
load_vendor(bundle, dir, vendor, from_cache);
|
||||
boost::nowide::ofstream out(output);
|
||||
if (!out)
|
||||
throw std::runtime_error("Cannot write " + output);
|
||||
const size_t dumped = dump(bundle, read_vendor(dir, vendor), out);
|
||||
out.close();
|
||||
if (!out)
|
||||
throw std::runtime_error("Failed writing " + output);
|
||||
std::cerr << "Dumped " << dumped << " " << vendor << " presets that include a template\n";
|
||||
} catch (const std::exception &ex) {
|
||||
std::cerr << ex.what() << "\n";
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -950,6 +950,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
||||
}
|
||||
else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) {
|
||||
key_values.emplace(BBL_JSON_KEY_INHERITS, it.value());
|
||||
}
|
||||
else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INCLUDES)) {
|
||||
key_values.emplace(BBL_JSON_KEY_INCLUDES, it.value().dump());
|
||||
} else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) {
|
||||
key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value());
|
||||
} else {
|
||||
|
||||