mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-25 01:40:57 +00:00
Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e266c7b234 | ||
|
|
0db1dc6480 | ||
|
|
42009cf385 | ||
|
|
9859d788d4 | ||
|
|
037b859447 | ||
|
|
02746cd0f5 | ||
|
|
66b300987b | ||
|
|
9bae19fcb3 | ||
|
|
fcd8131998 | ||
|
|
a8f1061a02 | ||
|
|
b46916a8be | ||
|
|
bf024ed34e | ||
|
|
0211277976 | ||
|
|
7758332406 | ||
|
|
cc883e458d |
@@ -70,6 +70,9 @@ if (POLICY CMP0092)
|
||||
cmake_policy(SET CMP0092 NEW)
|
||||
endif ()
|
||||
|
||||
# project() reads this, so set it first.
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_CURRENT_LIST_DIR}/cmake/modules/ClangClShowIncludes.cmake")
|
||||
|
||||
project(OrcaSlicer)
|
||||
|
||||
# Backward compatibility for old CMake versions
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# ccache does not parse the -clang: arguments CMake uses for clang-cl's gcc-style
|
||||
# depfile, so a cache hit writes the object and no depfile, and Ninja then records
|
||||
# no headers for that object. ccache reproduces /showIncludes output on a hit.
|
||||
foreach (_lang C CXX)
|
||||
if (CMAKE_${_lang}_COMPILER_ID STREQUAL "Clang" AND
|
||||
CMAKE_${_lang}_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
|
||||
set(CMAKE_DEPFILE_FLAGS_${_lang} "/showIncludes")
|
||||
set(CMAKE_${_lang}_DEPFILE_FORMAT msvc)
|
||||
endif ()
|
||||
endforeach ()
|
||||
Vendored
+10
@@ -38,6 +38,14 @@ if(POLICY CMP0135) # DOWNLOAD_EXTRACT_TIMESTAMP
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
|
||||
# project() reads this, so set it first. scripts/flatpak/make_deps_tar.sh packs deps/
|
||||
# without cmake/, so the file is missing in a Flatpak build.
|
||||
set(_rules_override "${CMAKE_CURRENT_LIST_DIR}/../cmake/modules/ClangClShowIncludes.cmake")
|
||||
if (EXISTS "${_rules_override}")
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_rules_override}")
|
||||
endif ()
|
||||
unset(_rules_override)
|
||||
|
||||
project(OrcaSlicer-deps)
|
||||
|
||||
# Backward compatibility for old CMake versions
|
||||
@@ -220,6 +228,7 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
|
||||
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
|
||||
-DCMAKE_USER_MAKE_RULES_OVERRIDE:STRING=${CMAKE_USER_MAKE_RULES_OVERRIDE}
|
||||
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
|
||||
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
|
||||
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
|
||||
@@ -267,6 +276,7 @@ else()
|
||||
-DCMAKE_IGNORE_PREFIX_PATH:STRING=${CMAKE_IGNORE_PREFIX_PATH}
|
||||
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
|
||||
-DCMAKE_USER_MAKE_RULES_OVERRIDE:STRING=${CMAKE_USER_MAKE_RULES_OVERRIDE}
|
||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||
${_cmake_osx_arch}
|
||||
"${_configs_line}"
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
# Deferred Page Construction: High Level Design
|
||||
|
||||
## Why it exists
|
||||
|
||||
The main window is a notebook of tabs. When the first frame appears, one tab is on
|
||||
screen and the others are not; some of them are opened later in the session, some
|
||||
never, and some only exist for certain printers. Building a tab before the first frame
|
||||
adds its cost to every startup, whether or not the tab is used.
|
||||
|
||||
This subsystem builds a tab's panel the first time the tab is shown. It also builds the
|
||||
remaining tabs while the user is idle after startup, in units of tens of milliseconds,
|
||||
so a click that lands in the middle of one waits for that unit and no longer. Startup
|
||||
pays only for what the first frame shows, and the other tabs are usually built before
|
||||
anyone opens them.
|
||||
|
||||
## The parts
|
||||
|
||||
`src/slic3r/GUI/Lazy.hpp`, `LazyPage.hpp`, `StagedBuild.hpp` and `IdleScheduler.hpp/.cpp`
|
||||
(with its wx-free `PrebuildQueue.hpp`) are independent. A holder can hold anything a
|
||||
factory makes, a page is a holder with a placeholder widget, a staged object can live
|
||||
outside a holder, and the scheduler knows none of them; it runs tasks, which `MainFrame`
|
||||
makes from the holders.
|
||||
|
||||
### Lazy<T>: the holder
|
||||
|
||||
Holds an object that a factory makes on first use, under a name for the log and a place
|
||||
in the idle queue, both given by the owner. The header has no wx dependency; the busy
|
||||
cursor for an on-demand build lives in `Lazy.cpp` and is skipped when there is no app,
|
||||
so the holder is unit-tested.
|
||||
|
||||
- `get()` is null until the object is completely built; `built()` says the same.
|
||||
- `ensure()` builds whatever is left now, under a busy cursor, and returns the object, or
|
||||
null in the two cases below. A click on an unbuilt tab or a first open of a dialog goes
|
||||
through this, and it logs the units and time it took.
|
||||
- `build_step()` runs one unit of construction and returns true while more remain. The
|
||||
first unit is the factory call, and each later unit is one `StagedBuild` step if the
|
||||
type has them.
|
||||
- `when_built(fn)` runs `fn(object)` now if it exists, otherwise once it is built.
|
||||
- `pending()` says whether the idle prebuild has work here: not built, and the factory
|
||||
has not returned null. A null factory result is logged and the holder stays unbuilt.
|
||||
- A unit that pumps the event loop cannot re-enter the holder; a nested `build_step()`
|
||||
does nothing and a nested `ensure()` returns null.
|
||||
- After a unit throws, the holder and the scheduler still run the next one.
|
||||
|
||||
The holder does not own the object; its wx parent does, as for any window. A type with
|
||||
one instance in the app derives from `LazyInstance<T>`, which points at that instance's
|
||||
holder (the holder registers itself, and a recreated `MainFrame`'s holder replaces the
|
||||
old frame's) and gives the type the static entry points the rest of the app uses,
|
||||
`T::if_built()`, `T::ensure()` and `T::when_built(fn)`. They return null, or do
|
||||
nothing, while no holder exists, so a caller needs no `mainframe` check.
|
||||
|
||||
`built()` is an atomic flag, since a job worker reads it through the statics
|
||||
(`MainFrame::get_calibration_curr_tab()`); it is set after the object is complete.
|
||||
|
||||
`LazyBase` is the holder's type-free interface (`name()`, `built()`, `pending()`,
|
||||
`build_step()`, `prebuild_order()`) and is what the scheduler side sees.
|
||||
|
||||
### LazyPage<Panel>: the placeholder
|
||||
|
||||
A `wxPanel` placed in the parent in place of the real panel, and a `Lazy<Panel>` whose
|
||||
factory makes the panel inside it (by default `new Panel(parent)`). The notebook needs a
|
||||
page object for the tab to exist and for `show_device()` to insert and remove tabs by
|
||||
pointer, and the placeholder is that object. `MainFrame` creates every page once, named
|
||||
after its `TAB_ID_*`, and keeps it for the frame's life; `show_device()` only moves
|
||||
pages in and out of the book.
|
||||
|
||||
- `Show()` is forwarded to the panel, so a panel's own `Show()` override stays its
|
||||
activation hook (refresh timers, machine sync) and `SelectPageByName()` works
|
||||
unchanged. A show builds the panel unless the frame itself is still hidden, because
|
||||
the book selects its first page as it is inserted; `MainFrame::Show()` shows the
|
||||
current page again when the frame becomes visible, which builds it.
|
||||
- `in_book()` says whether the parent notebook currently lists the page, and
|
||||
`pending()` is that and not built, so a tab `show_device()` has taken out of the book
|
||||
is not prebuilt.
|
||||
- A panel built while its page is hidden stays hidden, and a completed panel gets the
|
||||
dark-mode pass the frame ran before it existed.
|
||||
|
||||
The Compare presets dialog is a holder without a page. `MainFrame` keeps a
|
||||
`Lazy<DiffPresetDialog>` whose factory constructs the dialog and binds its events, the
|
||||
dialog derives from `LazyInstance`, and its callers use
|
||||
`DiffPresetDialog::ensure()->show()` and `DiffPresetDialog::if_built()` like a tab's
|
||||
callers do. Saving a preset refreshes the dialog only while it is shown, since `show()`
|
||||
reloads the presets.
|
||||
|
||||
### StagedBuild: construction in units
|
||||
|
||||
A mixin for a panel whose constructor is too big to be one unit. The constructor builds
|
||||
the skeleton (sizers, and the parts other code may touch) and queues the rest with
|
||||
`add_build_step()`. `build_step()` runs one step, and `add_build_steps_of(child)`
|
||||
forwards a child's steps so a nested panel is spread the same way; the parent is built
|
||||
only once the child is, including steps the child queues later. Steps run in order, on
|
||||
the main thread. A `Lazy<T>` recognises a staged type at compile time and runs its steps
|
||||
one per unit.
|
||||
|
||||
Nothing may touch what a step builds before the last step has run. In practice:
|
||||
|
||||
- nothing paints the panel before it is complete, since a panel built at idle is hidden
|
||||
with its page and one built on demand finishes inside `ensure()` before the event loop
|
||||
runs again;
|
||||
- members created in steps are initialised to null in the header, so a partially built
|
||||
panel can be destroyed;
|
||||
- timers and event handlers that use step content check `built()` first
|
||||
(`MonitorPanel::update_all()`, `CalibrationPanel::update_all()`), and a child's steps
|
||||
are queued before anything in the constructor can fire such a handler;
|
||||
- a destructor that disconnects from step content checks `built()` first;
|
||||
- a constructor or step does not take focus while the panel is off screen
|
||||
(`IsShownOnScreen()` before `SetFocus()`), since it may run while the user is typing
|
||||
elsewhere;
|
||||
- where a step's widgets must keep their place in a sizer that later steps also fill, the
|
||||
constructor adds an empty slot sizer in that position and the step fills the slot
|
||||
(`StatusBasePanel`).
|
||||
|
||||
### IdleScheduler: when to build
|
||||
|
||||
A task is any `LazyBase`: a name for the log, `pending()`, `build_step()` and
|
||||
`prebuild_order()`. `PrebuildQueue` holds the tasks by order (equal order in the order
|
||||
added) and runs a slice, the units of the first pending task until it completes, the
|
||||
budget is spent on the clock it is given, or the interrupt predicate says input arrived.
|
||||
It has no wx dependency and is unit-tested with a fake clock. A task whose work is gone
|
||||
is passed over and stays in the queue, so a tab that `show_device()` removes and later
|
||||
re-inserts is pending again.
|
||||
|
||||
`IdleScheduler` drives the queue with the real clock, the app's input timestamp and the
|
||||
Windows queue check, and logs each unit and slice. Each slice is a timer message: a
|
||||
period of 250 ms while waiting for the user to go quiet, and a one-shot of zero after a
|
||||
slice that left work, so the event loop dispatches whatever it has queued (paint,
|
||||
timers, input) before the next slice runs. Chaining slices with `CallAfter` would not do
|
||||
this: wx drains pending events fully before the next native message, on every platform.
|
||||
On GTK the one-shot is 5 ms, because a due GLib timeout runs ahead of the redraw and
|
||||
idle sources that paint and deliver posted events.
|
||||
A slice runs only once the user has been idle for the quiet time, and the timer stops
|
||||
itself once no task is pending. The tick period, quiet time and slice length are
|
||||
constants in `IdleScheduler.cpp`. A unit cannot be interrupted once started, so the
|
||||
largest unit bounds click latency on Windows; on the other platforms a click also waits
|
||||
for the rest of the slice. A unit that pumps the event loop lets the timer fire inside
|
||||
its own slice, and that tick does nothing.
|
||||
|
||||
The tasks are made by their owners. `MainFrame::prebuild_pages_when_idle()` registers
|
||||
every `LazyPage` the frame created, in or out of the book (`pending()` is false for a
|
||||
page out of the book), the Compare presets holder, and the Prepare sidebar's settings
|
||||
page from `ParamsPanel::settings_page_prebuild()`, whose first unit selects the default
|
||||
tab if none is selected yet and whose later units build one option group each.
|
||||
`show_device()` only restarts the timer. `MainFrame` owns the scheduler because it owns
|
||||
everything the tasks build, and clearing the queue with the frame is what keeps a task
|
||||
from outliving its object.
|
||||
|
||||
Idle time comes from `GUI_App::FilterEvent`, which timestamps mouse and keyboard events
|
||||
(`wxEVT_CATEGORY_USER_INPUT` minus command events, which all claim that category), and
|
||||
`GUI_App::input_idle_ms()` reports it. On Windows a slice additionally refuses to start
|
||||
when the message queue holds keyboard, button, touch or pen input. Mouse moves are
|
||||
excluded because Windows synthesises one whenever a window appears under the cursor,
|
||||
which every unit does. Other platforms use the timestamp alone.
|
||||
|
||||
Once every registered page is built the timer is stopped and the subsystem costs
|
||||
nothing.
|
||||
|
||||
## Rules
|
||||
|
||||
**What builds before the first frame.** The Prepare tab's plater, because `post_init()`
|
||||
needs its GL canvas on screen to initialise OpenGL in every startup state, and the start
|
||||
page the user configured. Home is built by the first `MainFrame::Show()`, Prepare's
|
||||
settings page by selecting the tab. `post_init()` passes through the Prepare tab for GL
|
||||
init under `Freeze()` with `MainFrame::select_prepare_for_gl_init()`, which changes the
|
||||
selection without the page-changed event, so nothing else is built for that pass.
|
||||
|
||||
**Reaching a lazy object.** A caller uses the type's own statics. `T::if_built()` may
|
||||
return null and is for telling the object something it can live without (a rescale, a
|
||||
colour change, a status update). `T::ensure()` builds the object and is for navigating
|
||||
to it or for a caller that is about to show it. A caller that tells the object something
|
||||
it would not fetch for itself on construction uses `T::when_built()`, which keeps the
|
||||
message until the object exists. A panel that pulls its state when constructed (the Home
|
||||
page requests the recent list on load, the Device tab reads the device manager on show)
|
||||
is reached with `if_built()`; one that cannot pull gets `when_built()`.
|
||||
|
||||
**Unit size.** A unit cannot be interrupted, so it should stay within the slice length on
|
||||
a fast machine. A constructor above that is staged. A single widget above it is the
|
||||
floor unless the widget itself is split.
|
||||
|
||||
**Order.** Cheapest and most likely to be opened first, given where `MainFrame` creates
|
||||
each holder. The settings page is 0 (the Prepare tab's own content), Home 10, Device 20
|
||||
(a Bambu user's usual second stop), Calibration 30, Multi-device 40, the web Device
|
||||
view 50, Project 60 (a second WebView2 instance) and the Compare presets dialog 100;
|
||||
steps of ten so a new tab takes a value between its neighbours without renumbering
|
||||
them. `MainFrame::prebuild_pages_when_idle()` registers the tasks once, from
|
||||
`post_init()`.
|
||||
|
||||
**Never prebuilt.** A holder with a negative order, for a tab that few sessions open
|
||||
and that costs more to build unasked than it saves (the Design tab), and plugin-provided
|
||||
tabs, which are Python-side and not lazy pages.
|
||||
|
||||
## Adopting it
|
||||
|
||||
A lazy tab needs:
|
||||
|
||||
1. The panel derived from `LazyInstance<Panel>`, since a tab's panel has one instance.
|
||||
2. A `LazyPage<Panel>*` member in `MainFrame`, created once in `init_tabpanel()` with
|
||||
its `TAB_ID_*` as the name, its place by the order rule (and a factory if
|
||||
`new Panel(parent)` is not enough), added to `m_lazy_pages`, and used wherever the
|
||||
tab is added to or looked up in the notebook.
|
||||
3. Every use of the panel outside `MainFrame` going through one of the panel's statics,
|
||||
chosen by the rule above. When converting an existing member, `grep` for it; the
|
||||
compiler finds the rest.
|
||||
4. A constructor that copes with the frame already existing and the user being busy
|
||||
elsewhere, since `wxGetApp().mainframe` is set, the frame may be shown, and the user
|
||||
may be typing when a lazy panel is built: no `SetFocus()` while off screen, and
|
||||
whatever the constructor did through a `MainFrame` accessor before (a mode update, a
|
||||
deferred URL) done in the constructor itself.
|
||||
|
||||
To stage a heavy constructor, inherit `StagedBuild`, keep the skeleton in the constructor,
|
||||
move the rest into `add_build_step()` lambdas in the original order, and follow the
|
||||
staged-panel rules above. Measure the units. A step that is still one big widget has to
|
||||
be split inside that widget or accepted as the floor.
|
||||
|
||||
Verification is by log. `MainFrame::prebuild_pages_when_idle` lists the queue it
|
||||
registered, `IdleScheduler::tick` reports each completed task by name at info level and
|
||||
each slice and unit at debug level, and `Lazy::ensure` reports an object a user built
|
||||
on demand with the units and time it took. A run from the configured start
|
||||
page shows every registered page complete, in order, with no unit longer than intended.
|
||||
A click on a tab mid-prebuild shows the finished panel with an `ensure` line for what was
|
||||
left, and the slices resume for the remaining tasks once the user is idle again.
|
||||
+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"
|
||||
}
|
||||
@@ -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
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -34,6 +34,10 @@ static const char* Segments_Vertex_Shader =
|
||||
// ORCA: 0 during the shadow caster pass - the bias below shifts eye_position but not
|
||||
// world_position, so the caster would write a depth the receiver never looks up.
|
||||
"uniform float bias_scale;\n"
|
||||
// draw the instances last to first, top layers before the ones they hide, so that early depth
|
||||
// rejection discards most of the hidden fragments; set when the camera looks down on the print
|
||||
"uniform int reverse_order;\n"
|
||||
"uniform int instance_count;\n"
|
||||
"in int vertex_id;\n"
|
||||
"out vec3 color;\n"
|
||||
"// ORCA: realistic view - the light the shadow map is able to block, kept apart from the\n"
|
||||
@@ -59,7 +63,8 @@ static const char* Segments_Vertex_Shader =
|
||||
" return top_diffuse + front_diffuse + top_specular;\n"
|
||||
"}\n"
|
||||
"void main() {\n"
|
||||
" int id_a = int(texelFetch(segment_index_tex, gl_InstanceID).r);\n"
|
||||
" int instance = (reverse_order != 0) ? instance_count - 1 - gl_InstanceID : gl_InstanceID;\n"
|
||||
" int id_a = int(texelFetch(segment_index_tex, instance).r);\n"
|
||||
" int id_b = id_a + 1;\n"
|
||||
" vec3 pos_a = texelFetch(position_tex, id_a).xyz;\n"
|
||||
" vec3 pos_b = texelFetch(position_tex, id_b).xyz;\n"
|
||||
|
||||
@@ -763,6 +763,8 @@ void ViewerImpl::init(const std::string& opengl_context_version)
|
||||
m_uni_segments_height_width_angle_tex_id = glGetUniformLocation(m_segments_shader_id, "height_width_angle_tex");
|
||||
m_uni_segments_colors_tex_id = glGetUniformLocation(m_segments_shader_id, "color_tex");
|
||||
m_uni_segments_segment_index_tex_id = glGetUniformLocation(m_segments_shader_id, "segment_index_tex");
|
||||
m_uni_segments_reverse_order_id = glGetUniformLocation(m_segments_shader_id, "reverse_order");
|
||||
m_uni_segments_instance_count_id = glGetUniformLocation(m_segments_shader_id, "instance_count");
|
||||
// ORCA: realistic view
|
||||
m_uni_segments_shadow_map_id = glGetUniformLocation(m_segments_shader_id, "shadow_map");
|
||||
m_uni_segments_shadow_light_vp_id = glGetUniformLocation(m_segments_shader_id, "shadow_light_vp");
|
||||
@@ -2090,6 +2092,15 @@ void ViewerImpl::render_segments(const Mat4x4& view_matrix, const Mat4x4& projec
|
||||
glsafe(glUniformMatrix4fv(m_uni_segments_view_matrix_id, 1, GL_FALSE, view_matrix.data()));
|
||||
glsafe(glUniformMatrix4fv(m_uni_segments_projection_matrix_id, 1, GL_FALSE, projection_matrix.data()));
|
||||
glsafe(glUniform3fv(m_uni_segments_camera_position_id, 1, camera_position.data()));
|
||||
// The segments come in print order, bottom layer first. Seen from above, that is back to front,
|
||||
// and every hidden fragment is shaded before the one that covers it. Drawing them last to first
|
||||
// lets the depth test reject the hidden ones instead. The camera looks down when the world's
|
||||
// up axis points towards it, which is the view matrix's (2, 2) entry being positive.
|
||||
const bool top_down = !m_rendering_shadow_casters && view_matrix[10] > 0.0f;
|
||||
glsafe(glUniform1i(m_uni_segments_reverse_order_id, top_down ? 1 : 0));
|
||||
#ifndef ENABLE_OPENGL_ES
|
||||
glsafe(glUniform1i(m_uni_segments_instance_count_id, static_cast<int>(m_enabled_segments_count)));
|
||||
#endif // ENABLE_OPENGL_ES
|
||||
// ORCA: realistic view. The depth pass writes the map it would otherwise read, so it shades
|
||||
// with the lookup off.
|
||||
glsafe(glUniform1i(m_uni_segments_shadow_map_id, m_shadow_map_texture_unit));
|
||||
|
||||
@@ -362,6 +362,8 @@ private:
|
||||
int m_uni_segments_height_width_angle_tex_id{ -1 };
|
||||
int m_uni_segments_colors_tex_id{ -1 };
|
||||
int m_uni_segments_segment_index_tex_id{ -1 };
|
||||
int m_uni_segments_reverse_order_id{ -1 };
|
||||
int m_uni_segments_instance_count_id{ -1 };
|
||||
int m_uni_segments_shadow_map_id{ -1 };
|
||||
int m_uni_segments_shadow_light_vp_id{ -1 };
|
||||
int m_uni_segments_shadow_intensity_id{ -1 };
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "CalibrationWizardPresetPage.hpp"
|
||||
#include "CalibrationWizardCaliPage.hpp"
|
||||
#include "CalibrationWizardSavePage.hpp"
|
||||
#include "StagedBuild.hpp"
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
@@ -36,7 +37,7 @@ struct ConfigIndexValue
|
||||
int index{0};
|
||||
};
|
||||
|
||||
class CalibrationWizard : public wxPanel {
|
||||
class CalibrationWizard : public wxPanel, public StagedBuild {
|
||||
public:
|
||||
CalibrationWizard(wxWindow* parent, CalibMode mode,
|
||||
wxWindowID id = wxID_ANY,
|
||||
@@ -79,6 +80,9 @@ public:
|
||||
protected:
|
||||
void on_cali_go_home();
|
||||
|
||||
// Queues a page as a build step, created hidden and added to the pages sizer.
|
||||
void add_page_step(CalibrationWizardPageStep*& step, std::function<CalibrationWizardPage*()> make);
|
||||
|
||||
protected:
|
||||
/* wx widgets*/
|
||||
wxScrolledWindow* m_scrolledWindow;
|
||||
|
||||
@@ -192,8 +192,10 @@ void CalibrationCaliPage::update(MachineObject* obj)
|
||||
set_cali_img();
|
||||
}
|
||||
|
||||
// A calibration can run before the Device tab is ever opened, and only its status
|
||||
// panel shows a print error.
|
||||
if (obj->print_error > 0) {
|
||||
StatusPanel* status_panel = Slic3r::GUI::wxGetApp().mainframe->m_monitor->get_status_panel();
|
||||
StatusPanel* status_panel = MonitorPanel::ensure()->get_status_panel();
|
||||
status_panel->obj = obj;
|
||||
status_panel->update_error_message();
|
||||
}
|
||||
|
||||
@@ -538,7 +538,8 @@ void DeviceErrorDialog::on_button_click(ActionButton btn_id)
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::CHECK_ASSISTANT: {
|
||||
wxGetApp().mainframe->m_monitor->jump_to_HMS(); // go to assistant page
|
||||
if (MonitorPanel* monitor = MonitorPanel::if_built())
|
||||
monitor->jump_to_HMS(); // go to assistant page
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::FILAMENT_EXTRUDED: {
|
||||
@@ -568,7 +569,8 @@ void DeviceErrorDialog::on_button_click(ActionButton btn_id)
|
||||
}
|
||||
case DeviceErrorDialog::JUMP_TO_LIVEVIEW: {
|
||||
Slic3r::GUI::wxGetApp().mainframe->jump_to_monitor();
|
||||
Slic3r::GUI::wxGetApp().mainframe->m_monitor->jump_to_LiveView();
|
||||
if (MonitorPanel* monitor = MonitorPanel::if_built())
|
||||
monitor->jump_to_LiveView();
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::NO_REMINDER_NEXT_TIME: {
|
||||
@@ -618,7 +620,8 @@ void DeviceErrorDialog::on_button_click(ActionButton btn_id)
|
||||
}
|
||||
case DeviceErrorDialog::OK_JUMP_RACK: {
|
||||
Slic3r::GUI::wxGetApp().mainframe->jump_to_monitor();
|
||||
Slic3r::GUI::wxGetApp().mainframe->m_monitor->jump_to_Rack();
|
||||
if (MonitorPanel* monitor = MonitorPanel::if_built())
|
||||
monitor->jump_to_Rack();
|
||||
break;
|
||||
}
|
||||
case DeviceErrorDialog::ABORT: {
|
||||
|
||||
@@ -934,7 +934,8 @@ void wgtDeviceNozzleRackNozzleItem::OnBtnNozzleStatus(wxMouseEvent& evt)
|
||||
dlg.AddButton(wxID_OK,_L("Jump to the upgrade page"), true);
|
||||
|
||||
if (dlg.ShowModal() == wxID_OK) {
|
||||
wxGetApp().mainframe->m_monitor->jump_to_Upgrade();
|
||||
if (MonitorPanel* monitor = MonitorPanel::if_built())
|
||||
monitor->jump_to_Upgrade();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,7 +344,8 @@ void wgtDeviceNozzleRackHotendUpdate::OnStatusIconClick(wxMouseEvent& event)
|
||||
|
||||
if (dlg.ShowModal() == wxID_OK)
|
||||
{
|
||||
wxGetApp().mainframe->m_monitor->jump_to_Upgrade();
|
||||
if (MonitorPanel* monitor = MonitorPanel::if_built())
|
||||
monitor->jump_to_Upgrade();
|
||||
|
||||
wxCommandEvent evt(wxEVT_NOZZLE_JUMP_UPGRADE, GetId());
|
||||
evt.SetEventObject(this);
|
||||
|
||||
+223
-51
@@ -20,6 +20,7 @@
|
||||
#include "libslic3r/AppConfig.hpp"
|
||||
#include "3DScene.hpp"
|
||||
#include "BackgroundSlicingProcess.hpp"
|
||||
#include "CameraUtils.hpp"
|
||||
#include "GLShader.hpp"
|
||||
#include "GUI.hpp"
|
||||
#include "Tab.hpp"
|
||||
@@ -117,6 +118,36 @@ void GLCanvas3D::load_render_colors()
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
static void pan_camera(Camera& camera, const Vec2d& screen_delta, const Vec3d& anchor)
|
||||
{
|
||||
// Orca: Derive world-units-per-pixel from the projection which produced the visible frame.
|
||||
// Perspective additionally scales with the eye-space depth of the point being dragged.
|
||||
const auto& viewport = camera.get_viewport();
|
||||
const auto& projection = camera.get_projection_matrix().matrix();
|
||||
const double depth_scale = camera.get_type() == Camera::EType::Perspective ?
|
||||
(anchor - camera.get_position()).dot(camera.get_dir_forward()) : 1.0;
|
||||
const double projection_x = projection(0, 0) * viewport[2];
|
||||
const double projection_y = projection(1, 1) * viewport[3];
|
||||
|
||||
// Orca: X/Y projection coefficients already include zoom. Using them directly avoids a
|
||||
// project/unproject round-trip through window depth, whose precision depends on the scene frustum.
|
||||
if (viewport[2] > 0 && viewport[3] > 0 && anchor.allFinite() && depth_scale > EPSILON &&
|
||||
std::abs(projection_x) > EPSILON && std::abs(projection_y) > EPSILON) {
|
||||
const Vec3d displacement = 2.0 * depth_scale *
|
||||
(screen_delta.y() / projection_y * camera.get_dir_up() -
|
||||
screen_delta.x() / projection_x * camera.get_dir_right());
|
||||
if (displacement.allFinite()) {
|
||||
camera.translate(displacement);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Orca: Preserve the former target-plane behavior if the projection or anchor is invalid.
|
||||
// Screen Y grows downward, and the camera moves opposite to the drag.
|
||||
camera.translate(camera.get_inv_zoom() *
|
||||
(screen_delta.y() * camera.get_dir_up() - screen_delta.x() * camera.get_dir_right()));
|
||||
}
|
||||
|
||||
#ifdef __WXGTK3__
|
||||
// wxGTK3 seems to simulate OSX behavior in regard to HiDPI scaling support.
|
||||
RetinaHelper::RetinaHelper(wxWindow* window) : m_window(window), m_self(nullptr) {}
|
||||
@@ -2206,15 +2237,14 @@ void GLCanvas3D::_render_scene(const Camera& camera, const Size& cnv_size)
|
||||
_render_background();
|
||||
|
||||
//BBS add partplater rendering logic
|
||||
bool only_current = false, only_body = false, no_partplate = false;
|
||||
bool only_current = false, only_body = false;
|
||||
const bool show_bed = is_bed_visible();
|
||||
bool show_grid = true;
|
||||
GLGizmosManager::EType gizmo_type = m_gizmos.get_current_type();
|
||||
if (!m_main_toolbar.is_enabled()) {
|
||||
//only_body = true;
|
||||
only_current = true;
|
||||
}
|
||||
else if ((gizmo_type == GLGizmosManager::FdmSupports) || (gizmo_type == GLGizmosManager::Seam) || (gizmo_type == GLGizmosManager::MmSegmentation) || (gizmo_type == GLGizmosManager::FuzzySkin))
|
||||
no_partplate = true;
|
||||
else if (gizmo_type == GLGizmosManager::BrimEars && !camera.is_looking_downward())
|
||||
show_grid = false;
|
||||
if (m_axes_at_bed_center)
|
||||
@@ -2228,11 +2258,11 @@ void GLCanvas3D::_render_scene(const Camera& camera, const Size& cnv_size)
|
||||
if (m_canvas_type == ECanvasType::CanvasView3D) {
|
||||
// m_show_bed gates the plate list too: hiding the bed but leaving its grid and outline
|
||||
// floating would read as a rendering fault rather than a deliberate view option.
|
||||
if (!no_partplate && m_show_bed)
|
||||
if (show_bed)
|
||||
_render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), m_show_world_axes);
|
||||
if (!no_partplate && m_show_bed) //BBS: add outline logic
|
||||
if (show_bed) //BBS: add outline logic
|
||||
_render_platelist(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), only_current, only_body, hover_id, true, show_grid);
|
||||
if (m_axes_at_bed_center && m_show_bed && !no_partplate)
|
||||
if (m_axes_at_bed_center && show_bed)
|
||||
// Design tab: replace the plate's corner-origin grid with the origin-centred CAD grid.
|
||||
_render_cad_grid(camera.get_view_matrix(), camera.get_projection_matrix());
|
||||
|
||||
@@ -2324,6 +2354,13 @@ void GLCanvas3D::render_thumbnail(ThumbnailData & thumbnail_data,
|
||||
render_thumbnail(thumbnail_data, w, h, thumbnail_params, model_objects, m_volumes, camera_type, camera_view_angle_type, for_picking, ban_light);
|
||||
}
|
||||
|
||||
bool GLCanvas3D::_set_shown_canvas_current()
|
||||
{
|
||||
// Thumbnails also render outside render(), where another library's GL context (e.g. WebKitGTK's) can be current.
|
||||
// Inside render(), the shown canvas is the one already bound.
|
||||
return wxGetApp().plater()->get_current_canvas3D()->_set_current();
|
||||
}
|
||||
|
||||
void GLCanvas3D::render_thumbnail(ThumbnailData & thumbnail_data,
|
||||
unsigned int w,
|
||||
unsigned int h,
|
||||
@@ -2335,6 +2372,9 @@ void GLCanvas3D::render_thumbnail(ThumbnailData & thumbnail_data,
|
||||
bool for_picking,
|
||||
bool ban_light)
|
||||
{
|
||||
if (!_set_shown_canvas_current())
|
||||
return;
|
||||
|
||||
GLShaderProgram* shader = nullptr;
|
||||
if (for_picking)
|
||||
shader = wxGetApp().get_shader("flat");
|
||||
@@ -2373,6 +2413,9 @@ void GLCanvas3D::render_thumbnail(ThumbnailData & thumbnail_d
|
||||
bool for_picking,
|
||||
bool ban_light)
|
||||
{
|
||||
if (!_set_shown_canvas_current())
|
||||
return;
|
||||
|
||||
GLShaderProgram *shader = wxGetApp().get_shader("thumbnail");
|
||||
switch (OpenGLManager::get_framebuffers_type()) {
|
||||
case OpenGLManager::EFramebufferType::Arb: {
|
||||
@@ -3281,6 +3324,9 @@ void GLCanvas3D::unbind_event_handlers()
|
||||
m_canvas->Unbind(wxEVT_GESTURE_PAN, &GLCanvas3D::on_gesture, this);
|
||||
m_canvas->Unbind(wxEVT_GESTURE_ZOOM, &GLCanvas3D::on_gesture, this);
|
||||
m_canvas->Unbind(wxEVT_GESTURE_ROTATE, &GLCanvas3D::on_gesture, this);
|
||||
#if __WXOSX__
|
||||
initGestures(m_canvas->GetHandle(), nullptr);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4029,27 +4075,38 @@ void GLCanvas3D::on_gesture(wxGestureEvent &evt)
|
||||
|
||||
auto & camera = wxGetApp().plater()->get_camera();
|
||||
if (evt.GetEventType() == wxEVT_GESTURE_PAN) {
|
||||
auto p = evt.GetPosition();
|
||||
// Orca: Gesture coordinates must use framebuffer pixels, and one stable world-space
|
||||
// anchor must be retained for the complete gesture to prevent perspective drift.
|
||||
const auto p = evt.GetPosition();
|
||||
auto d = static_cast<wxPanGestureEvent&>(evt).GetDelta();
|
||||
float z = 0;
|
||||
const Vec3d &p2 = _mouse_to_3d({p.x, p.y}, &z);
|
||||
const Vec3d &p1 = _mouse_to_3d({p.x - d.x, p.y - d.y}, &z);
|
||||
camera.set_target(camera.get_target() + p1 - p2);
|
||||
Vec2d screen_position(p.x, p.y);
|
||||
Vec2d screen_delta(d.x, d.y);
|
||||
apply_retina_scale(screen_position);
|
||||
apply_retina_scale(screen_delta);
|
||||
if (evt.IsGestureStart() || !m_gesture_pan_anchor.has_value())
|
||||
m_gesture_pan_anchor = get_camera_pan_anchor(camera, ECameraNavigationType::Gesture,
|
||||
screen_position - screen_delta);
|
||||
pan_camera(camera, screen_delta, *m_gesture_pan_anchor);
|
||||
if (evt.IsGestureEnd())
|
||||
m_gesture_pan_anchor.reset();
|
||||
} else if (evt.GetEventType() == wxEVT_GESTURE_ZOOM) {
|
||||
static float zoom_start = 1;
|
||||
if (evt.IsGestureStart())
|
||||
zoom_start = camera.get_zoom();
|
||||
camera.set_zoom(zoom_start * static_cast<wxZoomGestureEvent&>(evt).GetZoomFactor());
|
||||
} else if (evt.GetEventType() == wxEVT_GESTURE_ROTATE) {
|
||||
PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate();
|
||||
// Orca: Rotation starts a different navigation operation, so a previous pan anchor
|
||||
// must not be reused; rotation and pan fallbacks share the same navigation pivot.
|
||||
m_gesture_pan_anchor.reset();
|
||||
bool rotate_limit = current_printer_technology() != ptSLA;
|
||||
static double last_rotate = 0;
|
||||
if (evt.IsGestureStart())
|
||||
last_rotate = 0;
|
||||
auto rotate = static_cast<wxRotateGestureEvent&>(evt).GetRotationAngle() - last_rotate;
|
||||
last_rotate += rotate;
|
||||
if (plate)
|
||||
camera.rotate_on_sphere_with_target(-rotate, 0, rotate_limit, plate->get_bounding_box().center());
|
||||
const std::optional<Vec3d> rotate_target = get_camera_orbit_target(ECameraNavigationType::Gesture);
|
||||
if (rotate_target.has_value())
|
||||
camera.rotate_on_sphere_with_target(-rotate, 0, rotate_limit, *rotate_target);
|
||||
else
|
||||
camera.rotate_on_sphere(-rotate, 0, rotate_limit);
|
||||
camera.auto_type(Camera::EType::Perspective);
|
||||
@@ -4339,6 +4396,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
post_event(SimpleEvent(EVT_GLCANVAS_SWITCH_TO_GLOBAL));
|
||||
}
|
||||
else if (evt.LeftDown() || evt.RightDown() || evt.MiddleDown()) {
|
||||
// Orca: Retain the click position even if the first motion event crosses a surface edge.
|
||||
m_mouse.set_start_position_2D_as_invalid();
|
||||
m_mouse.drag.start_position_2D = pos;
|
||||
|
||||
//BBS: add orient deactivate logic
|
||||
if (!m_gizmos.on_mouse(evt)) {
|
||||
if (_deactivate_arrange_menu() || _deactivate_orient_menu())
|
||||
@@ -4532,6 +4593,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
}
|
||||
// do not process the dragging if the left mouse was set down in another canvas
|
||||
else if (is_camera_rotate(evt, button_mappings)) {
|
||||
// Orca: Rotation and panning use different drag coordinates and cached anchors.
|
||||
// Clear the pan state before processing rotation or switching buttons mid-drag.
|
||||
m_mouse.set_start_position_2D_as_invalid();
|
||||
|
||||
if (!has_mouse_capture()) // ORCA keep tracking mouse position while drag active and cursor not in window bounds
|
||||
m_canvas->CaptureMouse();
|
||||
@@ -4549,12 +4613,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
if (this->m_canvas_type == ECanvasType::CanvasAssembleView || m_gizmos.get_current_type() == GLGizmosManager::FdmSupports ||
|
||||
m_gizmos.get_current_type() == GLGizmosManager::Seam || m_gizmos.get_current_type() == GLGizmosManager::MmSegmentation ||
|
||||
m_gizmos.get_current_type() == GLGizmosManager::FuzzySkin) {
|
||||
Vec3d rotate_target = Vec3d::Zero();
|
||||
if (!m_selection.is_empty())
|
||||
rotate_target = m_selection.get_bounding_box().center();
|
||||
// Orca: Reuse the centralized pivot policy for scene-oriented tools.
|
||||
const std::optional<Vec3d> rotate_target = get_camera_orbit_target(ECameraNavigationType::Mouse);
|
||||
if (rotate_target.has_value())
|
||||
camera.rotate_on_sphere_with_target(rot.x(), rot.y(), false, *rotate_target);
|
||||
else
|
||||
rotate_target = volumes_bounding_box().center();
|
||||
camera.rotate_on_sphere_with_target(rot.x(), rot.y(), false, rotate_target);
|
||||
camera.rotate_on_sphere(rot.x(), rot.y(), false);
|
||||
}
|
||||
else {
|
||||
if (wxGetApp().app_config->get_bool("use_free_camera"))
|
||||
@@ -4578,28 +4642,11 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
}
|
||||
camera.rotate_on_sphere_with_target(rot.x(), rot.y(), rotate_limit, m_rotation_center);
|
||||
} else {
|
||||
Vec3d rotate_target = Vec3d::Zero();
|
||||
if (m_canvas_type == ECanvasType::CanvasPreview) {
|
||||
PartPlate *plate = wxGetApp().plater()->get_partplate_list().get_curr_plate();
|
||||
if (plate)
|
||||
rotate_target = plate->get_bounding_box().center();
|
||||
}
|
||||
else {
|
||||
if (!m_selection.is_empty())
|
||||
rotate_target = m_selection.get_bounding_box().center();
|
||||
else {
|
||||
// Rotate around the center of objects on current plate
|
||||
auto bbox = volumes_bounding_box(true);
|
||||
if (!bbox.defined) {
|
||||
// Rotate around current plate center if current plate is empty
|
||||
bbox = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_bounding_box();
|
||||
}
|
||||
rotate_target = bbox.center();
|
||||
}
|
||||
}
|
||||
|
||||
if (!rotate_target.isZero())
|
||||
camera.rotate_on_sphere_with_target(rot.x(), rot.y(), rotate_limit, rotate_target);
|
||||
// Orca: Keep regular mouse orbit and perspective-pan fallback centered
|
||||
// on the same selection, active-plate, or scene reference.
|
||||
const std::optional<Vec3d> rotate_target = get_camera_orbit_target(ECameraNavigationType::Mouse);
|
||||
if (rotate_target.has_value())
|
||||
camera.rotate_on_sphere_with_target(rot.x(), rot.y(), rotate_limit, *rotate_target);
|
||||
else
|
||||
camera.rotate_on_sphere(rot.x(), rot.y(), rotate_limit);
|
||||
}
|
||||
@@ -4615,16 +4662,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
m_mouse.drag.start_position_3D = Vec3d((double)pos(0), (double)pos(1), 0.0);
|
||||
}
|
||||
else if (is_camera_pan(evt, button_mappings)) {
|
||||
// Orca: Pan uses screen coordinates and must not inherit the rotation start point.
|
||||
m_mouse.set_start_position_3D_as_invalid();
|
||||
|
||||
if (!has_mouse_capture()) // ORCA keep tracking mouse position while drag active and cursor not in window bounds
|
||||
m_canvas->CaptureMouse();
|
||||
|
||||
// if dragging with right button or if button functions swapped and dragging with left button over blank area then pan
|
||||
if (m_mouse.is_start_position_2D_defined()) {
|
||||
// get point in model space at Z = 0
|
||||
float z = 0.0f;
|
||||
const Vec3d& cur_pos = _mouse_to_3d(pos, &z);
|
||||
Vec3d orig = _mouse_to_3d(m_mouse.drag.start_position_2D, &z);
|
||||
Camera& camera = wxGetApp().plater()->get_camera();
|
||||
if (this->m_canvas_type != ECanvasType::CanvasAssembleView) {
|
||||
// Orca: Use a constrained camera when navigating the 3D scene with a regular mouse, if the free camera is not selected
|
||||
@@ -4636,7 +4681,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
camera.recover_from_free_camera();
|
||||
}
|
||||
|
||||
camera.set_target(camera.get_target() + orig - cur_pos);
|
||||
// Orca: Cache the surface under the initial click and apply every incremental
|
||||
// cursor delta at that depth, so perspective zoom and camera angle stay exact.
|
||||
const Vec2d screen_delta =
|
||||
pos.cast<double>() - m_mouse.drag.start_position_2D.cast<double>();
|
||||
if (!m_mouse.drag.camera_pan_anchor.has_value())
|
||||
m_mouse.drag.camera_pan_anchor = get_camera_pan_anchor(camera, ECameraNavigationType::Mouse,
|
||||
m_mouse.drag.start_position_2D.cast<double>());
|
||||
pan_camera(camera, screen_delta, *m_mouse.drag.camera_pan_anchor);
|
||||
m_dirty = true;
|
||||
m_mouse.ignore_right_up = true; // will be reset on button up event even if not right button is pressed
|
||||
}
|
||||
@@ -7329,11 +7381,8 @@ void GLCanvas3D::_picking_pass()
|
||||
m_hover_volume_idxs.clear();
|
||||
m_hover_plate_idxs.clear();
|
||||
|
||||
// Orca: ignore clipping plane if not applying
|
||||
GLGizmoBase *current_gizmo = m_gizmos.get_current();
|
||||
const ClippingPlane clipping_plane = ((!current_gizmo || current_gizmo->apply_clipping_plane()) ? m_gizmos.get_clipping_plane() :
|
||||
ClippingPlane::ClipsNothing())
|
||||
.inverted_normal();
|
||||
// Orca: Picking and camera navigation must interpret the active gizmo clipping plane identically.
|
||||
const ClippingPlane clipping_plane = get_raycaster_clipping_plane();
|
||||
const SceneRaycaster::HitResult hit = m_scene_raycaster.hit(m_mouse.position, wxGetApp().plater()->get_camera(), &clipping_plane);
|
||||
if (hit.is_valid()) {
|
||||
switch (hit.type)
|
||||
@@ -10627,6 +10676,129 @@ Vec3d GLCanvas3D::_mouse_to_bed_3d(const Point& mouse_pos)
|
||||
return mouse_ray(mouse_pos).intersect_plane(0.0);
|
||||
}
|
||||
|
||||
ClippingPlane GLCanvas3D::get_raycaster_clipping_plane() const
|
||||
{
|
||||
// Orca: Ignore the gizmo clipping plane when the active tool does not apply it, and
|
||||
// invert the result into the convention expected by SceneRaycaster.
|
||||
GLGizmoBase* current_gizmo = m_gizmos.get_current();
|
||||
return ((!current_gizmo || current_gizmo->apply_clipping_plane()) ? m_gizmos.get_clipping_plane() :
|
||||
ClippingPlane::ClipsNothing())
|
||||
.inverted_normal();
|
||||
}
|
||||
|
||||
std::optional<Vec3d> GLCanvas3D::get_camera_orbit_target(ECameraNavigationType navigation_type) const
|
||||
{
|
||||
// Orca: Centralize the pre-existing pivot rules so orbiting and pan fallback cannot
|
||||
// choose different reference depths for the same canvas and active tool.
|
||||
PartPlate* current_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate();
|
||||
if (navigation_type == ECameraNavigationType::Gesture)
|
||||
return current_plate == nullptr ? std::nullopt :
|
||||
std::make_optional(current_plate->get_bounding_box().center());
|
||||
|
||||
const GLGizmosManager::EType gizmo_type = m_gizmos.get_current_type();
|
||||
const bool use_scene_target = m_canvas_type == ECanvasType::CanvasAssembleView ||
|
||||
gizmo_type == GLGizmosManager::FdmSupports || gizmo_type == GLGizmosManager::Seam ||
|
||||
gizmo_type == GLGizmosManager::MmSegmentation || gizmo_type == GLGizmosManager::FuzzySkin;
|
||||
if (use_scene_target) {
|
||||
if (!m_selection.is_empty())
|
||||
return m_selection.get_bounding_box().center();
|
||||
|
||||
// Orca: Preserve the world-origin fallback used by orbit in an empty scene.
|
||||
return volumes_bounding_box().center();
|
||||
}
|
||||
|
||||
// Orca: Free-camera rotation uses Camera::m_target rather than a plate or selection pivot.
|
||||
if (wxGetApp().app_config->get_bool("use_free_camera"))
|
||||
return std::nullopt;
|
||||
|
||||
Vec3d target = Vec3d::Zero();
|
||||
if (m_canvas_type == ECanvasType::CanvasPreview) {
|
||||
if (current_plate != nullptr)
|
||||
target = current_plate->get_bounding_box().center();
|
||||
} else if (!m_selection.is_empty()) {
|
||||
target = m_selection.get_bounding_box().center();
|
||||
} else {
|
||||
// Orca: Match regular mouse orbit: objects on the active plate, then the plate itself.
|
||||
BoundingBoxf3 bbox = volumes_bounding_box(true);
|
||||
if (!bbox.defined && current_plate != nullptr)
|
||||
bbox = current_plate->get_bounding_box();
|
||||
if (bbox.defined)
|
||||
target = bbox.center();
|
||||
}
|
||||
|
||||
// Orca: Preserve the existing zero sentinel used by regular mouse orbit.
|
||||
return target.isZero() ? std::nullopt : std::make_optional(target);
|
||||
}
|
||||
|
||||
bool GLCanvas3D::is_bed_visible() const
|
||||
{
|
||||
if (m_canvas_type == ECanvasType::CanvasPreview)
|
||||
return m_render_preview;
|
||||
if (m_canvas_type != ECanvasType::CanvasView3D || !m_show_bed)
|
||||
return false;
|
||||
if (!m_main_toolbar.is_enabled())
|
||||
return true;
|
||||
|
||||
const auto type = m_gizmos.get_current_type();
|
||||
return type != GLGizmosManager::FdmSupports && type != GLGizmosManager::Seam &&
|
||||
type != GLGizmosManager::MmSegmentation && type != GLGizmosManager::FuzzySkin;
|
||||
}
|
||||
|
||||
Vec3d GLCanvas3D::get_camera_pan_anchor(Camera& camera, ECameraNavigationType navigation_type,
|
||||
const Vec2d& screen_position) const
|
||||
{
|
||||
// Orthographic panning has the same scale at every depth, so no raycast is needed.
|
||||
if (camera.get_type() != Camera::EType::Perspective)
|
||||
return camera.get_target();
|
||||
|
||||
// Orca: Reject non-finite anchors and points behind the camera before their depth is
|
||||
// allowed to scale a perspective pan.
|
||||
const Vec3d camera_position = camera.get_position();
|
||||
const Vec3d camera_forward = camera.get_dir_forward();
|
||||
const auto is_valid_anchor = [&camera_position, &camera_forward](const Vec3d& anchor) {
|
||||
return anchor.allFinite() && (anchor - camera_position).dot(camera_forward) > EPSILON;
|
||||
};
|
||||
|
||||
// Orca: Prefer the nearest visible bed or volume surface and exclude gizmos and
|
||||
// selected-volume picking priority from navigation depth selection.
|
||||
const ClippingPlane clipping_plane = get_raycaster_clipping_plane();
|
||||
const bool bed_visible = is_bed_visible();
|
||||
const SceneRaycaster::HitResult hit = m_scene_raycaster.hit(screen_position, camera, &clipping_plane,
|
||||
bed_visible ? SceneRaycaster::EHitMode::SceneOnly : SceneRaycaster::EHitMode::VolumesOnly);
|
||||
if (hit.is_valid()) {
|
||||
const Vec3d hit_position = hit.position.cast<double>();
|
||||
if (is_valid_anchor(hit_position))
|
||||
return hit_position;
|
||||
}
|
||||
|
||||
// Orca: When the cursor is just outside the visible plate, use the point under it on the active
|
||||
// plate plane. Using the plate center here would give it a different perspective depth.
|
||||
PartPlate* current_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate();
|
||||
// Orca: An almost edge-on perspective makes intersection depth extremely sensitive to
|
||||
// the cursor's vertical position. Use the stable orbit depth around horizontal views.
|
||||
static constexpr double min_plate_plane_forward_z = 0.05;
|
||||
if (bed_visible && std::abs(camera_forward.z()) >= min_plate_plane_forward_z &&
|
||||
current_plate != nullptr && current_plate->get_bounding_box().defined) {
|
||||
Vec3d ray_origin;
|
||||
Vec3d ray_direction;
|
||||
CameraUtils::ray_from_screen_pos(camera, screen_position, ray_origin, ray_direction);
|
||||
const double z_direction = ray_direction.z();
|
||||
if (ray_origin.allFinite() && ray_direction.allFinite() && std::abs(z_direction) > EPSILON) {
|
||||
const double plate_z = current_plate->get_bounding_box().center().z();
|
||||
const double distance = (plate_z - ray_origin.z()) / z_direction;
|
||||
const Vec3d plate_position = ray_origin + distance * ray_direction;
|
||||
const double eye_depth = (plate_position - camera_position).dot(camera_forward);
|
||||
if (distance >= 0.0 && is_valid_anchor(plate_position) &&
|
||||
eye_depth >= camera.get_near_z() && eye_depth <= camera.get_far_z())
|
||||
return plate_position;
|
||||
}
|
||||
}
|
||||
|
||||
// Orca: Near-horizontal rays and points outside the scene depth use the orbit reference point.
|
||||
const std::optional<Vec3d> orbit_target = get_camera_orbit_target(navigation_type);
|
||||
return orbit_target.has_value() && is_valid_anchor(*orbit_target) ? *orbit_target : camera.get_target();
|
||||
}
|
||||
|
||||
// While it looks like we can call
|
||||
// this->reload_scene(true, true)
|
||||
// the two functions are quite different:
|
||||
|
||||
@@ -338,6 +338,8 @@ class GLCanvas3D
|
||||
int move_volume_idx{ -1 };
|
||||
bool move_requires_threshold{ false };
|
||||
Point move_start_threshold_position_2D{ Invalid_2D_Point };
|
||||
// Orca: Keep the world-space point selected at the start of a mouse pan.
|
||||
std::optional<Vec3d> camera_pan_anchor;
|
||||
};
|
||||
|
||||
bool dragging{ false };
|
||||
@@ -346,7 +348,12 @@ class GLCanvas3D
|
||||
Drag drag;
|
||||
bool ignore_right_up;
|
||||
|
||||
void set_start_position_2D_as_invalid() { drag.start_position_2D = Drag::Invalid_2D_Point; }
|
||||
// Orca: The screen-space start and world-space anchor describe the same pan session.
|
||||
// Invalidating one must invalidate the other so a new drag cannot reuse stale depth.
|
||||
void set_start_position_2D_as_invalid() {
|
||||
drag.start_position_2D = Drag::Invalid_2D_Point;
|
||||
drag.camera_pan_anchor.reset();
|
||||
}
|
||||
void set_start_position_3D_as_invalid() { drag.start_position_3D = Drag::Invalid_3D_Point; }
|
||||
void set_move_start_threshold_position_2D_as_invalid() { drag.move_start_threshold_position_2D = Drag::Invalid_2D_Point; }
|
||||
|
||||
@@ -549,6 +556,8 @@ private:
|
||||
bool m_fps_overlay_tick{ false };
|
||||
LayersEditing m_layers_editing;
|
||||
Mouse m_mouse;
|
||||
// Orca: Gesture pans have their own lifecycle and stable world-space anchor.
|
||||
std::optional<Vec3d> m_gesture_pan_anchor;
|
||||
GLGizmosManager m_gizmos;
|
||||
//BBS: GUI refactor: GLToolbar
|
||||
mutable GLToolbar m_main_toolbar;
|
||||
@@ -1311,6 +1320,7 @@ private:
|
||||
bool _init_collapse_toolbar();
|
||||
|
||||
bool _set_current();
|
||||
bool _set_shown_canvas_current();
|
||||
void _resize(unsigned int w, unsigned int h);
|
||||
|
||||
//BBS: add part plate related logic
|
||||
@@ -1406,6 +1416,20 @@ private:
|
||||
// Convert the screen space coordinate to world coordinate on the bed.
|
||||
Vec3d _mouse_to_bed_3d(const Point& mouse_pos);
|
||||
|
||||
// Orca: Navigation type selects the legacy pivot policy used when no visible surface is hit.
|
||||
enum class ECameraNavigationType : unsigned char
|
||||
{
|
||||
Mouse,
|
||||
Gesture
|
||||
};
|
||||
|
||||
// Orca: These helpers keep clipping, orbit pivots, and perspective-pan depth selection consistent.
|
||||
ClippingPlane get_raycaster_clipping_plane() const;
|
||||
bool is_bed_visible() const;
|
||||
std::optional<Vec3d> get_camera_orbit_target(ECameraNavigationType navigation_type) const;
|
||||
Vec3d get_camera_pan_anchor(Camera& camera, ECameraNavigationType navigation_type,
|
||||
const Vec2d& screen_position) const;
|
||||
|
||||
void _start_timer() { m_timer.Start(100, wxTIMER_CONTINUOUS); }
|
||||
void _stop_timer() { m_timer.Stop(); }
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user