mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-24 09:23:27 +00:00
Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
434ff3011f | ||
|
|
2b602943a5 | ||
|
|
d51ad889fd | ||
|
|
edc2f8bf90 | ||
|
|
037b859447 | ||
|
|
02746cd0f5 | ||
|
|
66b300987b | ||
|
|
9bae19fcb3 | ||
|
|
fcd8131998 | ||
|
|
a8f1061a02 | ||
|
|
b46916a8be | ||
|
|
bf024ed34e | ||
|
|
0211277976 |
@@ -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.
|
||||
+17
-13
@@ -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
|
||||
|
||||
+253
-253
@@ -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": [
|
||||
|
||||
+121
-17
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Sovol",
|
||||
"url": "",
|
||||
"version": "02.04.00.04",
|
||||
"version": "02.04.00.07",
|
||||
"force_update": "0",
|
||||
"description": "Sovol configurations",
|
||||
"machine_model_list": [
|
||||
@@ -167,10 +167,6 @@
|
||||
"name": "0.20mm Standard @Sovol SV08 MAX 0.4 nozzle",
|
||||
"sub_path": "process/0.20mm Standard @Sovol SV08 MAX 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.20mm Standard @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Fast @Sovol SV06 ACE",
|
||||
"sub_path": "process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json"
|
||||
@@ -198,6 +194,74 @@
|
||||
{
|
||||
"name": "0.40mm Standard @Sovol SV08 MAX 0.8 nozzle",
|
||||
"sub_path": "process/0.40mm Standard @Sovol SV08 MAX 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_zero",
|
||||
"sub_path": "process/fdm_process_zero.json"
|
||||
},
|
||||
{
|
||||
"name": "0.06mm Quality @Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "process/0.06mm Quality @Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.10mm Standard @Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "process/0.10mm Standard @Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Quality @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.12mm Quality @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.14mm Fast @Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "process/0.14mm Fast @Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.15mm Quality @Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "process/0.15mm Quality @Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Quality @Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "process/0.20mm Quality @Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.20mm Standard @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.25mm Quality @Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "process/0.25mm Quality @Sovol Zero 1.0 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.25mm SPEEDBENCHY @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.25mm SPEEDBENCHY @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Fast @Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "process/0.28mm Fast @Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Standard @Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "process/0.30mm Standard @Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.40mm Standard @Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "process/0.40mm Standard @Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.42mm Fast @Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "process/0.42mm Fast @Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.50mm Standard @Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "process/0.50mm Standard @Sovol Zero 1.0 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.56mm Fast @Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "process/0.56mm Fast @Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "0.70mm Fast @Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "process/0.70mm Fast @Sovol Zero 1.0 nozzle.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [
|
||||
@@ -249,6 +313,10 @@
|
||||
"name": "Generic PETG @Sovol Zero",
|
||||
"sub_path": "filament/Generic PETG @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PETG @Sovol Zero Hardened Steel nozzle",
|
||||
"sub_path": "filament/Generic PETG @Sovol Zero Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA @Sovol SV06 ACE",
|
||||
"sub_path": "filament/Generic PLA @Sovol SV06 ACE.json"
|
||||
@@ -277,6 +345,14 @@
|
||||
"name": "Generic PLA @Sovol Zero",
|
||||
"sub_path": "filament/Generic PLA @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA @Sovol Zero Hardened Steel nozzle",
|
||||
"sub_path": "filament/Generic PLA @Sovol Zero Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA SPEEDBENCHY @Sovol Zero",
|
||||
"sub_path": "filament/Generic PLA SPEEDBENCHY @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA Silk @Sovol SV08 MAX",
|
||||
"sub_path": "filament/Generic PLA Silk @Sovol SV08 MAX.json"
|
||||
@@ -285,6 +361,10 @@
|
||||
"name": "Generic PLA Silk @Sovol Zero",
|
||||
"sub_path": "filament/Generic PLA Silk @Sovol Zero.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PLA Silk @Sovol Zero Hardened Steel nozzle",
|
||||
"sub_path": "filament/Generic PLA Silk @Sovol Zero Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic TPU @Sovol SV06 ACE",
|
||||
"sub_path": "filament/Generic TPU @Sovol SV06 ACE.json"
|
||||
@@ -312,18 +392,6 @@
|
||||
{
|
||||
"name": "SUNLU PETG @Sovol SV08 MAX",
|
||||
"sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero PETG HS Nozzle",
|
||||
"sub_path": "filament/Sovol Zero PETG HS Nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero PLA Basic HS Nozzle",
|
||||
"sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero PLA Silk HS Nozzle",
|
||||
"sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.json"
|
||||
}
|
||||
],
|
||||
"machine_list": [
|
||||
@@ -415,9 +483,45 @@
|
||||
"name": "Sovol SV08 MAX 0.8 nozzle",
|
||||
"sub_path": "machine/Sovol SV08 MAX 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.2 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.4 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.6 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.8 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 1.0 nozzle",
|
||||
"sub_path": "machine/Sovol Zero 1.0 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.2 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.4 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.6 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 0.8 Hardened Steel nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Sovol Zero 1.0 Hardened Steel nozzle",
|
||||
"sub_path": "machine/Sovol Zero 1.0 Hardened Steel nozzle.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Generic ABS @Sovol Zero",
|
||||
"inherits": "Generic ABS @System",
|
||||
"renamed_from": "Sovol Zero ABS",
|
||||
"inherits": "fdm_filament_abs",
|
||||
"from": "system",
|
||||
"setting_id": "g6sSyyIFYJUzlXsp",
|
||||
"filament_id": "OFY9muEs",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
@@ -73,6 +74,39 @@
|
||||
"0"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_density": [
|
||||
"1.10"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFLakOUI",
|
||||
"setting_id": "yRKCiPMN6fxibcyg",
|
||||
"name": "Generic PC @Sovol Zero",
|
||||
"inherits": "Generic PC @System",
|
||||
"renamed_from": "Sovol Zero PC",
|
||||
"from": "system",
|
||||
"setting_id": "yRKCiPMN6fxibcyg",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pc",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
@@ -13,7 +14,16 @@
|
||||
"21"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"290"
|
||||
@@ -51,7 +61,9 @@
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"20"
|
||||
],
|
||||
@@ -61,8 +73,19 @@
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "0",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "50",
|
||||
"complete_print_exhaust_fan_speed": "50"
|
||||
"additional_cooling_fan_speed": [
|
||||
"0"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
]
|
||||
}
|
||||
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFYPdQJh",
|
||||
"setting_id": "d9QbCESNz3ZLU6eu",
|
||||
"name": "Generic PETG @Sovol Zero Hardened Steel nozzle",
|
||||
"renamed_from": "Sovol Zero PETG HS Nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pet",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.048"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"265"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"250"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"280"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"40"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"50"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"10"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"70"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"10%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"close_fan_the_first_x_layers": [
|
||||
"1"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
@@ -1,16 +1,21 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFYPdQJh",
|
||||
"setting_id": "i4OW2eAtXOKdtVNj",
|
||||
"name": "Generic PETG @Sovol Zero",
|
||||
"inherits": "Generic PETG @System",
|
||||
"renamed_from": "Sovol Zero PETG",
|
||||
"from": "system",
|
||||
"setting_id": "i4OW2eAtXOKdtVNj",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pet",
|
||||
"filament_flow_ratio": [
|
||||
"1.0348"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.046",
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.046"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
@@ -68,10 +73,44 @@
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "50",
|
||||
"complete_print_exhaust_fan_speed": "50",
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFDSrzZ8",
|
||||
"setting_id": "nZgETe4CTpicEjQX",
|
||||
"name": "Generic PLA @Sovol Zero Hardened Steel nozzle",
|
||||
"renamed_from": "Sovol Zero PLA Basic HS Nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"1.0348"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"21"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.03"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"75%"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
@@ -1,21 +1,24 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFDSrzZ8",
|
||||
"setting_id": "NNDerIjh7qtuh1I3",
|
||||
"name": "Generic PLA @Sovol Zero",
|
||||
"inherits": "Generic PLA @System",
|
||||
"renamed_from": "Sovol Zero PLA Basic",
|
||||
"from": "system",
|
||||
"setting_id": "NNDerIjh7qtuh1I3",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"21"
|
||||
"25"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.032",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"230"
|
||||
@@ -24,28 +27,28 @@
|
||||
"210"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
"180"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
"240"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
"60"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
"60"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
"100"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
"60"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
"2"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
@@ -53,18 +56,43 @@
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
"10%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"50"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.4"
|
||||
],
|
||||
"filament_diameter": [
|
||||
"1.75"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFIUkWYN",
|
||||
"setting_id": "MC2InZ7iKDjIGike",
|
||||
"name": "Generic PLA SPEEDBENCHY @Sovol Zero",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"1"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"225"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.032"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"30"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"1.7"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"40"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"75%"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.35"
|
||||
],
|
||||
"filament_retraction_speed": [
|
||||
"90"
|
||||
],
|
||||
"filament_deretraction_speed": [
|
||||
"90"
|
||||
],
|
||||
"filament_retract_before_wipe": [
|
||||
"0%"
|
||||
],
|
||||
"filament_wipe_distance": [
|
||||
"2"
|
||||
],
|
||||
"filament_retract_when_changing_layer": [
|
||||
"0"
|
||||
],
|
||||
"filament_diameter": [
|
||||
"1.75"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"100"
|
||||
]
|
||||
}
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFesA6rF",
|
||||
"setting_id": "LA8X1RsMdV2xNT1o",
|
||||
"name": "Generic PLA Silk @Sovol Zero Hardened Steel nozzle",
|
||||
"renamed_from": "Sovol Zero PLA Silk HS Nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.027"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"75%"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
@@ -1,27 +1,30 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFesA6rF",
|
||||
"setting_id": "Se2yKerHRStYtWf5",
|
||||
"name": "Generic PLA Silk @Sovol Zero",
|
||||
"inherits": "Generic PLA Silk @System",
|
||||
"renamed_from": "Sovol Zero PLA Silk",
|
||||
"from": "system",
|
||||
"setting_id": "Se2yKerHRStYtWf5",
|
||||
"instantiation": "true",
|
||||
"filament_multitool_ramming_flow": [
|
||||
"20"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"nil"
|
||||
],
|
||||
"inherits": "fdm_filament_pla",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.029",
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.029"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
@@ -59,7 +62,9 @@
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"dont_slow_down_outer_wall": [
|
||||
"0"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
@@ -69,8 +74,43 @@
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
"additional_cooling_fan_speed": [
|
||||
"75%"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"80%"
|
||||
],
|
||||
"filament_multitool_ramming_flow": [
|
||||
"20"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"nil"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "OFgbpcy9",
|
||||
"setting_id": "MlY6WQ41FE8zDPSV",
|
||||
"name": "Generic TPU @Sovol Zero",
|
||||
"inherits": "Generic TPU @System",
|
||||
"renamed_from": "Sovol Zero TPU",
|
||||
"from": "system",
|
||||
"setting_id": "MlY6WQ41FE8zDPSV",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_tpu",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
@@ -60,11 +61,55 @@
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"additional_cooling_fan_speed": "50",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "100",
|
||||
"complete_print_exhaust_fan_speed": "50",
|
||||
"additional_cooling_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"activate_air_filtration": [
|
||||
"1"
|
||||
],
|
||||
"during_print_exhaust_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"complete_print_exhaust_fan_speed": [
|
||||
"50"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
],
|
||||
"cool_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"eng_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"textured_plate_temp": [
|
||||
"60"
|
||||
],
|
||||
"cool_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"eng_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"textured_plate_temp_initial_layer": [
|
||||
"55"
|
||||
],
|
||||
"filament_end_gcode": [
|
||||
"; filament end gcode \n"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"nil"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Sovol Zero PETG HS Nozzle",
|
||||
"inherits": "Generic PETG @System",
|
||||
"from": "system",
|
||||
"setting_id": "AfxHmpdOkMDJa2fk",
|
||||
"filament_id": "OFymnal9",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.048",
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"265"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"250"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"280"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"85"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"85"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"40"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"50"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"10"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"70"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"10%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"close_fan_the_first_x_layers": [
|
||||
"1"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"filament_z_hop": [
|
||||
"0.4"
|
||||
],
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "50",
|
||||
"complete_print_exhaust_fan_speed": "50",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Sovol Zero PLA Basic HS Nozzle",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"setting_id": "i9wDnSEIrOBPbOZl",
|
||||
"filament_id": "OFzB4uOs",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"1.0348"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"21"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.03",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Sovol Zero PLA Silk HS Nozzle",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"setting_id": "XxEJBNFLRltR2Xwn",
|
||||
"filament_id": "OFAO9A7J",
|
||||
"instantiation": "true",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
],
|
||||
"enable_pressure_advance": "1",
|
||||
"pressure_advance": "0.027",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"245"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_range_low": [
|
||||
"190"
|
||||
],
|
||||
"nozzle_temperature_range_high": [
|
||||
"250"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"65"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"65"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"70"
|
||||
],
|
||||
"fan_max_speed": [
|
||||
"100"
|
||||
],
|
||||
"fan_cooling_layer_time": [
|
||||
"80"
|
||||
],
|
||||
"full_fan_speed_layer": [
|
||||
"3"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"slow_down_min_speed": [
|
||||
"10"
|
||||
],
|
||||
"dont_slow_down_outer_wall": "0",
|
||||
"overhang_fan_speed": [
|
||||
"100"
|
||||
],
|
||||
"overhang_fan_threshold": [
|
||||
"50%"
|
||||
],
|
||||
"temperature_vitrification": [
|
||||
"60"
|
||||
],
|
||||
"additional_cooling_fan_speed": "75%",
|
||||
"activate_air_filtration": "1",
|
||||
"during_print_exhaust_fan_speed": "80%",
|
||||
"complete_print_exhaust_fan_speed": "80%"
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.2 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.2 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "OkvEInEyzUUJzw9K",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.2HS",
|
||||
"nozzle_diameter": [
|
||||
"0.2"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.4 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "RqwHKS8MYRdoeJPi",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.4HS",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.6 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.6 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "s3N3FJkWrzOylFm8",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.6HS",
|
||||
"nozzle_diameter": [
|
||||
"0.6"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 0.8 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 0.8 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "houacf8sQ3bLozqD",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "0.8HS",
|
||||
"nozzle_diameter": [
|
||||
"0.8"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Sovol Zero 1.0 Hardened Steel nozzle",
|
||||
"inherits": "Sovol Zero 1.0 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "sqlEiL0in8LSjmmn",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Sovol Zero",
|
||||
"printer_variant": "1.0HS",
|
||||
"nozzle_diameter": [
|
||||
"1.0"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @Sovol Zero Hardened Steel nozzle"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"hardened_steel"
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -2,11 +2,11 @@
|
||||
"type": "machine_model",
|
||||
"name": "Sovol Zero",
|
||||
"model_id": "Sovol-Zero",
|
||||
"nozzle_diameter": "0.4",
|
||||
"nozzle_diameter": "0.2;0.4;0.6;0.8;1.0;0.2HS;0.4HS;0.6HS;0.8HS;1.0HS",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Sovol",
|
||||
"bed_model": "sovol_zero_buildplate_model.stl",
|
||||
"bed_texture": "sovol_zero_buildplate_texture.svg",
|
||||
"hotend_model": "",
|
||||
"default_materials": "Generic PLA @Sovol Zero;Sovol Zero PLA Basic HS Nozzle;Generic PLA Silk @Sovol Zero;Sovol Zero PLA Silk HS Nozzle;Generic ABS @Sovol Zero;Generic PETG @Sovol Zero;Sovol Zero PETG HS Nozzle;Generic TPU @Sovol Zero;Generic PC @Sovol Zero"
|
||||
"default_materials": "Generic PLA @Sovol Zero;Generic PLA SPEEDBENCHY @Sovol Zero;Generic PLA @Sovol Zero Hardened Steel nozzle;Generic PLA Silk @Sovol Zero;Generic PLA Silk @Sovol Zero Hardened Steel nozzle;Generic ABS @Sovol Zero;Generic PETG @Sovol Zero;Generic PETG @Sovol Zero Hardened Steel nozzle;Generic TPU @Sovol Zero;Generic PC @Sovol Zero"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.06mm Quality @Sovol Zero 0.2 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "fWP7jaL7sJmmZ6QN",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.06",
|
||||
"bottom_shell_layers": "8",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.21",
|
||||
"line_width": "0.21",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.06",
|
||||
"initial_layer_line_width": "0.3",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.22",
|
||||
"wall_loops": "3",
|
||||
"internal_solid_infill_line_width": "0.21",
|
||||
"sparse_infill_line_width": "0.21",
|
||||
"support_top_z_distance": "0.10",
|
||||
"support_line_width": "0.21",
|
||||
"tree_support_tip_diameter": "0.21",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.21",
|
||||
"top_shell_layers": "8",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.10mm Standard @Sovol Zero 0.2 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "Gql3487jsaTXyuYZ",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.10",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.22",
|
||||
"line_width": "0.22",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.12",
|
||||
"initial_layer_line_width": "0.3",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.22",
|
||||
"wall_loops": "2",
|
||||
"internal_solid_infill_line_width": "0.22",
|
||||
"sparse_infill_line_width": "0.22",
|
||||
"support_top_z_distance": "0.20",
|
||||
"support_line_width": "0.22",
|
||||
"tree_support_tip_diameter": "0.22",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.22",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "CaEopiv2Wg6pQJjH",
|
||||
"name": "0.12mm Quality @Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"bottom_shell_layers": "8",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.42",
|
||||
"line_width": "0.42",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.12",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"sparse_infill_line_width": "0.42",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.44",
|
||||
"wall_loops": "3",
|
||||
"support_top_z_distance": "0.10",
|
||||
"support_line_width": "0.42",
|
||||
"tree_support_tip_diameter": "0.42",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.42",
|
||||
"internal_solid_infill_line_width": "0.42",
|
||||
"top_shell_layers": "8",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.14mm Fast @Sovol Zero 0.2 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "I9yoyCcGGTRrDoKu",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.14",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.24",
|
||||
"line_width": "0.24",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.14",
|
||||
"initial_layer_line_width": "0.3",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.24",
|
||||
"wall_loops": "2",
|
||||
"internal_solid_infill_line_width": "0.24",
|
||||
"sparse_infill_line_width": "0.24",
|
||||
"support_top_z_distance": "0.30",
|
||||
"support_line_width": "0.24",
|
||||
"tree_support_tip_diameter": "0.24",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "0.24",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.2 nozzle",
|
||||
"Sovol Zero 0.2 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "IfDpa3vM99D4ytny",
|
||||
"name": "0.15mm Quality @Sovol Zero 0.6 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.15",
|
||||
"bottom_shell_layers": "5",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.63",
|
||||
"line_width": "0.63",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_line_width": "0.9",
|
||||
"sparse_infill_line_width": "0.63",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.66",
|
||||
"wall_loops": "3",
|
||||
"support_top_z_distance": "0.15",
|
||||
"support_line_width": "0.63",
|
||||
"tree_support_tip_diameter": "0.63",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.63",
|
||||
"top_shell_layers": "5",
|
||||
"internal_solid_infill_line_width": "0.63",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Quality @Sovol Zero 0.8 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "MSxikpQZNYdoBynZ",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.20",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.84",
|
||||
"line_width": "0.84",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.36",
|
||||
"initial_layer_line_width": "1.2",
|
||||
"sparse_infill_line_width": "0.84",
|
||||
"infill_wall_overlap": "18",
|
||||
"inner_wall_line_width": "0.88",
|
||||
"wall_loops": "3",
|
||||
"support_top_z_distance": "0.20",
|
||||
"support_line_width": "0.84",
|
||||
"tree_support_tip_diameter": "0.84",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.84",
|
||||
"top_shell_layers": "4",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"internal_solid_infill_line_width": "0.84",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -1,141 +1,36 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"setting_id": "ShJTVnJ492No1j2j",
|
||||
"name": "0.20mm Standard @Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"reduce_crossing_wall": "1",
|
||||
"max_travel_detour_distance": "100%",
|
||||
"layer_height": "0.20",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_flow": "1.2",
|
||||
"internal_bridge_flow": "1.2",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"internal_bridge_speed": "200",
|
||||
"brim_type": "auto_brim",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0",
|
||||
"compatible_printers_condition": "",
|
||||
"print_sequence": "by layer",
|
||||
"default_acceleration": "40000",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
"enable_arc_fitting": "0",
|
||||
"exclude_object": "1",
|
||||
"outer_wall_line_width": "0.4",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"line_width": "0.4",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_density": "10%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"internal_solid_infill_acceleration": "50%",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"initial_solid_infill_acceleration": "3000",
|
||||
"travel_acceleration": "40000",
|
||||
"outer_wall_line_width": "0.44",
|
||||
"line_width": "0.44",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"outer_wall_jerk": "5",
|
||||
"inner_wall_jerk": "5",
|
||||
"infill_jerk": "5",
|
||||
"top_surface_jerk": "5",
|
||||
"initial_layer_jerk": "5",
|
||||
"travel_jerk": "5",
|
||||
"initial_layer_line_width": "0.42",
|
||||
"initial_layer_print_height": "0.25",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "0.45",
|
||||
"infill_wall_overlap": "15%",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"reduce_infill_retraction": "1",
|
||||
"filename_format": "{printer_model}_{input_filename_base}_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "20",
|
||||
"inner_wall_line_width": "0.4",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"sparse_infill_line_width": "0.44",
|
||||
"infill_wall_overlap": "20",
|
||||
"ironing_speed": "100",
|
||||
"inner_wall_line_width": "0.44",
|
||||
"wall_loops": "2",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "0.8",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "0.45",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "tree(auto)",
|
||||
"support_style": "default",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.235",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "0.45",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "5",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.2",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "grid",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "3.5",
|
||||
"support_speed": "100",
|
||||
"support_threshold_angle": "20",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "40",
|
||||
"tree_support_wall_count": "0",
|
||||
"detect_thin_wall": "1",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"top_surface_line_width": "0.38",
|
||||
"support_top_z_distance": "0.20",
|
||||
"support_line_width": "0.44",
|
||||
"tree_support_tip_diameter": "0.44",
|
||||
"support_speed": "60",
|
||||
"top_surface_line_width": "0.44",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"initial_layer_speed": "55",
|
||||
"initial_layer_infill_speed": "105",
|
||||
"initial_layer_travel_speed": "60%",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "25%",
|
||||
"travel_speed": "1000",
|
||||
"enable_prime_tower": "1",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0",
|
||||
"bridge_acceleration": "50%",
|
||||
"seam_gap": "10%",
|
||||
"precise_outer_wall": "1",
|
||||
"wall_generator": "classic",
|
||||
"gcode_label_objects": "1",
|
||||
"slow_down_layers": "3",
|
||||
"top_solid_infill_flow_ratio": "0.9",
|
||||
"only_one_wall_top": "1",
|
||||
"wall_loop_direction": "clockwise",
|
||||
"top_bottom_infill_wall_overlap": "25%",
|
||||
"filter_out_gap_fill": "0",
|
||||
"detect_narrow_internal_solid_infill": "1",
|
||||
"thick_bridges": "1",
|
||||
"bridge_angle": "0",
|
||||
"internal_solid_infill_line_width": "0.44",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle"
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.25mm Quality @Sovol Zero 1.0 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "JUmnFOoEMJrbWCN9",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.25",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "30",
|
||||
"internal_bridge_speed": "200",
|
||||
"default_acceleration": "40000",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "1.05",
|
||||
"line_width": "1.05",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.45",
|
||||
"initial_layer_line_width": "1.5",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "1.05",
|
||||
"infill_wall_overlap": "18",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"filename_format": "{input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "20",
|
||||
"inner_wall_line_width": "1.1",
|
||||
"wall_loops": "3",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "0.8",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "1.05",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "tree(auto)",
|
||||
"support_style": "snug",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.25",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "1.05",
|
||||
"tree_support_tip_diameter": "1.05",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "5",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.2",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "grid",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "3.5",
|
||||
"support_speed": "100",
|
||||
"support_threshold_angle": "50",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "40",
|
||||
"top_surface_line_width": "1.05",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "oFrWcSxmad1b6sD4",
|
||||
"name": "0.25mm SPEEDBENCHY @Sovol Zero 0.4 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.25",
|
||||
"initial_layer_print_height": "0.25",
|
||||
"line_width": "0.5",
|
||||
"initial_layer_line_width": "0.5",
|
||||
"outer_wall_line_width": "0.5",
|
||||
"inner_wall_line_width": "0.5",
|
||||
"top_surface_line_width": "0.55",
|
||||
"internal_solid_infill_line_width": "0.55",
|
||||
"sparse_infill_line_width": "0.55",
|
||||
"support_line_width": "0.5",
|
||||
"tree_support_tip_diameter": "0.5",
|
||||
"wall_loops": "2",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"sparse_infill_density": "10%",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"bottom_solid_infill_flow_ratio": "1.2",
|
||||
"top_solid_infill_flow_ratio": "1.4",
|
||||
"bridge_flow": "1",
|
||||
"internal_bridge_flow": "1",
|
||||
"bridge_speed": "250",
|
||||
"internal_bridge_speed": "250",
|
||||
"bridge_acceleration": "100%",
|
||||
"thick_bridges": "0",
|
||||
"thick_internal_bridges": "0",
|
||||
"brim_type": "outer_only",
|
||||
"brim_width": "1",
|
||||
"brim_object_gap": "0",
|
||||
"filter_out_gap_fill": "13",
|
||||
"gap_fill_target": "nowhere",
|
||||
"min_width_top_surface": "200%",
|
||||
"minimum_sparse_infill_area": "0",
|
||||
"infill_direction": "0",
|
||||
"solid_infill_direction": "0",
|
||||
"infill_wall_overlap": "15%",
|
||||
"reduce_crossing_wall": "0",
|
||||
"skirt_loops": "0",
|
||||
"only_one_wall_top": "1",
|
||||
"slow_down_layers": "1",
|
||||
"wall_direction": "cw",
|
||||
"initial_layer_speed": "300",
|
||||
"initial_layer_infill_speed": "300",
|
||||
"initial_layer_travel_speed": "100%",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "100%",
|
||||
"internal_solid_infill_speed": "400",
|
||||
"top_surface_speed": "300",
|
||||
"gap_infill_speed": "350",
|
||||
"sparse_infill_speed": "500",
|
||||
"support_speed": "100",
|
||||
"travel_speed": "1200",
|
||||
"default_acceleration": "40000",
|
||||
"initial_layer_acceleration": "20000",
|
||||
"outer_wall_acceleration": "40000",
|
||||
"inner_wall_acceleration": "40000",
|
||||
"top_surface_acceleration": "20000",
|
||||
"internal_solid_infill_acceleration": "100%",
|
||||
"travel_acceleration": "40000",
|
||||
"accel_to_decel_factor": "50%",
|
||||
"outer_wall_jerk": "20",
|
||||
"inner_wall_jerk": "20",
|
||||
"infill_jerk": "20",
|
||||
"top_surface_jerk": "20",
|
||||
"initial_layer_jerk": "20",
|
||||
"travel_jerk": "20",
|
||||
"overhang_1_4_speed": "160",
|
||||
"overhang_2_4_speed": "100",
|
||||
"overhang_3_4_speed": "60",
|
||||
"overhang_4_4_speed": "40",
|
||||
"support_top_z_distance": "0.235",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.28mm Fast @Sovol Zero 0.4 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "1VoML2LGDk4TJgLI",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.28",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.48",
|
||||
"line_width": "0.48",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.28",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"sparse_infill_line_width": "0.48",
|
||||
"inner_wall_line_width": "0.48",
|
||||
"internal_solid_infill_line_width": "0.48",
|
||||
"support_top_z_distance": "0.30",
|
||||
"support_line_width": "0.48",
|
||||
"tree_support_tip_diameter": "0.48",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "0.48",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.4 nozzle",
|
||||
"Sovol Zero 0.4 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "lTAs2USEP8D749K7",
|
||||
"name": "0.30mm Standard @Sovol Zero 0.6 nozzle",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_zero",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.30",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.66",
|
||||
"line_width": "0.66",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.36",
|
||||
"initial_layer_line_width": "0.9",
|
||||
"sparse_infill_line_width": "0.66",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.66",
|
||||
"wall_loops": "2",
|
||||
"support_top_z_distance": "0.30",
|
||||
"support_line_width": "0.66",
|
||||
"tree_support_tip_diameter": "0.66",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.66",
|
||||
"top_shell_layers": "4",
|
||||
"internal_solid_infill_line_width": "0.66",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.40mm Standard @Sovol Zero 0.8 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "8x4CsuqroC9HOdAN",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.40",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "50",
|
||||
"outer_wall_acceleration": "10000",
|
||||
"top_surface_acceleration": "5000",
|
||||
"outer_wall_line_width": "0.88",
|
||||
"line_width": "0.88",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "12000",
|
||||
"initial_layer_print_height": "0.48",
|
||||
"initial_layer_line_width": "1.2",
|
||||
"sparse_infill_line_width": "0.88",
|
||||
"infill_wall_overlap": "20",
|
||||
"inner_wall_line_width": "0.88",
|
||||
"wall_loops": "2",
|
||||
"support_top_z_distance": "0.40",
|
||||
"support_line_width": "0.88",
|
||||
"tree_support_tip_diameter": "0.88",
|
||||
"support_speed": "100",
|
||||
"top_surface_line_width": "0.88",
|
||||
"top_shell_layers": "4",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"internal_solid_infill_line_width": "0.88",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.42mm Fast @Sovol Zero 0.6 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "illqJAnGiA2pY0hw",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.42",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.72",
|
||||
"line_width": "0.72",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.42",
|
||||
"initial_layer_line_width": "0.9",
|
||||
"sparse_infill_line_width": "0.72",
|
||||
"inner_wall_line_width": "0.72",
|
||||
"internal_solid_infill_line_width": "0.72",
|
||||
"support_top_z_distance": "0.45",
|
||||
"support_line_width": "0.72",
|
||||
"tree_support_tip_diameter": "0.72",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "0.72",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.6 nozzle",
|
||||
"Sovol Zero 0.6 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.50mm Standard @Sovol Zero 1.0 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "E5K55O4RkMyYCAlt",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.50",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.8",
|
||||
"bridge_speed": "45",
|
||||
"internal_bridge_speed": "200",
|
||||
"default_acceleration": "22000",
|
||||
"outer_wall_acceleration": "16000",
|
||||
"top_surface_acceleration": "16000",
|
||||
"outer_wall_line_width": "1.1",
|
||||
"line_width": "1.1",
|
||||
"sparse_infill_density": "15%",
|
||||
"inner_wall_acceleration": "22000",
|
||||
"initial_layer_print_height": "0.60",
|
||||
"initial_layer_line_width": "1.5",
|
||||
"infill_combination": "0",
|
||||
"sparse_infill_line_width": "1.1",
|
||||
"infill_wall_overlap": "20",
|
||||
"interface_shells": "0",
|
||||
"ironing_flow": "15%",
|
||||
"ironing_spacing": "0.25",
|
||||
"ironing_speed": "15",
|
||||
"ironing_type": "no ironing",
|
||||
"filename_format": "{input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{layer_height}_{print_time}.gcode",
|
||||
"detect_overhang_wall": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "30",
|
||||
"overhang_4_4_speed": "20",
|
||||
"inner_wall_line_width": "1.1",
|
||||
"wall_loops": "2",
|
||||
"print_settings_id": "",
|
||||
"raft_layers": "0",
|
||||
"seam_position": "aligned",
|
||||
"skirt_distance": "0.8",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"internal_solid_infill_line_width": "1.1",
|
||||
"spiral_mode": "0",
|
||||
"standby_temperature_delta": "-5",
|
||||
"enable_support": "0",
|
||||
"resolution": "0.012",
|
||||
"support_type": "tree(auto)",
|
||||
"support_style": "snug",
|
||||
"support_on_build_plate_only": "0",
|
||||
"support_top_z_distance": "0.50",
|
||||
"support_bottom_z_distance": "0.235",
|
||||
"support_filament": "0",
|
||||
"support_line_width": "1.1",
|
||||
"tree_support_tip_diameter": "1.1",
|
||||
"support_interface_loop_pattern": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_interface_top_layers": "5",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_spacing": "0.2",
|
||||
"support_bottom_interface_spacing": "0.2",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "grid",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_base_pattern_spacing": "3.5",
|
||||
"support_speed": "60",
|
||||
"support_threshold_angle": "50",
|
||||
"support_object_xy_distance": "0.35",
|
||||
"tree_support_branch_angle": "40",
|
||||
"top_surface_line_width": "1.1",
|
||||
"top_shell_layers": "4",
|
||||
"top_shell_thickness": "1",
|
||||
"outer_wall_speed": "30",
|
||||
"inner_wall_speed": "45",
|
||||
"small_perimeter_speed": "45",
|
||||
"internal_solid_infill_speed": "45",
|
||||
"top_surface_speed": "35",
|
||||
"gap_infill_speed": "35",
|
||||
"sparse_infill_speed": "70",
|
||||
"travel_acceleration": "38000",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.56mm Fast @Sovol Zero 0.8 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "g9PPRM4FLMwjMUfy",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.56",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"default_acceleration": "28000",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "0.96",
|
||||
"line_width": "0.96",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.56",
|
||||
"initial_layer_line_width": "1.2",
|
||||
"sparse_infill_line_width": "0.96",
|
||||
"inner_wall_line_width": "0.96",
|
||||
"internal_solid_infill_line_width": "0.96",
|
||||
"support_top_z_distance": "0.60",
|
||||
"support_line_width": "0.96",
|
||||
"tree_support_tip_diameter": "0.96",
|
||||
"top_surface_line_width": "0.96",
|
||||
"top_shell_layers": "4",
|
||||
"outer_wall_speed": "35",
|
||||
"inner_wall_speed": "55",
|
||||
"small_perimeter_speed": "60",
|
||||
"internal_solid_infill_speed": "55",
|
||||
"top_surface_speed": "40",
|
||||
"gap_infill_speed": "40",
|
||||
"sparse_infill_speed": "80",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 0.8 nozzle",
|
||||
"Sovol Zero 0.8 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.70mm Fast @Sovol Zero 1.0 nozzle",
|
||||
"inherits": "fdm_process_zero",
|
||||
"from": "system",
|
||||
"setting_id": "fW5KJBVndgQE868q",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.70",
|
||||
"bottom_shell_layers": "3",
|
||||
"bottom_shell_thickness": "0",
|
||||
"bridge_speed": "60",
|
||||
"outer_wall_acceleration": "22000",
|
||||
"top_surface_acceleration": "22000",
|
||||
"outer_wall_line_width": "1.2",
|
||||
"line_width": "1.2",
|
||||
"sparse_infill_density": "10%",
|
||||
"inner_wall_acceleration": "28000",
|
||||
"initial_layer_print_height": "0.70",
|
||||
"initial_layer_line_width": "1.5",
|
||||
"sparse_infill_line_width": "1.2",
|
||||
"inner_wall_line_width": "1.2",
|
||||
"internal_solid_infill_line_width": "1.2",
|
||||
"support_top_z_distance": "0.75",
|
||||
"support_line_width": "1.2",
|
||||
"tree_support_tip_diameter": "1.2",
|
||||
"support_speed": "120",
|
||||
"top_surface_line_width": "1.2",
|
||||
"top_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Sovol Zero 1.0 nozzle",
|
||||
"Sovol Zero 1.0 Hardened Steel nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_zero",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"reduce_crossing_wall": "1",
|
||||
"max_travel_detour_distance": "10",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bridge_flow": "1.2",
|
||||
"internal_bridge_flow": "1.2",
|
||||
"brim_type": "auto_brim",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0",
|
||||
"print_sequence": "by layer",
|
||||
"bridge_no_support": "0",
|
||||
"draft_shield": "disabled",
|
||||
"elefant_foot_compensation": "0.1",
|
||||
"enable_arc_fitting": "0",
|
||||
"exclude_object": "1",
|
||||
"wall_infill_order": "inner wall/outer wall/infill",
|
||||
"infill_direction": "45",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"internal_solid_infill_acceleration": "50%",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"travel_acceleration": "40000",
|
||||
"outer_wall_jerk": "5",
|
||||
"inner_wall_jerk": "5",
|
||||
"infill_jerk": "5",
|
||||
"top_surface_jerk": "5",
|
||||
"initial_layer_jerk": "5",
|
||||
"travel_jerk": "5",
|
||||
"tree_support_wall_count": "0",
|
||||
"reduce_infill_retraction": "1",
|
||||
"detect_thin_wall": "1",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"initial_layer_speed": "55",
|
||||
"initial_layer_infill_speed": "105",
|
||||
"initial_layer_travel_speed": "60%",
|
||||
"outer_wall_speed": "350",
|
||||
"inner_wall_speed": "400",
|
||||
"small_perimeter_speed": "50%",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "200",
|
||||
"gap_infill_speed": "200",
|
||||
"sparse_infill_speed": "500",
|
||||
"accel_to_decel_enable": "1",
|
||||
"accel_to_decel_factor": "25%",
|
||||
"travel_speed": "1000",
|
||||
"enable_prime_tower": "0",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0",
|
||||
"bridge_acceleration": "50%",
|
||||
"seam_gap": "10%",
|
||||
"precise_outer_wall": "1",
|
||||
"wall_generator": "classic",
|
||||
"gcode_label_objects": "1",
|
||||
"slow_down_layers": "3",
|
||||
"top_solid_infill_flow_ratio": "0.9",
|
||||
"only_one_wall_top": "1",
|
||||
"top_bottom_infill_wall_overlap": "25%",
|
||||
"filter_out_gap_fill": "0",
|
||||
"detect_narrow_internal_solid_infill": "1",
|
||||
"thick_bridges": "1",
|
||||
"bridge_angle": "0",
|
||||
"initial_layer_line_width": "150%",
|
||||
"default_acceleration": "40000",
|
||||
"compatible_printers": [],
|
||||
"internal_bridge_speed": "150",
|
||||
"filename_format": "{input_filename_base}_{nozzle_diameter[0]}n_{filament_type[0]}_{layer_height}_{print_time}.gcode"
|
||||
}
|
||||
@@ -1,12 +1,60 @@
|
||||
{
|
||||
"name": "Wanhao",
|
||||
"version": "02.04.00.02",
|
||||
"version": "02.04.00.03",
|
||||
"force_update": "0",
|
||||
"description": "Wanhao configurations",
|
||||
"machine_model_list": [
|
||||
{
|
||||
"name": "Wanhao D12-300",
|
||||
"sub_path": "machine/Wanhao D12-300.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1 BLTouch kit.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK2",
|
||||
"sub_path": "machine/Wanhao D9-300 MK2.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK3",
|
||||
"sub_path": "machine/Wanhao D9-300 MK3.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1 BLTouch kit.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK2",
|
||||
"sub_path": "machine/Wanhao D9-400 MK2.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK3",
|
||||
"sub_path": "machine/Wanhao D9-400 MK3.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1 BLTouch kit.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK2",
|
||||
"sub_path": "machine/Wanhao D9-500 MK2.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK3",
|
||||
"sub_path": "machine/Wanhao D9-500 MK3.json"
|
||||
}
|
||||
],
|
||||
"process_list": [
|
||||
@@ -33,6 +81,38 @@
|
||||
{
|
||||
"name": "0.24mm Draft @Wanhao D12-300",
|
||||
"sub_path": "process/0.24mm Draft @Wanhao D12-300.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_wanhao_d9_common",
|
||||
"sub_path": "process/fdm_process_wanhao_d9_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Fine @Wanhao D9",
|
||||
"sub_path": "process/0.12mm Fine @Wanhao D9.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Wanhao D9",
|
||||
"sub_path": "process/0.20mm Standard @Wanhao D9.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Draft @Wanhao D9",
|
||||
"sub_path": "process/0.28mm Draft @Wanhao D9.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_wanhao_d9_mk1_common",
|
||||
"sub_path": "process/fdm_process_wanhao_d9_mk1_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.12mm Fine @Wanhao D9 MK1",
|
||||
"sub_path": "process/0.12mm Fine @Wanhao D9 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Wanhao D9 MK1",
|
||||
"sub_path": "process/0.20mm Standard @Wanhao D9 MK1.json"
|
||||
},
|
||||
{
|
||||
"name": "0.28mm Draft @Wanhao D9 MK1",
|
||||
"sub_path": "process/0.28mm Draft @Wanhao D9 MK1.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [],
|
||||
@@ -48,6 +128,62 @@
|
||||
{
|
||||
"name": "Wanhao D12-300 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D12-300 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_wanhao_d9_common",
|
||||
"sub_path": "machine/fdm_wanhao_d9_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK2 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK3 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK2 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK3 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK2 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK3 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK3 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_wanhao_d9_mk1_common",
|
||||
"sub_path": "machine/fdm_wanhao_d9_mk1_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-300 MK1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-400 MK1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Wanhao D9-500 MK1 0.4 nozzle",
|
||||
"sub_path": "machine/Wanhao D9-500 MK1 0.4 nozzle.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "MXNRpMDaVXj2xUx0",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK1",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9 MK1"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "rq6cPs92KgrUyZrn",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK1 BLTouch kit",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK1 BLTouch kit",
|
||||
"model_id": "Wanhao-D9-300-MK1u2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK1",
|
||||
"model_id": "Wanhao-D9-300-MK1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "w3Cin9es1Jfx0dmR",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK2",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK2",
|
||||
"model_id": "Wanhao-D9-300-MK2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "acFQWZqlt4QSgBPv",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-300 MK3",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-300 MK3",
|
||||
"model_id": "Wanhao-D9-300-MK3",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "DGSNE3AbmlBBG5PY",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK1",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9 MK1"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "WcKY7v24ewtzPfnU",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK1 BLTouch kit",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK1 BLTouch kit",
|
||||
"model_id": "Wanhao-D9-400-MK1u2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK1",
|
||||
"model_id": "Wanhao-D9-400-MK1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "jn1FEJFeN7S2gEbD",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK2",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK2",
|
||||
"model_id": "Wanhao-D9-400-MK2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "2kFyH1E3tqMWtDmG",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-400 MK3",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"400x0",
|
||||
"400x400",
|
||||
"0x400"
|
||||
],
|
||||
"printable_height": "400",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-400 MK3",
|
||||
"model_id": "Wanhao-D9-400-MK3",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK1 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "nj0TfnDKHb4wFX1R",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK1",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9 MK1"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "Hmrnlh6pJzdO2dIJ",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK1 BLTouch kit",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK1 BLTouch kit",
|
||||
"model_id": "Wanhao-D9-500-MK1u2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK1",
|
||||
"model_id": "Wanhao-D9-500-MK1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "g2GSmhWJLFDwqzFI",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK2",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK2",
|
||||
"model_id": "Wanhao-D9-500-MK2",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Wanhao D9-500 MK3 0.4 nozzle",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "F7l90Rgr8Ni0sQva",
|
||||
"instantiation": "true",
|
||||
"printer_model": "Wanhao D9-500 MK3",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"500x0",
|
||||
"500x500",
|
||||
"0x500"
|
||||
],
|
||||
"printable_height": "500",
|
||||
"default_print_profile": "0.20mm Standard @Wanhao D9"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Wanhao D9-500 MK3",
|
||||
"model_id": "Wanhao-D9-500-MK3",
|
||||
"nozzle_diameter": "0.4",
|
||||
"machine_tech": "FFF",
|
||||
"family": "Wanhao",
|
||||
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_wanhao_d9_common",
|
||||
"inherits": "fdm_wanhao_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "marlin2",
|
||||
"use_relative_e_distances": "1",
|
||||
"emit_machine_limits_to_gcode": "0",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printer_variant": "0.4",
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"300",
|
||||
"300"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"300",
|
||||
"300"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"5",
|
||||
"5"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"25",
|
||||
"25"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"100"
|
||||
],
|
||||
"machine_max_acceleration_e": [
|
||||
"3000",
|
||||
"3000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"1000",
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"1000",
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"800",
|
||||
"800"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.4",
|
||||
"0.4"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"1",
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"2.0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"25"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"25"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"wipe": [
|
||||
"0"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"machine_start_gcode": "; Wanhao Duplicator 9 start G-code, for the Marlin 2.1 firmwares at github.com/Le-Syl21/WANHAO-Duplicator-9\nG21 ; millimetres\nG90 ; absolute coordinates\nM83 ; relative extrusion\nM140 S[bed_temperature_initial_layer_single] ; heat the bed\nM104 S150 ; warm the nozzle without letting it ooze\nG91 ; a print stopped by hand can leave the nozzle down on the bed\nG1 Z10 F300 ; so raise it before homing: a BLTouch needs 10 mm to deploy\nG90\nM280 P0 S160 ; BLTouch: clear an alarm and stow the pin\nG28 ; home all axes (this turns bed levelling off)\nM420 S1 ; turn the bed mesh saved from the screen back on\nG1 Z10 F300\nM104 S[nozzle_temperature_initial_layer] ; start the nozzle now, the bed is still heating\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed\nM109 S[nozzle_temperature_initial_layer] ; and confirm the nozzle\nG92 E0\nG1 X15 Y20 Z0.3 F3000 ; start of the priming line\nG1 Y140 E9.0 F1200 ; draw a line of filament\nG1 X15.5 F3000\nG1 Y20 E9.0 F1200 ; and back, next to it\nG92 E0\nG1 X22 F6000 ; wipe sideways to snap the string\nG1 Z2 F300 ; lift, so the line does not stick to the nozzle",
|
||||
"machine_end_gcode": "; Wanhao Duplicator 9 end G-code\nM104 S0 ; nozzle heater off\nM140 S0 ; bed heater off\nM107 ; fan off\nG91 ; relative moves\nG1 E-2 F1500 ; release the pressure in the nozzle\nG1 Z10 F300 ; lift the nozzle\nG90 ; absolute moves\nG1 X5 Y{print_bed_max[1] - 10} F3000 ; bring the bed to the front\nM84 X Y E ; motors off, Z keeps its position",
|
||||
"layer_change_gcode": "G92 E0",
|
||||
"machine_pause_gcode": "M600",
|
||||
"default_filament_profile": [
|
||||
"Generic PLA @System"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_wanhao_d9_mk1_common",
|
||||
"inherits": "fdm_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"machine_start_gcode": "; Wanhao Duplicator 9 start G-code, for the Marlin 2.1 firmwares at github.com/Le-Syl21/WANHAO-Duplicator-9\nG21 ; millimetres\nG90 ; absolute coordinates\nM83 ; relative extrusion\nM140 S[bed_temperature_initial_layer_single] ; heat the bed\nM104 S150 ; warm the nozzle without letting it ooze\nG91 ; a print stopped by hand can leave the nozzle down on the bed\nG1 Z10 F300 ; clear the bed before homing\nG90\nG28 ; home all axes (this turns bed levelling off)\nM420 S1 ; turn the bed mesh saved from the screen back on\nG1 Z10 F300\nM104 S[nozzle_temperature_initial_layer] ; start the nozzle now, the bed is still heating\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed\nM109 S[nozzle_temperature_initial_layer] ; and confirm the nozzle\nG92 E0\nG1 X15 Y20 Z0.3 F3000 ; start of the priming line\nG1 Y140 E9.0 F1200 ; draw a line of filament\nG1 X15.5 F3000\nG1 Y20 E9.0 F1200 ; and back, next to it\nG92 E0\nG1 X22 F6000 ; wipe sideways to snap the string\nG1 Z2 F300 ; lift, so the line does not stick to the nozzle",
|
||||
"machine_max_acceleration_x": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_e": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"500",
|
||||
"500"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"500",
|
||||
"500"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.12mm Fine @Wanhao D9 MK1",
|
||||
"inherits": "fdm_process_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "EClNN5UDWbLACTuz",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"initial_layer_print_height": "0.14",
|
||||
"top_shell_layers": "4",
|
||||
"bottom_shell_layers": "4",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.12mm Fine @Wanhao D9",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "0hvsKsPO55TlduZR",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.12",
|
||||
"initial_layer_print_height": "0.14",
|
||||
"top_shell_layers": "4",
|
||||
"bottom_shell_layers": "4",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"Wanhao D9-500 MK3 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Wanhao D9 MK1",
|
||||
"inherits": "fdm_process_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "CXNOj3tPeTUXx81B",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.20",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Wanhao D9",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "UVXxknNxJswqaURQ",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.20",
|
||||
"initial_layer_print_height": "0.24",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"Wanhao D9-500 MK3 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.28mm Draft @Wanhao D9 MK1",
|
||||
"inherits": "fdm_process_wanhao_d9_mk1_common",
|
||||
"from": "system",
|
||||
"setting_id": "omfIWwVnQVVxPrtb",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.28",
|
||||
"initial_layer_print_height": "0.34",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.28mm Draft @Wanhao D9",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"setting_id": "FEJqq1ylXWqaBPR6",
|
||||
"instantiation": "true",
|
||||
"layer_height": "0.28",
|
||||
"initial_layer_print_height": "0.34",
|
||||
"top_shell_layers": "3",
|
||||
"bottom_shell_layers": "3",
|
||||
"compatible_printers": [
|
||||
"Wanhao D9-300 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-400 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-500 MK1 BLTouch kit 0.4 nozzle",
|
||||
"Wanhao D9-300 MK2 0.4 nozzle",
|
||||
"Wanhao D9-400 MK2 0.4 nozzle",
|
||||
"Wanhao D9-500 MK2 0.4 nozzle",
|
||||
"Wanhao D9-300 MK3 0.4 nozzle",
|
||||
"Wanhao D9-400 MK3 0.4 nozzle",
|
||||
"Wanhao D9-500 MK3 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_wanhao_d9_common",
|
||||
"inherits": "fdm_process_wanhao_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"line_width": "0.4",
|
||||
"initial_layer_line_width": "0.6",
|
||||
"wall_loops": "2",
|
||||
"infill_wall_overlap": "15%",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "gyroid",
|
||||
"outer_wall_speed": "25",
|
||||
"inner_wall_speed": "40",
|
||||
"sparse_infill_speed": "50",
|
||||
"internal_solid_infill_speed": "50",
|
||||
"top_surface_speed": "40",
|
||||
"gap_infill_speed": "40",
|
||||
"bridge_speed": "50",
|
||||
"support_speed": "35",
|
||||
"initial_layer_speed": "25",
|
||||
"initial_layer_infill_speed": "25",
|
||||
"travel_speed": "100",
|
||||
"default_acceleration": "1000",
|
||||
"outer_wall_acceleration": "1000",
|
||||
"inner_wall_acceleration": "1000",
|
||||
"top_surface_acceleration": "1000",
|
||||
"sparse_infill_acceleration": "1000",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"bridge_acceleration": "1000",
|
||||
"travel_acceleration": "1000",
|
||||
"default_jerk": "0",
|
||||
"skirt_loops": "2",
|
||||
"skirt_distance": "4",
|
||||
"brim_type": "no_brim",
|
||||
"enable_support": "0",
|
||||
"enable_arc_fitting": "0"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_wanhao_d9_mk1_common",
|
||||
"inherits": "fdm_process_wanhao_d9_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"default_acceleration": "500",
|
||||
"outer_wall_acceleration": "500",
|
||||
"inner_wall_acceleration": "500",
|
||||
"top_surface_acceleration": "500",
|
||||
"sparse_infill_acceleration": "500",
|
||||
"initial_layer_acceleration": "500",
|
||||
"bridge_acceleration": "500",
|
||||
"travel_acceleration": "500"
|
||||
}
|
||||
@@ -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"})
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
#define ORCA_JSON_KEY_UPDATE_TIME "updated_time"
|
||||
#define ORCA_JSON_KEY_CREATED_TIME "created_time"
|
||||
#define BBL_JSON_KEY_INHERITS "inherits"
|
||||
#define BBL_JSON_KEY_INCLUDES "include"
|
||||
#define BBL_JSON_KEY_INSTANTIATION "instantiation"
|
||||
#define BBL_JSON_KEY_NOZZLE_DIAMETER "nozzle_diameter"
|
||||
#define BBL_JSON_KEY_PRINTER_TECH "machine_tech"
|
||||
|
||||
@@ -6598,7 +6598,8 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
|
||||
// now, or deserialized from the vendor's cache; the code is shared so a
|
||||
// cache-loaded bundle cannot come out different from a JSON-loaded one.
|
||||
// Resolves `inherits` against the presets loaded before this one
|
||||
// (config_maps) or against base_bundle's filament library, flattens, validates
|
||||
// (config_maps) or against base_bundle's filament library, layers each
|
||||
// `include` (include_maps) under the preset's own keys, flattens, validates
|
||||
// and registers the preset. Returns the reason loading failed, empty on
|
||||
// success.
|
||||
std::string PresetBundle::load_vendor_preset(
|
||||
@@ -6607,9 +6608,10 @@ std::string PresetBundle::load_vendor_preset(
|
||||
const PresetBundle* base_bundle,
|
||||
LoadConfigBundleAttributes flags,
|
||||
ConfigSubstitutionContext& substitution_context, PresetsConfigSubstitutions& substitutions,
|
||||
std::map<std::string, DynamicPrintConfig>& config_maps, std::map<std::string, std::string>& filament_id_maps,
|
||||
std::map<std::string, DynamicPrintConfig>& config_maps, std::map<std::string, DynamicPrintConfig>& include_maps,
|
||||
std::map<std::string, std::string>& filament_id_maps,
|
||||
PresetCollection* presets_collection, size_t& count, bool is_from_lib,
|
||||
const std::set<std::string>* retain_configs)
|
||||
const std::set<std::string>* retain_configs, const std::set<std::string>* retain_includes)
|
||||
{
|
||||
const VendorProfile* current_vendor_profile = &this->vendors.at(vendor_name);
|
||||
const std::string subfile = path + "/" + vendor_name + "/" + entry.sub_path;
|
||||
@@ -6652,14 +6654,30 @@ std::string PresetBundle::load_vendor_preset(
|
||||
return reason;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (presets_collection->type() == Preset::TYPE_PRINTER)
|
||||
default_config = &presets_collection->default_preset_for(entry.config_src).config;
|
||||
else
|
||||
default_config = &presets_collection->default_preset().config;
|
||||
}
|
||||
else
|
||||
default_config = &presets_collection->default_preset_for(entry.config_src).config;
|
||||
config = *default_config;
|
||||
// Layer each included preset's own keys over the parent, in the order listed;
|
||||
// this preset's own keys go on top.
|
||||
for (const std::string& name : entry.includes) {
|
||||
auto it = include_maps.find(name);
|
||||
if (it == include_maps.end()) {
|
||||
++m_errors;
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": can not find include " << name << " for " << preset_name;
|
||||
continue;
|
||||
}
|
||||
config.apply(it->second);
|
||||
}
|
||||
config.apply(entry.config_src);
|
||||
// Record what a base states, its diff against the default, for the presets
|
||||
// that include it. It is taken before extend_default_config_length pads every
|
||||
// per-variant key to the base's variant count: the padded defaults would
|
||||
// otherwise override the values each includer inherits.
|
||||
if (entry.instantiation == "false" && (retain_includes == nullptr || retain_includes->count(preset_name) != 0)) {
|
||||
DynamicPrintConfig included;
|
||||
included.apply_only(config, config.diff(presets_collection->default_preset_for(config).config));
|
||||
include_maps.emplace(preset_name, std::move(included));
|
||||
}
|
||||
extend_default_config_length(config, true, *default_config);
|
||||
if (entry.instantiation == "false" && "Template" != vendor_name) {
|
||||
// Report configuration fields, which are misplaced into a wrong group.
|
||||
@@ -7118,6 +7136,15 @@ std::pair<PresetsConfigSubstitutions, size_t> PresetBundle::load_vendor_configs_
|
||||
}
|
||||
entry.name = key_values[BBL_JSON_KEY_NAME];
|
||||
entry.description = key_values[BBL_JSON_KEY_DESCRIPTION];
|
||||
// A file that states no instantiation and is named as G-code, or has no
|
||||
// name, is a template that is only there to be included. A nameless one
|
||||
// goes by its name in the vendor index.
|
||||
if (auto it = key_values.find(BBL_JSON_KEY_INSTANTIATION);
|
||||
(it == key_values.end() || it->second.empty()) && (entry.name.empty() || entry.name.find("gcode") != std::string::npos)) {
|
||||
key_values[BBL_JSON_KEY_INSTANTIATION] = "false";
|
||||
if (entry.name.empty())
|
||||
entry.name = subfile_iter.first;
|
||||
}
|
||||
if(key_values.find(BBL_JSON_KEY_INSTANTIATION) == key_values.end())
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": Missing instantiation attribute for " << entry.name;
|
||||
@@ -7146,6 +7173,20 @@ std::pair<PresetsConfigSubstitutions, size_t> PresetBundle::load_vendor_configs_
|
||||
return reason;
|
||||
}
|
||||
}
|
||||
if (auto it = key_values.find(BBL_JSON_KEY_INCLUDES); it != key_values.end()) {
|
||||
// An array of names, or one bare name; load_from_json kept the JSON text.
|
||||
nlohmann::json includes = nlohmann::json::parse(it->second);
|
||||
if (!includes.is_array())
|
||||
includes = nlohmann::json::array({std::move(includes)});
|
||||
for (const auto& name : includes) {
|
||||
if (name.is_string())
|
||||
entry.includes.push_back(name.get<std::string>());
|
||||
else {
|
||||
++m_errors;
|
||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": invalid include " << name.dump() << " for " << entry.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (key_values.find(ORCA_JSON_KEY_RENAMED_FROM) != key_values.end()) {
|
||||
if (!unescape_strings_cstyle(key_values[ORCA_JSON_KEY_RENAMED_FROM], entry.renamed_from)) {
|
||||
BOOST_LOG_TRIVIAL(error) << "Error in a Config \"" << dir << "\": The preset \"" << entry.name
|
||||
@@ -7162,7 +7203,7 @@ std::pair<PresetsConfigSubstitutions, size_t> PresetBundle::load_vendor_configs_
|
||||
return reason;
|
||||
};
|
||||
|
||||
std::map<std::string, DynamicPrintConfig> configs;
|
||||
std::map<std::string, DynamicPrintConfig> configs, include_maps;
|
||||
std::map<std::string, std::string> filament_id_maps;
|
||||
// Orca: whether to (re)write the vendor's cache after this parse, leaving it
|
||||
// in step with the profile so the next run reads it instead. It is written
|
||||
@@ -7179,6 +7220,7 @@ std::pair<PresetsConfigSubstitutions, size_t> PresetBundle::load_vendor_configs_
|
||||
auto load_subfiles = [&](std::vector<std::pair<std::string, std::string>>& subfiles,
|
||||
std::vector<CachedPreset>& entries, const char* kind, bool is_from_lib = false) {
|
||||
configs.clear();
|
||||
include_maps.clear();
|
||||
filament_id_maps.clear();
|
||||
for (auto& subfile : subfiles) {
|
||||
CachedPreset entry;
|
||||
@@ -7186,8 +7228,8 @@ std::pair<PresetsConfigSubstitutions, size_t> PresetBundle::load_vendor_configs_
|
||||
if (reason.empty()) {
|
||||
const int errors_before_install = m_errors;
|
||||
reason = load_vendor_preset(entry, dir, vendor_name, base_bundle, flags,
|
||||
substitution_context, substitutions, configs, filament_id_maps, presets,
|
||||
presets_loaded, is_from_lib);
|
||||
substitution_context, substitutions, configs, include_maps, filament_id_maps,
|
||||
presets, presets_loaded, is_from_lib);
|
||||
install_errors += m_errors - errors_before_install;
|
||||
}
|
||||
if (!reason.empty()) {
|
||||
@@ -7982,26 +8024,29 @@ bool PresetBundle::load_vendor_cache(const std::string& cache_path, const std::s
|
||||
// parsed), so no substitutions are reported, as before.
|
||||
ConfigSubstitutionContext substitution_context { ForwardCompatibilitySubstitutionRule::EnableSilent };
|
||||
PresetsConfigSubstitutions substitutions;
|
||||
std::map<std::string, DynamicPrintConfig> configs;
|
||||
std::map<std::string, DynamicPrintConfig> configs, include_maps;
|
||||
std::map<std::string, std::string> filament_id_maps;
|
||||
const std::string path = boost::filesystem::path(cache_path).parent_path().string();
|
||||
size_t count = 0;
|
||||
auto install_entries = [&](const std::vector<CachedPreset>& entries, PresetCollection* presets, bool is_from_lib) {
|
||||
configs.clear();
|
||||
include_maps.clear();
|
||||
filament_id_maps.clear();
|
||||
// Only configs of presets that other entries inherit are ever looked
|
||||
// up again; registering just those skips one full config copy for
|
||||
// every leaf preset. The library's filaments are all retained — they
|
||||
// become the m_config_maps other vendors resolve against.
|
||||
std::set<std::string> inherited;
|
||||
for (const CachedPreset& entry : entries)
|
||||
// Only configs of presets that other entries inherit or include are
|
||||
// ever looked up again; registering just those skips one full config
|
||||
// copy for every leaf preset. The library's filaments are all retained
|
||||
// — they become the m_config_maps other vendors resolve against.
|
||||
std::set<std::string> inherited, included;
|
||||
for (const CachedPreset& entry : entries) {
|
||||
if (! entry.inherits.empty())
|
||||
inherited.insert(entry.inherits);
|
||||
included.insert(entry.includes.begin(), entry.includes.end());
|
||||
}
|
||||
const std::set<std::string>* retain_configs = is_from_lib ? nullptr : &inherited;
|
||||
for (const CachedPreset& entry : entries) {
|
||||
const std::string reason = load_vendor_preset(entry, path, vendor_name,
|
||||
base_bundle, LoadConfigBundleAttribute::LoadSystem, substitution_context, substitutions,
|
||||
configs, filament_id_maps, presets, count, is_from_lib, retain_configs);
|
||||
configs, include_maps, filament_id_maps, presets, count, is_from_lib, retain_configs, &included);
|
||||
if (! reason.empty())
|
||||
throw std::runtime_error("entry " + entry.name + " failed to install: " + reason);
|
||||
}
|
||||
|
||||
@@ -634,22 +634,24 @@ private:
|
||||
// load_vendor_configs_from_json reads a cache.
|
||||
bool load_vendor_cache(const boost::filesystem::path& dir, const std::string& vendor_name, const PresetBundle* base_bundle);
|
||||
|
||||
// Load one source-form preset entry into this bundle: resolve `inherits`,
|
||||
// flatten, validate and register the preset. Returns the reason loading
|
||||
// failed, empty on success. See the definition for the sharing contract
|
||||
// between the JSON parse and the cache load.
|
||||
// retain_configs, when non-null, names the only presets registered into
|
||||
// config_maps (a full config copy each). The cache load passes the names its
|
||||
// entries inherit — the only ones ever looked up again; the JSON parse
|
||||
// retains all, not knowing what later subfiles inherit.
|
||||
// Load one source-form preset entry into this bundle: resolve `inherits`
|
||||
// and `include`, flatten, validate and register the preset. Returns the
|
||||
// reason loading failed, empty on success. See the definition for the
|
||||
// sharing contract between the JSON parse and the cache load.
|
||||
// retain_configs / retain_includes, when non-null, name the only presets
|
||||
// registered into config_maps / include_maps (a config copy each). The
|
||||
// cache load passes the names its entries inherit / include — the only
|
||||
// ones ever looked up again; the JSON parse retains all, not knowing what
|
||||
// later subfiles name.
|
||||
std::string load_vendor_preset(const CachedPreset& entry,
|
||||
const std::string& path, const std::string& vendor_name,
|
||||
const PresetBundle* base_bundle,
|
||||
LoadConfigBundleAttributes flags,
|
||||
ConfigSubstitutionContext& substitution_context, PresetsConfigSubstitutions& substitutions,
|
||||
std::map<std::string, DynamicPrintConfig>& config_maps, std::map<std::string, std::string>& filament_id_maps,
|
||||
std::map<std::string, DynamicPrintConfig>& config_maps, std::map<std::string, DynamicPrintConfig>& include_maps,
|
||||
std::map<std::string, std::string>& filament_id_maps,
|
||||
PresetCollection* presets_collection, size_t& count, bool is_from_lib,
|
||||
const std::set<std::string>* retain_configs = nullptr);
|
||||
const std::set<std::string>* retain_configs = nullptr, const std::set<std::string>* retain_includes = nullptr);
|
||||
|
||||
// Clear every collection's m_printer_hold_alias, which reset() leaves alone.
|
||||
void clear_printer_hold_aliases();
|
||||
|
||||
@@ -254,7 +254,7 @@ constexpr uint32_t CACHE_MAGIC = 0x4F52435A; // "ORCZ"
|
||||
// save_entries below), or a change to the cache's own layout or the
|
||||
// meaning of its stamps. Option-schema drift is NOT such a change — the
|
||||
// dictionary handles it, which is why this no longer moves every release.
|
||||
constexpr uint32_t CACHE_VERSION = 1;
|
||||
constexpr uint32_t CACHE_VERSION = 2;
|
||||
|
||||
// A stamp-string read that refuses an absurd length before allocating anything.
|
||||
// The stamps are read from files named from the outside (peek_version is
|
||||
@@ -325,7 +325,7 @@ void visit_entry(Archive& ar, Entry& e, ConfigFn&& config)
|
||||
{
|
||||
ar(e.name, e.sub_path);
|
||||
config();
|
||||
ar(e.inherits, e.description, e.instantiation, e.setting_id, e.filament_id, e.renamed_from);
|
||||
ar(e.inherits, e.includes, e.description, e.instantiation, e.setting_id, e.filament_id, e.renamed_from);
|
||||
}
|
||||
|
||||
// The count comes from a file that has already passed magic and CRC, but a
|
||||
|
||||
@@ -107,12 +107,13 @@ void load_config(cereal::BinaryInputArchive& ar, DynamicPrintConfig& config, con
|
||||
// comes after.
|
||||
void skip_config(cereal::BinaryInputArchive& ar, const CacheDictionary& dict);
|
||||
|
||||
// One preset as its JSON subfile states it: the config diff, the name of the
|
||||
// preset it inherits, and the parse metadata — everything the parse phase of
|
||||
// load_vendor_configs_from_json extracts and nothing it derives. Inheritance
|
||||
// is resolved when the entry is installed, against whatever filament library
|
||||
// is loaded then, so a cache carries no other vendor's values and no other
|
||||
// vendor's update can make it stale.
|
||||
// One preset as its JSON subfile states it: the config diff, the names of the
|
||||
// preset it inherits and the presets it includes, and the parse metadata —
|
||||
// everything the parse phase of load_vendor_configs_from_json extracts and
|
||||
// nothing it derives. Inheritance and includes are resolved when the entry is
|
||||
// installed, against whatever filament library is loaded then, so a cache
|
||||
// carries no other vendor's values and no other vendor's update can make it
|
||||
// stale.
|
||||
// Written and read by visit_entry in PresetCacheFormat.cpp, which lists every
|
||||
// field below in this order — once, for the save, the load and the name peek alike.
|
||||
struct CachedPreset
|
||||
@@ -121,6 +122,7 @@ struct CachedPreset
|
||||
std::string sub_path; // path under the vendor's directory
|
||||
DynamicPrintConfig config_src; // the preset's own diff, nothing inherited
|
||||
std::string inherits;
|
||||
std::vector<std::string> includes; // layered under config_src, in this order
|
||||
std::string description;
|
||||
std::string instantiation; // "true"/"false" as stated; anything else was already counted as a parse error
|
||||
std::string setting_id;
|
||||
|
||||
@@ -9127,6 +9127,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
|
||||
value = "tree(auto)";
|
||||
} else if (opt_key == "support_base_pattern" && value == "none") {
|
||||
value = "hollow";
|
||||
} else if (opt_key == "tree_support_wall_count" && value == "-1") {
|
||||
value = "0";
|
||||
} else if (opt_key == "different_settings_to_system") {
|
||||
std::string copy_value = value;
|
||||
copy_value.erase(std::remove(copy_value.begin(), copy_value.end(), '\"'), copy_value.end()); // remove '"' in string
|
||||
|
||||
@@ -286,6 +286,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/FilamentMapDialog.hpp
|
||||
GUI/IconManager.cpp
|
||||
GUI/IconManager.hpp
|
||||
GUI/IdleScheduler.cpp
|
||||
GUI/IdleScheduler.hpp
|
||||
GUI/ImageGrid.cpp
|
||||
GUI/ImageGrid.h
|
||||
GUI/ImGuiWrapper.cpp
|
||||
@@ -347,6 +349,10 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/KBShortcutsDialog.hpp
|
||||
GUI/KeyChord.cpp
|
||||
GUI/KeyChord.hpp
|
||||
GUI/Lazy.cpp
|
||||
GUI/Lazy.hpp
|
||||
GUI/LazyPage.cpp
|
||||
GUI/LazyPage.hpp
|
||||
GUI/LibVGCode/LibVGCodeWrapper.hpp
|
||||
GUI/LibVGCode/LibVGCodeWrapper.cpp
|
||||
GUI/LinuxDisplayBackend.cpp
|
||||
@@ -433,6 +439,7 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/Plater.hpp
|
||||
GUI/PlateSettingsDialog.cpp
|
||||
GUI/PlateSettingsDialog.hpp
|
||||
GUI/PrebuildQueue.hpp
|
||||
GUI/Preferences.cpp
|
||||
GUI/Preferences.hpp
|
||||
GUI/PresetBundleDialog.cpp
|
||||
@@ -512,6 +519,7 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/SliceInfoPanel.hpp
|
||||
GUI/SlicingProgressNotification.cpp
|
||||
GUI/SlicingProgressNotification.hpp
|
||||
GUI/StagedBuild.hpp
|
||||
GUI/StatusPanel.cpp
|
||||
GUI/StatusPanel.hpp
|
||||
GUI/StepMeshDialog.cpp
|
||||
|
||||
@@ -863,17 +863,27 @@ void AuxiliaryPanel::init_tabpanel()
|
||||
m_tabpanel->SetBackgroundColour(wxColour("#FEFFFF"));
|
||||
m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [](wxBookCtrlEvent &e) { /* Event handling */ });
|
||||
|
||||
m_designer_panel = new DesignerPanel(m_tabpanel, AuxiliaryFolderType::DESIGNER);
|
||||
m_pictures_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::MODEL_PICTURE);
|
||||
m_bill_of_materials_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::BILL_OF_MATERIALS);
|
||||
m_assembly_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::ASSEMBLY_GUIDE);
|
||||
m_others_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::OTHERS);
|
||||
|
||||
m_tabpanel->AddPage(m_designer_panel, _L("Basic Info"), true);
|
||||
m_tabpanel->AddPage(m_pictures_panel, _L("Pictures"), false);
|
||||
m_tabpanel->AddPage(m_bill_of_materials_panel, _L("Bill of Materials"), false);
|
||||
m_tabpanel->AddPage(m_assembly_panel, _L("Assembly Guide"), false);
|
||||
m_tabpanel->AddPage(m_others_panel, _L("Others"), false);
|
||||
add_build_step([this] {
|
||||
m_designer_panel = new DesignerPanel(m_tabpanel, AuxiliaryFolderType::DESIGNER);
|
||||
m_tabpanel->AddPage(m_designer_panel, _L("Basic Info"), true);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_pictures_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::MODEL_PICTURE);
|
||||
m_tabpanel->AddPage(m_pictures_panel, _L("Pictures"), false);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_bill_of_materials_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::BILL_OF_MATERIALS);
|
||||
m_tabpanel->AddPage(m_bill_of_materials_panel, _L("Bill of Materials"), false);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_assembly_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::ASSEMBLY_GUIDE);
|
||||
m_tabpanel->AddPage(m_assembly_panel, _L("Assembly Guide"), false);
|
||||
});
|
||||
add_build_step([this] {
|
||||
m_others_panel = new AuFolderPanel(m_tabpanel, AuxiliaryFolderType::OTHERS);
|
||||
m_tabpanel->AddPage(m_others_panel, _L("Others"), false);
|
||||
Layout();
|
||||
});
|
||||
}
|
||||
|
||||
wxWindow *AuxiliaryPanel::create_side_tools()
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "slic3r/GUI/UpgradePanel.hpp"
|
||||
#include "slic3r/GUI/AmsWidgets.hpp"
|
||||
#include "Widgets/SideTools.hpp"
|
||||
#include "StagedBuild.hpp"
|
||||
|
||||
#define AUFILE_GREY700 wxColour(107, 107, 107)
|
||||
#define AUFILE_GREY500 wxColour(158, 158, 158)
|
||||
@@ -194,7 +195,7 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class AuxiliaryPanel : public wxPanel
|
||||
class AuxiliaryPanel : public wxPanel, public StagedBuild
|
||||
{
|
||||
private:
|
||||
Tabbook *m_tabpanel = {nullptr};
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
#include "libslic3r/CAD/CadDocument.hpp"
|
||||
#include "slic3r/GUI/CAD/DesignInteraction.hpp" // CadLevel: what one Esc press means
|
||||
#include "slic3r/GUI/Lazy.hpp"
|
||||
|
||||
class ComboBox; // Orca dropdown (Widgets/ComboBox.hpp) — replaces wxChoice everywhere here
|
||||
class StaticBox; // Orca rounded card frame (Widgets/StaticBox.hpp)
|
||||
@@ -46,7 +47,7 @@ class DesignCanvas;
|
||||
// Design (CAD) tab: a sketch-first, Onshape-style form-driven CAD panel.
|
||||
// Sketch and Extrude are independent tools: the user creates a Sketch first,
|
||||
// then selects it and Extrudes to produce a solid.
|
||||
class DesignPanel : public wxPanel
|
||||
class DesignPanel : public wxPanel, public LazyInstance<DesignPanel>
|
||||
{
|
||||
public:
|
||||
explicit DesignPanel(wxWindow* parent);
|
||||
|
||||
@@ -1989,11 +1989,10 @@ json action_set_feature_expr(DesignPanel* panel, const json& params)
|
||||
// Dispatch one parsed request ON THE MAIN THREAD. Returns a JSON-RPC reply string.
|
||||
std::string handle_on_main(const std::string& method, const json& params, const json& id)
|
||||
{
|
||||
MainFrame* mf = wxGetApp().mainframe;
|
||||
// The panel is built on first use, and in a headless session nobody clicks the tab that
|
||||
// would build it -- so build it here rather than refusing. Safe: this runs on the main
|
||||
// thread (see the CallAfter that dispatches us).
|
||||
DesignPanel* panel = mf ? mf->ensure_design_panel() : nullptr;
|
||||
DesignPanel* panel = DesignPanel::ensure();
|
||||
if (!panel)
|
||||
return rpc_error(id, -32001, "Design panel not ready");
|
||||
|
||||
|
||||
@@ -491,14 +491,15 @@ void CalibrationPanel::init_tabpanel() {
|
||||
selected);
|
||||
}
|
||||
|
||||
for (int i = 0; i < (int)CALI_MODE_COUNT; i++)
|
||||
add_build_steps_of(*m_cali_panels[i]);
|
||||
|
||||
// ORCA use standard paddings and keep arrow icon for consistent look between sidebars
|
||||
//for (int i = 0; i < (int)CALI_MODE_COUNT; i++)
|
||||
// m_tabpanel->SetPageImage(i, "");
|
||||
|
||||
//auto padding_size = m_tabpanel->GetBtnsListCtrl()->GetPaddingSize(0);
|
||||
//m_tabpanel->GetBtnsListCtrl()->SetPaddingSize({ FromDIP(15), padding_size.y });
|
||||
|
||||
m_initialized = true;
|
||||
}
|
||||
|
||||
void CalibrationPanel::init_timer()
|
||||
@@ -534,6 +535,8 @@ void CalibrationPanel::update_print_error_info(int code, std::string msg, std::s
|
||||
}
|
||||
|
||||
void CalibrationPanel::update_all() {
|
||||
// Every wizard's pages exist once the last build step has run.
|
||||
if (!built()) return;
|
||||
|
||||
NetworkAgent* m_agent = wxGetApp().getAgent();
|
||||
Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
|
||||
@@ -597,7 +600,7 @@ void CalibrationPanel::update_all() {
|
||||
|
||||
void CalibrationPanel::show_status(int status)
|
||||
{
|
||||
if (!m_initialized) return;
|
||||
if (!built()) return;
|
||||
if (last_status == status)return;
|
||||
last_status = status;
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "CalibrationWizard.hpp"
|
||||
#include "Tabbook.hpp"
|
||||
#include "Lazy.hpp"
|
||||
//#include "Widgets/SideTools.hpp"
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
@@ -88,7 +89,7 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class CalibrationPanel : public wxPanel
|
||||
class CalibrationPanel : public wxPanel, public StagedBuild, public LazyInstance<CalibrationPanel>
|
||||
{
|
||||
public:
|
||||
CalibrationPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL);
|
||||
@@ -109,7 +110,6 @@ protected:
|
||||
|
||||
|
||||
int last_status;
|
||||
bool m_initialized { false };
|
||||
std::string last_conn_type = "undedefined";
|
||||
MachineObject* obj{ nullptr };
|
||||
MachineObject* last_obj { nullptr };
|
||||
|
||||
@@ -130,6 +130,15 @@ CalibrationWizard::~CalibrationWizard()
|
||||
;
|
||||
}
|
||||
|
||||
void CalibrationWizard::add_page_step(CalibrationWizardPageStep*& step, std::function<CalibrationWizardPage*()> make)
|
||||
{
|
||||
add_build_step([this, &step, make = std::move(make)] {
|
||||
step = new CalibrationWizardPageStep(make());
|
||||
m_all_pages_sizer->Add(step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
step->page->Hide();
|
||||
});
|
||||
}
|
||||
|
||||
void CalibrationWizard::on_cali_job_finished(wxCommandEvent& event)
|
||||
{
|
||||
this->on_cali_job_finished(event.GetString());
|
||||
@@ -520,33 +529,28 @@ void PressureAdvanceWizard::on_cali_job_finished(wxString evt_data)
|
||||
|
||||
void PressureAdvanceWizard::create_pages()
|
||||
{
|
||||
start_step = new CalibrationWizardPageStep(new CalibrationPAStartPage(m_scrolledWindow));
|
||||
preset_step = new CalibrationWizardPageStep(new CalibrationPresetPage(m_scrolledWindow, m_mode, false));
|
||||
cali_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode));
|
||||
save_step = new CalibrationWizardPageStep(new CalibrationPASavePage(m_scrolledWindow));
|
||||
add_page_step(start_step, [this] { return new CalibrationPAStartPage(m_scrolledWindow); });
|
||||
add_page_step(preset_step, [this] { return new CalibrationPresetPage(m_scrolledWindow, m_mode, false); });
|
||||
add_page_step(cali_step, [this] { return new CalibrationCaliPage(m_scrolledWindow, m_mode); });
|
||||
add_page_step(save_step, [this] { return new CalibrationPASavePage(m_scrolledWindow); });
|
||||
|
||||
m_all_pages_sizer->Add(start_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(preset_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(cali_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(save_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
add_build_step([this] {
|
||||
m_page_steps.push_back(start_step);
|
||||
m_page_steps.push_back(preset_step);
|
||||
m_page_steps.push_back(cali_step);
|
||||
m_page_steps.push_back(save_step);
|
||||
|
||||
for (int i = 0; i < m_page_steps.size() -1; i++) {
|
||||
m_page_steps[i]->chain(m_page_steps[i+1]);
|
||||
}
|
||||
|
||||
m_page_steps.push_back(start_step);
|
||||
m_page_steps.push_back(preset_step);
|
||||
m_page_steps.push_back(cali_step);
|
||||
m_page_steps.push_back(save_step);
|
||||
for (int i = 0; i < m_page_steps.size(); i++) {
|
||||
m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &PressureAdvanceWizard::on_cali_action, this);
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_page_steps.size() -1; i++) {
|
||||
m_page_steps[i]->chain(m_page_steps[i+1]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_page_steps.size(); i++) {
|
||||
m_page_steps[i]->page->Hide();
|
||||
m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &PressureAdvanceWizard::on_cali_action, this);
|
||||
}
|
||||
|
||||
if (!m_page_steps.empty())
|
||||
show_step(m_page_steps.front());
|
||||
if (!m_page_steps.empty())
|
||||
show_step(m_page_steps.front());
|
||||
});
|
||||
}
|
||||
|
||||
void PressureAdvanceWizard::on_cali_action(wxCommandEvent& evt)
|
||||
@@ -1053,59 +1057,46 @@ FlowRateWizard::FlowRateWizard(wxWindow* parent, wxWindowID id, const wxPoint& p
|
||||
|
||||
void FlowRateWizard::create_pages()
|
||||
{
|
||||
start_step = new CalibrationWizardPageStep(new CalibrationFlowRateStartPage(m_scrolledWindow));
|
||||
preset_step = new CalibrationWizardPageStep(new CalibrationPresetPage(m_scrolledWindow, m_mode, false));
|
||||
add_page_step(start_step, [this] { return new CalibrationFlowRateStartPage(m_scrolledWindow); });
|
||||
add_page_step(preset_step, [this] { return new CalibrationPresetPage(m_scrolledWindow, m_mode, false); });
|
||||
|
||||
// manual
|
||||
cali_coarse_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode, CaliPageType::CALI_PAGE_CALI));
|
||||
coarse_save_step = new CalibrationWizardPageStep(new CalibrationFlowCoarseSavePage(m_scrolledWindow));
|
||||
cali_fine_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode, CaliPageType::CALI_PAGE_FINE_CALI));
|
||||
fine_save_step = new CalibrationWizardPageStep(new CalibrationFlowFineSavePage(m_scrolledWindow));
|
||||
add_page_step(cali_coarse_step, [this] { return new CalibrationCaliPage(m_scrolledWindow, m_mode, CaliPageType::CALI_PAGE_CALI); });
|
||||
add_page_step(coarse_save_step, [this] { return new CalibrationFlowCoarseSavePage(m_scrolledWindow); });
|
||||
add_page_step(cali_fine_step, [this] { return new CalibrationCaliPage(m_scrolledWindow, m_mode, CaliPageType::CALI_PAGE_FINE_CALI); });
|
||||
add_page_step(fine_save_step, [this] { return new CalibrationFlowFineSavePage(m_scrolledWindow); });
|
||||
|
||||
// auto
|
||||
cali_step = new CalibrationWizardPageStep(new CalibrationCaliPage(m_scrolledWindow, m_mode));
|
||||
save_step = new CalibrationWizardPageStep(new CalibrationFlowX1SavePage(m_scrolledWindow));
|
||||
add_page_step(cali_step, [this] { return new CalibrationCaliPage(m_scrolledWindow, m_mode); });
|
||||
add_page_step(save_step, [this] { return new CalibrationFlowX1SavePage(m_scrolledWindow); });
|
||||
|
||||
m_all_pages_sizer->Add(start_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(preset_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(cali_coarse_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(coarse_save_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(cali_fine_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(fine_save_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
add_build_step([this] {
|
||||
m_page_steps.push_back(start_step);
|
||||
m_page_steps.push_back(preset_step);
|
||||
m_page_steps.push_back(cali_coarse_step);
|
||||
m_page_steps.push_back(coarse_save_step);
|
||||
m_page_steps.push_back(cali_fine_step);
|
||||
m_page_steps.push_back(fine_save_step);
|
||||
|
||||
m_all_pages_sizer->Add(cali_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
m_all_pages_sizer->Add(save_step->page, 1, wxEXPAND | wxALL, FromDIP(25));
|
||||
//m_page_steps.push_back(cali_step);
|
||||
//m_page_steps.push_back(save_step);
|
||||
|
||||
m_page_steps.push_back(start_step);
|
||||
m_page_steps.push_back(preset_step);
|
||||
m_page_steps.push_back(cali_coarse_step);
|
||||
m_page_steps.push_back(coarse_save_step);
|
||||
m_page_steps.push_back(cali_fine_step);
|
||||
m_page_steps.push_back(fine_save_step);
|
||||
for (int i = 0; i < m_page_steps.size() - 1; i++) {
|
||||
m_page_steps[i]->chain(m_page_steps[i + 1]);
|
||||
}
|
||||
|
||||
//m_page_steps.push_back(cali_step);
|
||||
//m_page_steps.push_back(save_step);
|
||||
for (int i = 0; i < m_page_steps.size(); i++) {
|
||||
m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this);
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_page_steps.size() - 1; i++) {
|
||||
m_page_steps[i]->chain(m_page_steps[i + 1]);
|
||||
}
|
||||
cali_step->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this);
|
||||
save_step->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this);
|
||||
|
||||
// hide all pages
|
||||
cali_step->page->Hide();
|
||||
save_step->page->Hide();
|
||||
for (int i = 0; i < m_page_steps.size(); i++) {
|
||||
m_page_steps[i]->page->Hide();
|
||||
m_page_steps[i]->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this);
|
||||
}
|
||||
if (!m_page_steps.empty())
|
||||
show_step(m_page_steps.front());
|
||||
|
||||
|
||||
cali_step->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this);
|
||||
save_step->page->Bind(EVT_CALI_ACTION, &FlowRateWizard::on_cali_action, this);
|
||||
|
||||
if (!m_page_steps.empty())
|
||||
show_step(m_page_steps.front());
|
||||
|
||||
set_cali_method(CalibrationMethod::CALI_METHOD_MANUAL);
|
||||
set_cali_method(CalibrationMethod::CALI_METHOD_MANUAL);
|
||||
});
|
||||
}
|
||||
|
||||
void FlowRateWizard::on_cali_action(wxCommandEvent& evt)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user